udma.h 15 KB

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