io_def.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. #ifndef __IO_DEF_H
  2. #define __IO_DEF_H
  3. #include "global.h"
  4. #include "config.h"
  5. #include "sfr.h"
  6. #if (SD0_MAPPING == SD0MAP_G1)
  7. //SDCMD(PA5), SDCLK(PA6), SDDAT0(PA7)
  8. #define SD0CMD_GP A
  9. #define SD0CLK_GP A
  10. #define SD0DAT_GP A
  11. #define SD0CMD_BIT BIT(5)
  12. #define SD0CLK_BIT BIT(6)
  13. #define SD0DAT_BIT BIT(7)
  14. #define SD0_FCON_INIT() FUNCMCON0 = SD0MAP_G1
  15. #define SDCMD_IO IO_PA5
  16. #define SDCLK_IO IO_PA6
  17. #define SDDAT_IO IO_PA7
  18. #elif (SD0_MAPPING == SD0MAP_G2)
  19. //SDCMD(PB0), SDCLK(PB1), SDDAT0(PB2)
  20. #define SD0CMD_GP B
  21. #define SD0CLK_GP B
  22. #define SD0DAT_GP B
  23. #define SD0CMD_BIT BIT(0)
  24. #define SD0CLK_BIT BIT(1)
  25. #define SD0DAT_BIT BIT(2)
  26. #define SD0_FCON_INIT() FUNCMCON0 = SD0MAP_G2
  27. #define SDCMD_IO IO_PB0
  28. #define SDCLK_IO IO_PB1
  29. #define SDDAT_IO IO_PB2
  30. #elif (SD0_MAPPING == SD0MAP_G3)
  31. //SDCMD(PE5), SDCLK(PE6), SDDAT0(PE7)
  32. #define SD0CMD_GP E
  33. #define SD0CLK_GP E
  34. #define SD0DAT_GP E
  35. #define SD0CMD_BIT BIT(5)
  36. #define SD0CLK_BIT BIT(6)
  37. #define SD0DAT_BIT BIT(7)
  38. #define SD0_FCON_INIT() FUNCMCON0 = SD0MAP_G3
  39. #define SDCMD_IO IO_PB13
  40. #define SDCLK_IO IO_PB14
  41. #define SDDAT_IO IO_PB15
  42. #elif (SD0_MAPPING == SD0MAP_G4)
  43. //SDCMD(PA5), SDCLK(PA6), SDDAT0(PB4)
  44. #define SD0CMD_GP A
  45. #define SD0CLK_GP A
  46. #define SD0DAT_GP B
  47. #define SD0CMD_BIT BIT(5)
  48. #define SD0CLK_BIT BIT(6)
  49. #define SD0DAT_BIT BIT(4)
  50. #define SD0_FCON_INIT() FUNCMCON0 = SD0MAP_G4
  51. #define SDCMD_IO IO_PE11
  52. #define SDCLK_IO IO_PE12
  53. #define SDDAT_IO IO_PE13
  54. #elif (SD0_MAPPING == SD0MAP_G5)
  55. //SDCMD(PA5), SDCLK(PA6), SDDAT0(PB3)
  56. #define SD0CMD_GP A
  57. #define SD0CLK_GP A
  58. #define SD0DAT_GP B
  59. #define SD0CMD_BIT BIT(5)
  60. #define SD0CLK_BIT BIT(6)
  61. #define SD0DAT_BIT BIT(3)
  62. #define SD0_FCON_INIT() FUNCMCON0 = SD0MAP_G5
  63. #define SDCMD_IO IO_PE11
  64. #define SDCLK_IO IO_PE12
  65. #define SDDAT_IO IO_PB3
  66. #elif (SD0_MAPPING == SD0MAP_G6)
  67. //SDCMD(PB3), SDCLK(PA6), SDDAT0(PB4)
  68. #define SD0CMD_GP B
  69. #define SD0CLK_GP A
  70. #define SD0DAT_GP B
  71. #define SD0CMD_BIT BIT(3)
  72. #define SD0CLK_BIT BIT(6)
  73. #define SD0DAT_BIT BIT(6)
  74. #define SD0_FCON_INIT() FUNCMCON0 = SD0MAP_G6
  75. #define SDCMD_IO IO_PE11
  76. #define SDCLK_IO IO_PE12
  77. #define SDDAT_IO IO_PB4
  78. #elif (SD0_MAPPING == SD0MAP_G7)
  79. #error "SD0MAP_G7 is not allowed!"
  80. //SDCMD(PB3), SDCLK(PE12), SDDAT0(PB4)
  81. #define SD0CMD_GP B
  82. #define SD0CLK_GP E
  83. #define SD0DAT_GP B
  84. #define SD0CMD_BIT BIT(11)
  85. #define SD0CLK_BIT BIT(12)
  86. #define SD0DAT_BIT BIT(6)
  87. #define SD0_FCON_INIT() FUNCMCON0 = SD0MAP_G7
  88. #define SDCMD_IO IO_PB3
  89. #define SDCLK_IO IO_PE12
  90. #define SDDAT_IO IO_PB4
  91. #endif
  92. #if (SD0_MAPPING >= SD0MAP_G1 && SD0_MAPPING <= SD0MAP_G7)
  93. #define SD0CMD_GPIODE SET_MACRO(GPIO, SET_MACRO(SD0CMD_GP, DE))
  94. #define SD0CMD_GPIOFEN SET_MACRO(GPIO, SET_MACRO(SD0CMD_GP, FEN))
  95. #define SD0CMD_GPIODIR SET_MACRO(GPIO, SET_MACRO(SD0CMD_GP, DIR))
  96. #define SD0CMD_GPIOSET SET_MACRO(GPIO, SET_MACRO(SD0CMD_GP, SET))
  97. #define SD0CMD_GPIOCLR SET_MACRO(GPIO, SET_MACRO(SD0CMD_GP, CLR))
  98. #define SD0CMD_GPIOPU SET_MACRO(GPIO, SET_MACRO(SD0CMD_GP, PU))
  99. #define SD0CMD_GPIOPU300 SET_MACRO(GPIO, SET_MACRO(SD0CMD_GP, PU300))
  100. #define SD0CMD_GPIO SET_MACRO(GPIO, SD0CMD_GP)
  101. #define SD0CLK_GPIODE SET_MACRO(GPIO, SET_MACRO(SD0CLK_GP, DE))
  102. #define SD0CLK_GPIOFEN SET_MACRO(GPIO, SET_MACRO(SD0CLK_GP, FEN))
  103. #define SD0CLK_GPIODIR SET_MACRO(GPIO, SET_MACRO(SD0CLK_GP, DIR))
  104. #define SD0CLK_GPIOSET SET_MACRO(GPIO, SET_MACRO(SD0CLK_GP, SET))
  105. #define SD0CLK_GPIOCLR SET_MACRO(GPIO, SET_MACRO(SD0CLK_GP, CLR))
  106. #define SD0CLK_GPIOPU SET_MACRO(GPIO, SET_MACRO(SD0CLK_GP, PU))
  107. #define SD0CLK_GPIOPU300 SET_MACRO(GPIO, SET_MACRO(SD0CLK_GP, PU300))
  108. #define SD0CLK_GPIO SET_MACRO(GPIO, SD0CLK_GP)
  109. #define SD0DAT_GPIODE SET_MACRO(GPIO, SET_MACRO(SD0DAT_GP, DE))
  110. #define SD0DAT_GPIOFEN SET_MACRO(GPIO, SET_MACRO(SD0DAT_GP, FEN))
  111. #define SD0DAT_GPIODIR SET_MACRO(GPIO, SET_MACRO(SD0DAT_GP, DIR))
  112. #define SD0DAT_GPIOSET SET_MACRO(GPIO, SET_MACRO(SD0DAT_GP, SET))
  113. #define SD0DAT_GPIOCLR SET_MACRO(GPIO, SET_MACRO(SD0DAT_GP, CLR))
  114. #define SD0DAT_GPIOPU SET_MACRO(GPIO, SET_MACRO(SD0DAT_GP, PU))
  115. #define SD0DAT_GPIOPU300 SET_MACRO(GPIO, SET_MACRO(SD0DAT_GP, PU300))
  116. #define SD0DAT_GPIO SET_MACRO(GPIO, SD0DAT_GP)
  117. #define SD_MUX_IO_INIT() {SD0CLK_GPIODE |= SD0CLK_BIT;\
  118. SD0CMD_GPIODE |= SD0CMD_BIT;\
  119. SD0DAT_GPIODE |= SD0DAT_BIT;\
  120. SD0CLK_GPIOCLR = SD0CLK_BIT;\
  121. SD0CLK_GPIODIR &= ~SD0CLK_BIT;\
  122. SD0CLK_GPIOPU &= ~SD0CLK_BIT;\
  123. SD0CLK_GPIOFEN |= SD0CLK_BIT;\
  124. SD0CMD_GPIODIR |= SD0CMD_BIT;\
  125. SD0CMD_GPIOPU |= SD0CMD_BIT;\
  126. SD0CMD_GPIOFEN |= SD0CMD_BIT;\
  127. SD0DAT_GPIODIR |= SD0DAT_BIT;\
  128. SD0DAT_GPIOPU |= SD0DAT_BIT;\
  129. SD0DAT_GPIOFEN |= SD0DAT_BIT;\
  130. SD0_FCON_INIT();}
  131. #define SD_IO_INIT() {SD0CLK_GPIODE |= SD0CLK_BIT;\
  132. SD0CMD_GPIODE |= SD0CMD_BIT;\
  133. SD0DAT_GPIODE |= SD0DAT_BIT;\
  134. SD0CLK_GPIODIR &= ~SD0CLK_BIT;\
  135. SD0CLK_GPIOFEN |= SD0CLK_BIT;\
  136. SD0CMD_GPIODIR |= SD0CMD_BIT;\
  137. SD0CMD_GPIOPU |= SD0CMD_BIT;\
  138. SD0CMD_GPIOFEN |= SD0CMD_BIT;\
  139. SD0DAT_GPIODIR |= SD0DAT_BIT;\
  140. SD0DAT_GPIOPU |= SD0DAT_BIT;\
  141. SD0DAT_GPIOFEN |= SD0DAT_BIT;\
  142. SD0_FCON_INIT();}
  143. #define SD_CLK_DIR_IN() {SD0CLK_GPIODIR |= SD0CLK_BIT; SD0CLK_GPIOPU |= SD0CLK_BIT;}
  144. #define SD_CLK_IN_DIS_PU10K() {SD0CLK_GPIODIR |= SD0CLK_BIT; SD0CLK_GPIOPU &= ~SD0CLK_BIT;}
  145. #define SD_CLK_DIR_OUT() {SD0CLK_GPIOPU &= ~SD0CLK_BIT; SD0CLK_GPIODIR &= ~SD0CLK_BIT;}
  146. #define SD_MUX_DETECT_INIT() {SD0CLK_GPIODE |= SD0CLK_BIT; SD0CLK_GPIOPU |= SD0CLK_BIT; SD0CLK_GPIODIR |= SD0CLK_BIT;}
  147. #define SD_MUX_IS_ONLINE() ((SD0CLK_GPIO & SD0CLK_BIT) == 0)
  148. #define SD_MUX_IS_BUSY() ((SD0CLK_GPIODIR & SD0CLK_BIT) == 0)
  149. #define SD_MUX_CMD_IS_BUSY() (SD0CMD_GPIOPU300 & SD0CMD_BIT)
  150. #define SD_CMD_MUX_PU300R() {SD0CMD_GPIOPU300 |= SD0CMD_BIT; SD0CMD_GPIOPU &= ~SD0CMD_BIT;}
  151. #define SD_CMD_MUX_PU10K() {SD0CMD_GPIOPU |= SD0CMD_BIT; SD0CMD_GPIOPU300 &= ~SD0CMD_BIT;}
  152. #define SD_DAT_MUX_PU300R() {SD0DAT_GPIOPU300 |= SD0DAT_BIT; SD0DAT_GPIOPU &= ~SD0DAT_BIT;}
  153. #define SD_DAT_MUX_PU10K() {SD0DAT_GPIOPU |= SD0DAT_BIT; SD0DAT_GPIOPU300 &= ~SD0DAT_BIT;}
  154. #define SD_CMD_MUX_IS_ONLINE() ((SD0CMD_GPIO & SD0CMD_BIT) == 0)
  155. #define SD_CLK_OUT_H() {SD0CLK_GPIOSET = SD0CLK_BIT;}
  156. #define SD_CLK_OUT_L() {SD0CLK_GPIOCLR = SD0CLK_BIT;}
  157. #define SD_CLK_STA() (SD0CLK_GPIO & SD0CLK_BIT)
  158. #define SD_DAT_DIR_OUT() {SD0DAT_GPIODE |= SD0DAT_BIT; SD0DAT_GPIODIR &= ~SD0DAT_BIT;}
  159. #define SD_DAT_DIR_IN() {SD0DAT_GPIODIR |= SD0DAT_BIT; SD0DAT_GPIOPU |= SD0DAT_BIT;}
  160. #define SD_DAT_OUT_H() {SD0DAT_GPIOSET = SD0DAT_BIT;}
  161. #define SD_DAT_OUT_L() {SD0DAT_GPIOCLR = SD0DAT_BIT;}
  162. #define SD_DAT_STA() (SD0DAT_GPIO & SD0DAT_BIT)
  163. #define SD_CMD_DIR_OUT() {SD0CMD_GPIODE |= SD0CMD_BIT; SD0CMD_GPIODIR &= ~SD0CMD_BIT;}
  164. #define SD_CMD_DIR_IN() {SD0CMD_GPIODIR |= SD0CMD_BIT; SD0CMD_GPIOPU |= SD0CMD_BIT;}
  165. #define SD_CMD_OUT_H() {SD0CMD_GPIOSET = SD0CMD_BIT;}
  166. #define SD_CMD_OUT_L() {SD0CMD_GPIOCLR = SD0CMD_BIT;}
  167. #define SD_CMD_STA() (SD0CMD_GPIO & SD0CMD_BIT)
  168. #define SD_DAT_DIS_UP() static u32 pu300, pu,dir;\
  169. pu300 = GPIOBPU300;\
  170. pu = SD0DAT_GPIOPU;\
  171. dir = SD0DAT_GPIODIR;\
  172. SD0DAT_GPIODIR |= BIT(3);\
  173. SD0DAT_GPIOPU300 &= ~BIT(3);\
  174. SD0DAT_GPIOPU &= ~BIT(3);
  175. #define SD_DAT_RES_UP() SD0DAT_GPIOPU300 = pu300;\
  176. SD0DAT_GPIOPU = pu;\
  177. SD0DAT_GPIODIR = dir;
  178. #else
  179. #define SD_MUX_IO_INIT()
  180. #define SD_IO_INIT()
  181. #define SD_CLK_DIR_IN()
  182. #define SD_CLK_IN_DIS_PU10K()
  183. #define SD_CLK_DIR_OUT()
  184. #define SD_MUX_DETECT_INIT()
  185. #define SD_MUX_IS_ONLINE() 0
  186. #define SD_MUX_IS_BUSY() 0
  187. #define SD_MUX_CMD_IS_BUSY() 0
  188. #define SD_CMD_MUX_PU300R()
  189. #define SD_CMD_MUX_PU10K()
  190. #define SD_CMD_MUX_IS_ONLINE() 0
  191. #define SD_CLK_OUT_H()
  192. #define SD_CLK_OUT_L()
  193. #define SD_CLK_STA() 0
  194. #define SD_DAT_DIR_OUT()
  195. #define SD_DAT_DIR_IN()
  196. #define SD_DAT_OUT_H()
  197. #define SD_DAT_OUT_L()
  198. #define SD_DAT_STA() 0
  199. #define SD_CMD_DIR_OUT()
  200. #define SD_CMD_DIR_IN()
  201. #define SD_CMD_OUT_H()
  202. #define SD_CMD_OUT_L()
  203. #define SD_CMD_STA() 0
  204. #define SD_DAT_DIS_UP()
  205. #define SD_DAT_RES_UP()
  206. #define SDCLK_IO IO_NONE
  207. #define SDCMD_IO IO_NONE
  208. #define SDDAT_IO IO_NONE
  209. #endif
  210. #endif //__IO_DEF_H