gpio.h
上传用户:wealth48
上传日期:2022-06-24
资源大小:1701k
文件大小:12k
源码类别:

uCOS

开发平台:

C/C++

  1. /***************************************************************************
  2. Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
  3. by threewter 2004.4.26
  4. ***************************************************************************/
  5. /***************************************************************************
  6.     #说明: 对于GPIO控制等相关的宏定义
  7. ----------------------------------  Bug  --------------------------------------
  8. ----------------------------------  TODO list  --------------------------------------
  9. ----------------------------------修正--------------------------------------
  10. 2004-8-11 创建
  11. ***************************************************************************/
  12. //GPIO端口的定义
  13. // 8 8 8 8
  14. // | MODE | PULLUP | PORT | OFFSET |
  15. #ifndef __GPIO_H__
  16. #define __GPIO_H__
  17. #define __REG(x) (*(volatile unsigned int*)(x))
  18. // I/O PORT
  19. #define GPCON(x) __REG(0x56000000+(x) * 0x10)
  20. #define GPDAT(x) __REG(0x56000004+(x) * 0x10)
  21. #define GPUP(x) __REG(0x56000008+(x) * 0x10)
  22. #define GPIO_OFS_SHIFT 0
  23. #define GPIO_PORT_SHIFTT 8
  24. #define GPIO_PULLUP_SHIFT 16 
  25. #define GPIO_MODE_SHIFT 24
  26. #define GPIO_OFS_MASK 0x000000ff
  27. #define GPIO_PORT_MASK 0x0000ff00
  28. #define GPIO_PULLUP_MASK 0x00ff0000
  29. #define GPIO_MODE_MASK 0xff000000
  30. #define GPIO_MODE_IN (0 << GPIO_MODE_SHIFT)
  31. #define GPIO_MODE_OUT (1 << GPIO_MODE_SHIFT)
  32. #define GPIO_MODE_ALT0 (2 << GPIO_MODE_SHIFT)
  33. #define GPIO_MODE_ALT1 (3 << GPIO_MODE_SHIFT)
  34. #define GPIO_PULLUP_EN (0 << GPIO_PULLUP_SHIFT)
  35. #define GPIO_PULLUP_DIS (1 << GPIO_PULLUP_SHIFT) 
  36. #define PORTA_OFS 0
  37. #define PORTB_OFS 1
  38. #define PORTC_OFS 2
  39. #define PORTD_OFS 3
  40. #define PORTE_OFS 4
  41. #define PORTF_OFS 5
  42. #define PORTG_OFS 6
  43. #define PORTH_OFS 7
  44. #define MAKE_GPIO_NUM(p, o) ((p << GPIO_PORT_SHIFTT) | (o << GPIO_OFS_SHIFT))
  45. #define GRAB_MODE(x) (((x) & GPIO_MODE_MASK) >> GPIO_MODE_SHIFT)
  46. #define GRAB_PULLUP(x) (((x) & GPIO_PULLUP_MASK) >> GPIO_PULLUP_SHIFT)
  47. #define GRAB_PORT(x) (((x) & GPIO_PORT_MASK) >> GPIO_PORT_SHIFTT)
  48. #define GRAB_OFS(x) (((x) & GPIO_OFS_MASK) >> GPIO_OFS_SHIFT)
  49. #define set_gpio_ctrl(x) 
  50. do{ GPCON(GRAB_PORT(x)) &= ~(0x3u << (GRAB_OFS(x)*2)); 
  51.    GPCON(GRAB_PORT(x)) |= (GRAB_MODE(x) << (GRAB_OFS(x)*2)); 
  52.    GPUP(GRAB_PORT(x)) &= ~(1 << GRAB_OFS(x)); 
  53.    GPUP(GRAB_PORT(x)) |= (GRAB_PULLUP(x) << GRAB_OFS(x)); }while(0)
  54. #define set_gpio_pullup(x) 
  55. ({ GPUP(GRAB_PORT((x))) &= ~(1 << GRAB_OFS((x))); 
  56.    GPUP(GRAB_PORT((x))) |= (GRAB_PULLUP((x)) << GRAB_OFS((x))); })
  57. #define set_gpio_pullup_user(x, v) 
  58. ({ GPUP(GRAB_PORT((x))) &= ~(1 << GRAB_OFS((x))); 
  59.    GPUP(GRAB_PORT((x))) |= ((v) << GRAB_OFS((x))); })
  60. #define set_gpio_mode(x) 
  61. ({ GPCON(GRAB_PORT((x))) &= ~(0x3 << (GRAB_OFS((x))*2)); 
  62.    GPCON(GRAB_PORT((x))) |= (GRAB_MODE((x)) << (GRAB_OFS((x))*2)); })
  63. #define set_gpio_mode_user(x, v) 
  64. ({ GPCON(GRAB_PORT((x))) & = ~(0x3 << (GRAB_OFS((x))*2)); 
  65.    GPCON(GRAB_PORT((x))) |= ((v) << (GRAB_OFS((x))*2)); })
  66. #define set_gpioA_mode(x) 
  67. ({ GPCON(GRAB_PORT((x))) &= ~(0x1 << GRAB_OFS((x))); 
  68.    GPCON(GRAB_PORT((x))) |= (GRAB_MODE((x)) << GRAB_OFS((x))); })
  69. #define read_gpio_bit(x) ((GPDAT(GRAB_PORT((x))) & (1<<GRAB_OFS((x)))) >> GRAB_OFS((x)))
  70. #define read_gpio_reg(x) (GPDAT(GRAB_PORT((x)))
  71. #define write_gpio_bit(x, v) 
  72. do{ GPDAT(GRAB_PORT(x)) &= ~(0x1 << GRAB_OFS(x)); 
  73.    GPDAT(GRAB_PORT(x)) |= ((v) << GRAB_OFS(x)); }while(0)
  74. #define write_gpio_reg(x, v) GPDAT(GRAB_PORT(x)) = (v)
  75. #define GPIO_A0 MAKE_GPIO_NUM(PORTA_OFS, 0)
  76. #define GPIO_A1 MAKE_GPIO_NUM(PORTA_OFS, 1)
  77. #define GPIO_A2 MAKE_GPIO_NUM(PORTA_OFS, 2)
  78. #define GPIO_A3 MAKE_GPIO_NUM(PORTA_OFS, 3)
  79. #define GPIO_A4 MAKE_GPIO_NUM(PORTA_OFS, 4)
  80. #define GPIO_A5 MAKE_GPIO_NUM(PORTA_OFS, 5)
  81. #define GPIO_A6 MAKE_GPIO_NUM(PORTA_OFS, 6)
  82. #define GPIO_A7 MAKE_GPIO_NUM(PORTA_OFS, 7)
  83. #define GPIO_A8 MAKE_GPIO_NUM(PORTA_OFS, 8)
  84. #define GPIO_A9 MAKE_GPIO_NUM(PORTA_OFS, 9)
  85. #define GPIO_A10 MAKE_GPIO_NUM(PORTA_OFS, 10)
  86. #define GPIO_A11 MAKE_GPIO_NUM(PORTA_OFS, 11)
  87. #define GPIO_A12 MAKE_GPIO_NUM(PORTA_OFS, 12)
  88. #define GPIO_A13 MAKE_GPIO_NUM(PORTA_OFS, 13)
  89. #define GPIO_A14 MAKE_GPIO_NUM(PORTA_OFS, 14)
  90. #define GPIO_A15 MAKE_GPIO_NUM(PORTA_OFS, 15)
  91. #define GPIO_A16 MAKE_GPIO_NUM(PORTA_OFS, 16)
  92. #define GPIO_A17 MAKE_GPIO_NUM(PORTA_OFS, 17)
  93. #define GPIO_A18 MAKE_GPIO_NUM(PORTA_OFS, 18)
  94. #define GPIO_A19 MAKE_GPIO_NUM(PORTA_OFS, 19)
  95. #define GPIO_A20 MAKE_GPIO_NUM(PORTA_OFS, 20)
  96. #define GPIO_A21 MAKE_GPIO_NUM(PORTA_OFS, 21)
  97. #define GPIO_A22 MAKE_GPIO_NUM(PORTA_OFS, 22)
  98. #define GPIO_B0 MAKE_GPIO_NUM(PORTB_OFS, 0)
  99. #define GPIO_B1 MAKE_GPIO_NUM(PORTB_OFS, 1)
  100. #define GPIO_B2 MAKE_GPIO_NUM(PORTB_OFS, 2)
  101. #define GPIO_B3 MAKE_GPIO_NUM(PORTB_OFS, 3)
  102. #define GPIO_B4 MAKE_GPIO_NUM(PORTB_OFS, 4)
  103. #define GPIO_B5 MAKE_GPIO_NUM(PORTB_OFS, 5)
  104. #define GPIO_B6 MAKE_GPIO_NUM(PORTB_OFS, 6)
  105. #define GPIO_B7 MAKE_GPIO_NUM(PORTB_OFS, 7)
  106. #define GPIO_B8 MAKE_GPIO_NUM(PORTB_OFS, 8)
  107. #define GPIO_B9 MAKE_GPIO_NUM(PORTB_OFS, 9)
  108. #define GPIO_B10 MAKE_GPIO_NUM(PORTB_OFS, 10)
  109. #define GPIO_C0 MAKE_GPIO_NUM(PORTC_OFS, 0)
  110. #define GPIO_C1 MAKE_GPIO_NUM(PORTC_OFS, 1)
  111. #define GPIO_C2 MAKE_GPIO_NUM(PORTC_OFS, 2)
  112. #define GPIO_C3 MAKE_GPIO_NUM(PORTC_OFS, 3)
  113. #define GPIO_C4 MAKE_GPIO_NUM(PORTC_OFS, 4)
  114. #define GPIO_C5 MAKE_GPIO_NUM(PORTC_OFS, 5)
  115. #define GPIO_C6 MAKE_GPIO_NUM(PORTC_OFS, 6)
  116. #define GPIO_C7 MAKE_GPIO_NUM(PORTC_OFS, 7)
  117. #define GPIO_C8 MAKE_GPIO_NUM(PORTC_OFS, 8)
  118. #define GPIO_C9 MAKE_GPIO_NUM(PORTC_OFS, 9)
  119. #define GPIO_C10 MAKE_GPIO_NUM(PORTC_OFS, 10)
  120. #define GPIO_C11 MAKE_GPIO_NUM(PORTC_OFS, 11)
  121. #define GPIO_C12 MAKE_GPIO_NUM(PORTC_OFS, 12)
  122. #define GPIO_C13 MAKE_GPIO_NUM(PORTC_OFS, 13)
  123. #define GPIO_C14 MAKE_GPIO_NUM(PORTC_OFS, 14)
  124. #define GPIO_C15 MAKE_GPIO_NUM(PORTC_OFS, 15)
  125. #define GPIO_D0 MAKE_GPIO_NUM(PORTD_OFS, 0)
  126. #define GPIO_D1 MAKE_GPIO_NUM(PORTD_OFS, 1)
  127. #define GPIO_D2 MAKE_GPIO_NUM(PORTD_OFS, 2)
  128. #define GPIO_D3 MAKE_GPIO_NUM(PORTD_OFS, 3)
  129. #define GPIO_D4 MAKE_GPIO_NUM(PORTD_OFS, 4)
  130. #define GPIO_D5 MAKE_GPIO_NUM(PORTD_OFS, 5)
  131. #define GPIO_D6 MAKE_GPIO_NUM(PORTD_OFS, 6)
  132. #define GPIO_D7 MAKE_GPIO_NUM(PORTD_OFS, 7)
  133. #define GPIO_D8 MAKE_GPIO_NUM(PORTD_OFS, 8)
  134. #define GPIO_D9 MAKE_GPIO_NUM(PORTD_OFS, 9)
  135. #define GPIO_D10 MAKE_GPIO_NUM(PORTD_OFS, 10)
  136. #define GPIO_D11 MAKE_GPIO_NUM(PORTD_OFS, 11)
  137. #define GPIO_D12 MAKE_GPIO_NUM(PORTD_OFS, 12)
  138. #define GPIO_D13 MAKE_GPIO_NUM(PORTD_OFS, 13)
  139. #define GPIO_D14 MAKE_GPIO_NUM(PORTD_OFS, 14)
  140. #define GPIO_D15 MAKE_GPIO_NUM(PORTD_OFS, 15)
  141. #define GPIO_E0 MAKE_GPIO_NUM(PORTE_OFS, 0)
  142. #define GPIO_E1 MAKE_GPIO_NUM(PORTE_OFS, 1)
  143. #define GPIO_E2 MAKE_GPIO_NUM(PORTE_OFS, 2)
  144. #define GPIO_E3 MAKE_GPIO_NUM(PORTE_OFS, 3)
  145. #define GPIO_E4 MAKE_GPIO_NUM(PORTE_OFS, 4)
  146. #define GPIO_E5 MAKE_GPIO_NUM(PORTE_OFS, 5)
  147. #define GPIO_E6 MAKE_GPIO_NUM(PORTE_OFS, 6)
  148. #define GPIO_E7 MAKE_GPIO_NUM(PORTE_OFS, 7)
  149. #define GPIO_E8 MAKE_GPIO_NUM(PORTE_OFS, 8)
  150. #define GPIO_E9 MAKE_GPIO_NUM(PORTE_OFS, 9)
  151. #define GPIO_E10 MAKE_GPIO_NUM(PORTE_OFS, 10)
  152. #define GPIO_E11 MAKE_GPIO_NUM(PORTE_OFS, 11)
  153. #define GPIO_E12 MAKE_GPIO_NUM(PORTE_OFS, 12)
  154. #define GPIO_E13 MAKE_GPIO_NUM(PORTE_OFS, 13)
  155. #define GPIO_E14 MAKE_GPIO_NUM(PORTE_OFS, 14)
  156. #define GPIO_E15 MAKE_GPIO_NUM(PORTE_OFS, 15)
  157. #define GPIO_F0 MAKE_GPIO_NUM(PORTF_OFS, 0)
  158. #define GPIO_F1 MAKE_GPIO_NUM(PORTF_OFS, 1)
  159. #define GPIO_F2 MAKE_GPIO_NUM(PORTF_OFS, 2)
  160. #define GPIO_F3 MAKE_GPIO_NUM(PORTF_OFS, 3)
  161. #define GPIO_F4 MAKE_GPIO_NUM(PORTF_OFS, 4)
  162. #define GPIO_F5 MAKE_GPIO_NUM(PORTF_OFS, 5)
  163. #define GPIO_F6 MAKE_GPIO_NUM(PORTF_OFS, 6)
  164. #define GPIO_F7 MAKE_GPIO_NUM(PORTF_OFS, 7)
  165. #define GPIO_G0 MAKE_GPIO_NUM(PORTG_OFS, 0)
  166. #define GPIO_G1 MAKE_GPIO_NUM(PORTG_OFS, 1)
  167. #define GPIO_G2 MAKE_GPIO_NUM(PORTG_OFS, 2)
  168. #define GPIO_G3 MAKE_GPIO_NUM(PORTG_OFS, 3)
  169. #define GPIO_G4 MAKE_GPIO_NUM(PORTG_OFS, 4)
  170. #define GPIO_G5 MAKE_GPIO_NUM(PORTG_OFS, 5)
  171. #define GPIO_G6 MAKE_GPIO_NUM(PORTG_OFS, 6)
  172. #define GPIO_G7 MAKE_GPIO_NUM(PORTG_OFS, 7)
  173. #define GPIO_G8 MAKE_GPIO_NUM(PORTG_OFS, 8)
  174. #define GPIO_G9 MAKE_GPIO_NUM(PORTG_OFS, 9)
  175. #define GPIO_G10 MAKE_GPIO_NUM(PORTG_OFS, 10)
  176. #define GPIO_G11 MAKE_GPIO_NUM(PORTG_OFS, 11)
  177. #define GPIO_G12 MAKE_GPIO_NUM(PORTG_OFS, 12)
  178. #define GPIO_G13 MAKE_GPIO_NUM(PORTG_OFS, 13)
  179. #define GPIO_G14 MAKE_GPIO_NUM(PORTG_OFS, 14)
  180. #define GPIO_G15 MAKE_GPIO_NUM(PORTG_OFS, 15)
  181. #define GPIO_H0 MAKE_GPIO_NUM(PORTH_OFS, 0)
  182. #define GPIO_H1 MAKE_GPIO_NUM(PORTH_OFS, 1)
  183. #define GPIO_H2 MAKE_GPIO_NUM(PORTH_OFS, 2)
  184. #define GPIO_H3 MAKE_GPIO_NUM(PORTH_OFS, 3)
  185. #define GPIO_H4 MAKE_GPIO_NUM(PORTH_OFS, 4)
  186. #define GPIO_H5 MAKE_GPIO_NUM(PORTH_OFS, 5)
  187. #define GPIO_H6 MAKE_GPIO_NUM(PORTH_OFS, 6)
  188. #define GPIO_H7 MAKE_GPIO_NUM(PORTH_OFS, 7)
  189. #define GPIO_H8 MAKE_GPIO_NUM(PORTH_OFS, 8)
  190. #define GPIO_H9 MAKE_GPIO_NUM(PORTH_OFS, 9)
  191. #define GPIO_H10 MAKE_GPIO_NUM(PORTH_OFS, 10)
  192. #define GPIO_MODE_TOUT GPIO_MODE_ALT0
  193. #define GPIO_MODE_nXBACK GPIO_MODE_ALT0
  194. #define GPIO_MODE_nXBREQ GPIO_MODE_ALT0
  195. #define GPIO_MODE_nXDACK GPIO_MODE_ALT0
  196. #define GPIO_MODE_nXDREQ GPIO_MODE_ALT0
  197. #define GPIO_MODE_LEND GPIO_MODE_ALT0
  198. #define GPIO_MODE_VCLK GPIO_MODE_ALT0
  199. #define GPIO_MODE_VLINE GPIO_MODE_ALT0
  200. #define GPIO_MODE_VFRAME GPIO_MODE_ALT0
  201. #define GPIO_MODE_VM GPIO_MODE_ALT0
  202. #define GPIO_MODE_LCDVF GPIO_MODE_ALT0
  203. #define GPIO_MODE_VD GPIO_MODE_ALT0
  204. #define GPIO_MODE_IICSDA GPIO_MODE_ALT0
  205. #define GPIO_MODE_IICSCL GPIO_MODE_ALT0
  206. #define GPIO_MODE_SPICLK GPIO_MODE_ALT0
  207. #define GPIO_MODE_SPIMOSI GPIO_MODE_ALT0
  208. #define GPIO_MODE_SPIMISO GPIO_MODE_ALT0
  209. #define GPIO_MODE_SDDAT GPIO_MODE_ALT0
  210. #define GPIO_MODE_SDCMD GPIO_MODE_ALT0
  211. #define GPIO_MODE_SDCLK GPIO_MODE_ALT0
  212. #define GPIO_MODE_I2SSDO GPIO_MODE_ALT0
  213. #define GPIO_MODE_I2SSDI GPIO_MODE_ALT0
  214. #define GPIO_MODE_CDCLK GPIO_MODE_ALT0
  215. #define GPIO_MODE_I2SSCLK GPIO_MODE_ALT0
  216. #define GPIO_MODE_I2SLRCK GPIO_MODE_ALT0
  217. #define GPIO_MODE_I2SSDI_ABNORMAL GPIO_MODE_ALT1
  218. #define GPIO_MODE_nSS GPIO_MODE_ALT1
  219. #define GPIO_MODE_EINT GPIO_MODE_ALT0
  220. #define GPIO_MODE_nYPON GPIO_MODE_ALT1
  221. #define GPIO_MODE_YMON GPIO_MODE_ALT1
  222. #define GPIO_MODE_nXPON GPIO_MODE_ALT1
  223. #define GPIO_MODE_XMON GPIO_MODE_ALT1
  224. #define GPIO_MODE_UART GPIO_MODE_ALT0
  225. #define GPIO_MODE_TCLK_ABNORMAL GPIO_MODE_ALT1
  226. #define GPIO_MODE_SPICLK_ABNORMAL GPIO_MODE_ALT1
  227. #define GPIO_MODE_SPIMOSI_ABNORMAL GPIO_MODE_ALT1
  228. #define GPIO_MODE_SPIMISO_ABNORMAL GPIO_MODE_ALT1
  229. #define GPIO_MODE_LCD_PWRDN GPIO_MODE_ALT1
  230. #define GPIO_CTL_BASE 0x56000000
  231. #define bGPIO(p) __REG(GPIO_CTL_BASE + (p))
  232. #define rMISCCR bGPIO(0x80)
  233. #define rDCLKCON bGPIO(0x84)
  234. #define rEXTINT0 bGPIO(0x88)
  235. #define rEXTINT1 bGPIO(0x8c)
  236. #define rEXTINT2 bGPIO(0x90)
  237. #define rEINTFLT0 bGPIO(0x94)
  238. #define rEINTFLT1 bGPIO(0x98)
  239. #define rEINTFLT2 bGPIO(0x9c)
  240. #define rEINTFLT3 bGPIO(0xa0)
  241. #define rEINTMASK bGPIO(0xa4)
  242. #define rEINTPEND bGPIO(0xa8)
  243. #define rGSTATUS0 bGPIO(0xac)
  244. #define rGSTATUS1 bGPIO(0xb0)
  245. #define rGSTATUS2 bGPIO(0xb4)
  246. #define rGSTATUS3 bGPIO(0xb8)
  247. #define rGSTATUS4 bGPIO(0xbc)
  248. #define rGPACON bGPIO(0x00)
  249. #define rGPADAT bGPIO(0x04)
  250. #define rGPBCON bGPIO(0x10)
  251. #define rGPBDAT bGPIO(0x14)
  252. #define rGPBUP bGPIO(0x18)
  253. #define rGPCCON bGPIO(0x20)
  254. #define rGPCDAT bGPIO(0x24)
  255. #define rGPCUP bGPIO(0x28)
  256. #define rGPDCON bGPIO(0x30)
  257. #define rGPDDAT bGPIO(0x34)
  258. #define rGPDUP bGPIO(0x38)
  259. #define rGPECON bGPIO(0x40)
  260. #define rGPEDAT bGPIO(0x44)
  261. #define rGPEUP bGPIO(0x48)
  262. #define rGPFCON bGPIO(0x50)
  263. #define rGPFDAT bGPIO(0x54)
  264. #define rGPFUP bGPIO(0x58)
  265. #define rGPGCON bGPIO(0x60)
  266. #define rGPGDAT bGPIO(0x64)
  267. #define rGPGUP bGPIO(0x68)
  268. #define rGPHCON bGPIO(0x70)
  269. #define rGPHDAT bGPIO(0x74)
  270. #define rGPHUP bGPIO(0x78)
  271. /*
  272.  * S3C2410 GPIO edge detection for IRQs:
  273.  * IRQs are generated on Falling-Edge, Rising-Edge, both, low level or higg level.
  274.  * This must be called *before* the corresponding IRQ is registered.
  275.  */
  276. #define EXT_LOWLEVEL 0
  277. #define EXT_HIGHLEVEL 1
  278. #define EXT_FALLING_EDGE 2
  279. #define EXT_RISING_EDGE 4
  280. #define EXT_BOTH_EDGES 6
  281. #endif