udma.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. //*****************************************************************************
  2. //
  3. // udma.h - Prototypes and macros for the uDMA controller.
  4. //
  5. // Copyright (c) 2007-2010 Texas Instruments Incorporated. All rights reserved.
  6. // Software License Agreement
  7. //
  8. // Texas Instruments (TI) is supplying this software for use solely and
  9. // exclusively on TI's microcontroller products. The software is owned by
  10. // TI and/or its suppliers, and is protected under applicable copyright
  11. // laws. You may not combine this software with "viral" open-source
  12. // software in order to form a larger program.
  13. //
  14. // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
  15. // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
  16. // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  17. // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
  18. // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
  19. // DAMAGES, FOR ANY REASON WHATSOEVER.
  20. //
  21. // This is part of revision 6459 of the Stellaris Peripheral Driver Library.
  22. //
  23. //*****************************************************************************
  24. #ifndef __UDMA_H__
  25. #define __UDMA_H__
  26. //*****************************************************************************
  27. //
  28. // If building with a C++ compiler, make all of the definitions in this header
  29. // have a C binding.
  30. //
  31. //*****************************************************************************
  32. #ifdef __cplusplus
  33. extern "C"
  34. {
  35. #endif
  36. //*****************************************************************************
  37. //
  38. // A structure that defines an entry in the channel control table. These
  39. // fields are used by the uDMA controller and normally it is not necessary for
  40. // software to directly read or write fields in the table.
  41. //
  42. //*****************************************************************************
  43. typedef struct
  44. {
  45. //
  46. // The ending source address of the data transfer.
  47. //
  48. volatile void *pvSrcEndAddr;
  49. //
  50. // The ending destination address of the data transfer.
  51. //
  52. volatile void *pvDstEndAddr;
  53. //
  54. // The channel control mode.
  55. //
  56. volatile unsigned long ulControl;
  57. //
  58. // An unused location.
  59. //
  60. volatile unsigned long ulSpare;
  61. }
  62. tDMAControlTable;
  63. //*****************************************************************************
  64. //
  65. // Flags that can be passed to uDMAChannelAttributeEnable(),
  66. // uDMAChannelAttributeDisable(), and returned from uDMAChannelAttributeGet().
  67. //
  68. //*****************************************************************************
  69. #define UDMA_ATTR_USEBURST 0x00000001
  70. #define UDMA_ATTR_ALTSELECT 0x00000002
  71. #define UDMA_ATTR_HIGH_PRIORITY 0x00000004
  72. #define UDMA_ATTR_REQMASK 0x00000008
  73. #define UDMA_ATTR_ALL 0x0000000F
  74. //*****************************************************************************
  75. //
  76. // DMA control modes that can be passed to uDMAModeSet() and returned
  77. // uDMAModeGet().
  78. //
  79. //*****************************************************************************
  80. #define UDMA_MODE_STOP 0x00000000
  81. #define UDMA_MODE_BASIC 0x00000001
  82. #define UDMA_MODE_AUTO 0x00000002
  83. #define UDMA_MODE_PINGPONG 0x00000003
  84. #define UDMA_MODE_MEM_SCATTER_GATHER \
  85. 0x00000004
  86. #define UDMA_MODE_PER_SCATTER_GATHER \
  87. 0x00000006
  88. #define UDMA_MODE_ALT_SELECT 0x00000001
  89. //*****************************************************************************
  90. //
  91. // Channel configuration values that can be passed to uDMAControlSet().
  92. //
  93. //*****************************************************************************
  94. #define UDMA_DST_INC_8 0x00000000
  95. #define UDMA_DST_INC_16 0x40000000
  96. #define UDMA_DST_INC_32 0x80000000
  97. #define UDMA_DST_INC_NONE 0xc0000000
  98. #define UDMA_SRC_INC_8 0x00000000
  99. #define UDMA_SRC_INC_16 0x04000000
  100. #define UDMA_SRC_INC_32 0x08000000
  101. #define UDMA_SRC_INC_NONE 0x0c000000
  102. #define UDMA_SIZE_8 0x00000000
  103. #define UDMA_SIZE_16 0x11000000
  104. #define UDMA_SIZE_32 0x22000000
  105. #define UDMA_ARB_1 0x00000000
  106. #define UDMA_ARB_2 0x00004000
  107. #define UDMA_ARB_4 0x00008000
  108. #define UDMA_ARB_8 0x0000c000
  109. #define UDMA_ARB_16 0x00010000
  110. #define UDMA_ARB_32 0x00014000
  111. #define UDMA_ARB_64 0x00018000
  112. #define UDMA_ARB_128 0x0001c000
  113. #define UDMA_ARB_256 0x00020000
  114. #define UDMA_ARB_512 0x00024000
  115. #define UDMA_ARB_1024 0x00028000
  116. #define UDMA_NEXT_USEBURST 0x00000008
  117. //*****************************************************************************
  118. //
  119. // Channel numbers to be passed to API functions that require a channel number
  120. // ID.
  121. //
  122. //*****************************************************************************
  123. #define UDMA_CHANNEL_USBEP1RX 0
  124. #define UDMA_CHANNEL_USBEP1TX 1
  125. #define UDMA_CHANNEL_USBEP2RX 2
  126. #define UDMA_CHANNEL_USBEP2TX 3
  127. #define UDMA_CHANNEL_USBEP3RX 4
  128. #define UDMA_CHANNEL_USBEP3TX 5
  129. #define UDMA_CHANNEL_ETH0RX 6
  130. #define UDMA_CHANNEL_ETH0TX 7
  131. #define UDMA_CHANNEL_UART0RX 8
  132. #define UDMA_CHANNEL_UART0TX 9
  133. #define UDMA_CHANNEL_SSI0RX 10
  134. #define UDMA_CHANNEL_SSI0TX 11
  135. #define UDMA_CHANNEL_ADC0 14
  136. #define UDMA_CHANNEL_ADC1 15
  137. #define UDMA_CHANNEL_ADC2 16
  138. #define UDMA_CHANNEL_ADC3 17
  139. #define UDMA_CHANNEL_TMR0A 18
  140. #define UDMA_CHANNEL_TMR0B 19
  141. #define UDMA_CHANNEL_TMR1A 20
  142. #define UDMA_CHANNEL_TMR1B 21
  143. #define UDMA_CHANNEL_UART1RX 22
  144. #define UDMA_CHANNEL_UART1TX 23
  145. #define UDMA_CHANNEL_SSI1RX 24
  146. #define UDMA_CHANNEL_SSI1TX 25
  147. #define UDMA_CHANNEL_I2S0RX 28
  148. #define UDMA_CHANNEL_I2S0TX 29
  149. #define UDMA_CHANNEL_SW 30
  150. //*****************************************************************************
  151. //
  152. // Flags to be OR'd with the channel ID to indicate if the primary or alternate
  153. // control structure should be used.
  154. //
  155. //*****************************************************************************
  156. #define UDMA_PRI_SELECT 0x00000000
  157. #define UDMA_ALT_SELECT 0x00000020
  158. //*****************************************************************************
  159. //
  160. // uDMA interrupt sources, to be passed to uDMAIntRegister() and
  161. // uDMAIntUnregister().
  162. //
  163. //*****************************************************************************
  164. #define UDMA_INT_SW 62
  165. #define UDMA_INT_ERR 63
  166. //*****************************************************************************
  167. //
  168. // Channel numbers to be passed to API functions that require a channel number
  169. // ID. These are for secondary peripheral assignments.
  170. //
  171. //*****************************************************************************
  172. #define UDMA_SEC_CHANNEL_UART2RX_0 \
  173. 0
  174. #define UDMA_SEC_CHANNEL_UART2TX_1 \
  175. 1
  176. #define UDMA_SEC_CHANNEL_TMR3A 2
  177. #define UDMA_SEC_CHANNEL_TMR3B 3
  178. #define UDMA_SEC_CHANNEL_TMR2A_4 \
  179. 4
  180. #define UDMA_SEC_CHANNEL_TMR2B_5 \
  181. 5
  182. #define UDMA_SEC_CHANNEL_TMR2A_6 \
  183. 6
  184. #define UDMA_SEC_CHANNEL_TMR2B_7 \
  185. 7
  186. #define UDMA_SEC_CHANNEL_UART1RX \
  187. 8
  188. #define UDMA_SEC_CHANNEL_UART1TX \
  189. 9
  190. #define UDMA_SEC_CHANNEL_SSI1RX 10
  191. #define UDMA_SEC_CHANNEL_SSI1TX 11
  192. #define UDMA_SEC_CHANNEL_UART2RX_12 \
  193. 12
  194. #define UDMA_SEC_CHANNEL_UART2TX_13 \
  195. 13
  196. #define UDMA_SEC_CHANNEL_TMR2A_14 \
  197. 14
  198. #define UDMA_SEC_CHANNEL_TMR2B_15 \
  199. 15
  200. #define UDMA_SEC_CHANNEL_TMR1A 18
  201. #define UDMA_SEC_CHANNEL_TMR1B 19
  202. #define UDMA_SEC_CHANNEL_EPI0RX 20
  203. #define UDMA_SEC_CHANNEL_EPI0TX 21
  204. #define UDMA_SEC_CHANNEL_ADC10 24
  205. #define UDMA_SEC_CHANNEL_ADC11 25
  206. #define UDMA_SEC_CHANNEL_ADC12 26
  207. #define UDMA_SEC_CHANNEL_ADC13 27
  208. #define UDMA_SEC_CHANNEL_SW 30
  209. //*****************************************************************************
  210. //
  211. // uDMA default/secondary peripheral selections, to be passed to
  212. // uDMAChannelSelectSecondary() and uDMAChannelSelectDefault().
  213. //
  214. //*****************************************************************************
  215. #define UDMA_DEF_USBEP1RX_SEC_UART2RX \
  216. 0x00000001
  217. #define UDMA_DEF_USBEP1TX_SEC_UART2TX \
  218. 0x00000002
  219. #define UDMA_DEF_USBEP2RX_SEC_TMR3A \
  220. 0x00000004
  221. #define UDMA_DEF_USBEP2TX_SEC_TMR3B \
  222. 0x00000008
  223. #define UDMA_DEF_USBEP3RX_SEC_TMR2A \
  224. 0x00000010
  225. #define UDMA_DEF_USBEP3TX_SEC_TMR2B \
  226. 0x00000020
  227. #define UDMA_DEF_ETH0RX_SEC_TMR2A \
  228. 0x00000040
  229. #define UDMA_DEF_ETH0TX_SEC_TMR2B \
  230. 0x00000080
  231. #define UDMA_DEF_UART0RX_SEC_UART1RX \
  232. 0x00000100
  233. #define UDMA_DEF_UART0TX_SEC_UART1TX \
  234. 0x00000200
  235. #define UDMA_DEF_SSI0RX_SEC_SSI1RX \
  236. 0x00000400
  237. #define UDMA_DEF_SSI0TX_SEC_SSI1TX \
  238. 0x00000800
  239. #define UDMA_DEF_RESERVED_SEC_UART2RX \
  240. 0x00001000
  241. #define UDMA_DEF_RESERVED_SEC_UART2TX \
  242. 0x00002000
  243. #define UDMA_DEF_ADC00_SEC_TMR2A \
  244. 0x00004000
  245. #define UDMA_DEF_ADC01_SEC_TMR2B \
  246. 0x00008000
  247. #define UDMA_DEF_ADC02_SEC_RESERVED \
  248. 0x00010000
  249. #define UDMA_DEF_ADC03_SEC_RESERVED \
  250. 0x00020000
  251. #define UDMA_DEF_TMR0A_SEC_TMR1A \
  252. 0x00040000
  253. #define UDMA_DEF_TMR0B_SEC_TMR1B \
  254. 0x00080000
  255. #define UDMA_DEF_TMR1A_SEC_EPI0RX \
  256. 0x00100000
  257. #define UDMA_DEF_TMR1B_SEC_EPI0TX \
  258. 0x00200000
  259. #define UDMA_DEF_UART1RX_SEC_RESERVED \
  260. 0x00400000
  261. #define UDMA_DEF_UART1TX_SEC_RESERVED \
  262. 0x00800000
  263. #define UDMA_DEF_SSI1RX_SEC_ADC10 \
  264. 0x01000000
  265. #define UDMA_DEF_SSI1TX_SEC_ADC11 \
  266. 0x02000000
  267. #define UDMA_DEF_RESERVED_SEC_ADC12 \
  268. 0x04000000
  269. #define UDMA_DEF_RESERVED_SEC_ADC13 \
  270. 0x08000000
  271. #define UDMA_DEF_I2S0RX_SEC_RESERVED \
  272. 0x10000000
  273. #define UDMA_DEF_I2S0TX_SEC_RESERVED \
  274. 0x20000000
  275. //*****************************************************************************
  276. //
  277. // API Function prototypes
  278. //
  279. //*****************************************************************************
  280. extern void uDMAEnable(void);
  281. extern void uDMADisable(void);
  282. extern unsigned long uDMAErrorStatusGet(void);
  283. extern void uDMAErrorStatusClear(void);
  284. extern void uDMAChannelEnable(unsigned long ulChannel);
  285. extern void uDMAChannelDisable(unsigned long ulChannel);
  286. extern tBoolean uDMAChannelIsEnabled(unsigned long ulChannel);
  287. extern void uDMAControlBaseSet(void *pControlTable);
  288. extern void *uDMAControlBaseGet(void);
  289. extern void uDMAChannelRequest(unsigned long ulChannel);
  290. extern void uDMAChannelAttributeEnable(unsigned long ulChannel,
  291. unsigned long ulAttr);
  292. extern void uDMAChannelAttributeDisable(unsigned long ulChannel,
  293. unsigned long ulAttr);
  294. extern unsigned long uDMAChannelAttributeGet(unsigned long ulChannel);
  295. extern void uDMAChannelControlSet(unsigned long ulChannel,
  296. unsigned long ulControl);
  297. extern void uDMAChannelTransferSet(unsigned long ulChannel,
  298. unsigned long ulMode, void *pvSrcAddr,
  299. void *pvDstAddr,
  300. unsigned long ulTransferSize);
  301. extern unsigned long uDMAChannelSizeGet(unsigned long ulChannel);
  302. extern unsigned long uDMAChannelModeGet(unsigned long ulChannel);
  303. extern void uDMAIntRegister(unsigned long ulIntChannel,
  304. void (*pfnHandler)(void));
  305. extern void uDMAIntUnregister(unsigned long ulIntChannel);
  306. extern void uDMAChannelSelectDefault(unsigned long ulDefPeriphs);
  307. extern void uDMAChannelSelectSecondary(unsigned long ulSecPeriphs);
  308. //*****************************************************************************
  309. //
  310. // Mark the end of the C bindings section for C++ compilers.
  311. //
  312. //*****************************************************************************
  313. #ifdef __cplusplus
  314. }
  315. #endif
  316. #endif // __UDMA_H__