AT91SAM7X512.h
上传用户:jnhtjd
上传日期:2022-07-16
资源大小:403k
文件大小:213k
源码类别:

微处理器开发

开发平台:

C/C++

  1. //  ----------------------------------------------------------------------------
  2. //          ATMEL Microcontroller Software Support  -  ROUSSET  -
  3. //  ----------------------------------------------------------------------------
  4. //  Copyright (c) 2006, Atmel Corporation
  5. //
  6. //  All rights reserved.
  7. //
  8. //  Redistribution and use in source and binary forms, with or without
  9. //  modification, are permitted provided that the following conditions are met:
  10. //
  11. //  - Redistributions of source code must retain the above copyright notice,
  12. //  this list of conditions and the disclaimer below.
  13. //
  14. //  Atmel's name may not be used to endorse or promote products derived from
  15. //  this software without specific prior written permission.
  16. //
  17. //  DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
  18. //  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19. //  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  20. //  DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
  21. //  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. //  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  23. //  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  24. //  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  25. //  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  26. //  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. //  ----------------------------------------------------------------------------
  28. // File Name           : AT91SAM7X512.h
  29. // Object              : AT91SAM7X512 definitions
  30. // Generated           : AT91 SW Application Group  07/07/2008 (16:15:41)
  31. //
  32. // CVS Reference       : /AT91SAM7X512.pl/1.7/Wed Aug 30 14:09:17 2006//
  33. // CVS Reference       : /SYS_SAM7X.pl/1.3/Wed Feb  2 15:48:15 2005//
  34. // CVS Reference       : /MC_SAM7SE.pl/1.10/Thu Feb 16 16:35:28 2006//
  35. // CVS Reference       : /PMC_SAM7X.pl/1.4/Tue Feb  8 14:00:19 2005//
  36. // CVS Reference       : /RSTC_SAM7X.pl/1.2/Wed Jul 13 15:25:17 2005//
  37. // CVS Reference       : /UDP_6ept.pl/1.1/Wed Aug 30 10:56:49 2006//
  38. // CVS Reference       : /PWM_SAM7X.pl/1.1/Tue May 10 12:38:54 2005//
  39. // CVS Reference       : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005//
  40. // CVS Reference       : /PIO_6057A.pl/1.2/Thu Feb  3 10:29:42 2005//
  41. // CVS Reference       : /RTTC_6081A.pl/1.2/Thu Nov  4 13:57:22 2004//
  42. // CVS Reference       : /PITC_6079A.pl/1.2/Thu Nov  4 13:56:22 2004//
  43. // CVS Reference       : /WDTC_6080A.pl/1.3/Thu Nov  4 13:58:52 2004//
  44. // CVS Reference       : /VREG_6085B.pl/1.1/Tue Feb  1 16:40:38 2005//
  45. // CVS Reference       : /PDC_6074C.pl/1.2/Thu Feb  3 09:02:11 2005//
  46. // CVS Reference       : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005//
  47. // CVS Reference       : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005//
  48. // CVS Reference       : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005//
  49. // CVS Reference       : /SSC_6078B.pl/1.2/Wed Apr 16 08:28:18 2008//
  50. // CVS Reference       : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006//
  51. // CVS Reference       : /TC_6082A.pl/1.7/Wed Mar  9 16:31:51 2005//
  52. // CVS Reference       : /CAN_6019B.pl/1.1/Mon Jan 31 13:54:30 2005//
  53. // CVS Reference       : /EMACB_6119A.pl/1.6/Wed Jul 13 15:25:00 2005//
  54. // CVS Reference       : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005//
  55. //  ----------------------------------------------------------------------------
  56. #ifndef AT91SAM7X512_H
  57. #define AT91SAM7X512_H
  58. #ifndef __ASSEMBLY__
  59. typedef volatile unsigned int AT91_REG;// Hardware register definition
  60. #define AT91_CAST(a) (a)
  61. #else
  62. #define AT91_CAST(a)
  63. #endif
  64. // *****************************************************************************
  65. //              SOFTWARE API DEFINITION  FOR System Peripherals
  66. // *****************************************************************************
  67. #ifndef __ASSEMBLY__
  68. typedef struct _AT91S_SYS {
  69. AT91_REG  AIC_SMR[32];  // Source Mode Register
  70. AT91_REG  AIC_SVR[32];  // Source Vector Register
  71. AT91_REG  AIC_IVR;  // IRQ Vector Register
  72. AT91_REG  AIC_FVR;  // FIQ Vector Register
  73. AT91_REG  AIC_ISR;  // Interrupt Status Register
  74. AT91_REG  AIC_IPR;  // Interrupt Pending Register
  75. AT91_REG  AIC_IMR;  // Interrupt Mask Register
  76. AT91_REG  AIC_CISR;  // Core Interrupt Status Register
  77. AT91_REG  Reserved0[2];  //
  78. AT91_REG  AIC_IECR;  // Interrupt Enable Command Register
  79. AT91_REG  AIC_IDCR;  // Interrupt Disable Command Register
  80. AT91_REG  AIC_ICCR;  // Interrupt Clear Command Register
  81. AT91_REG  AIC_ISCR;  // Interrupt Set Command Register
  82. AT91_REG  AIC_EOICR;  // End of Interrupt Command Register
  83. AT91_REG  AIC_SPU;  // Spurious Vector Register
  84. AT91_REG  AIC_DCR;  // Debug Control Register (Protect)
  85. AT91_REG  Reserved1[1];  //
  86. AT91_REG  AIC_FFER;  // Fast Forcing Enable Register
  87. AT91_REG  AIC_FFDR;  // Fast Forcing Disable Register
  88. AT91_REG  AIC_FFSR;  // Fast Forcing Status Register
  89. AT91_REG  Reserved2[45];  //
  90. AT91_REG  DBGU_CR;  // Control Register
  91. AT91_REG  DBGU_MR;  // Mode Register
  92. AT91_REG  DBGU_IER;  // Interrupt Enable Register
  93. AT91_REG  DBGU_IDR;  // Interrupt Disable Register
  94. AT91_REG  DBGU_IMR;  // Interrupt Mask Register
  95. AT91_REG  DBGU_CSR;  // Channel Status Register
  96. AT91_REG  DBGU_RHR;  // Receiver Holding Register
  97. AT91_REG  DBGU_THR;  // Transmitter Holding Register
  98. AT91_REG  DBGU_BRGR;  // Baud Rate Generator Register
  99. AT91_REG  Reserved3[7];  //
  100. AT91_REG  DBGU_CIDR;  // Chip ID Register
  101. AT91_REG  DBGU_EXID;  // Chip ID Extension Register
  102. AT91_REG  DBGU_FNTR;  // Force NTRST Register
  103. AT91_REG  Reserved4[45];  //
  104. AT91_REG  DBGU_RPR;  // Receive Pointer Register
  105. AT91_REG  DBGU_RCR;  // Receive Counter Register
  106. AT91_REG  DBGU_TPR;  // Transmit Pointer Register
  107. AT91_REG  DBGU_TCR;  // Transmit Counter Register
  108. AT91_REG  DBGU_RNPR;  // Receive Next Pointer Register
  109. AT91_REG  DBGU_RNCR;  // Receive Next Counter Register
  110. AT91_REG  DBGU_TNPR;  // Transmit Next Pointer Register
  111. AT91_REG  DBGU_TNCR;  // Transmit Next Counter Register
  112. AT91_REG  DBGU_PTCR;  // PDC Transfer Control Register
  113. AT91_REG  DBGU_PTSR;  // PDC Transfer Status Register
  114. AT91_REG  Reserved5[54];  //
  115. AT91_REG  PIOA_PER;  // PIO Enable Register
  116. AT91_REG  PIOA_PDR;  // PIO Disable Register
  117. AT91_REG  PIOA_PSR;  // PIO Status Register
  118. AT91_REG  Reserved6[1];  //
  119. AT91_REG  PIOA_OER;  // Output Enable Register
  120. AT91_REG  PIOA_ODR;  // Output Disable Registerr
  121. AT91_REG  PIOA_OSR;  // Output Status Register
  122. AT91_REG  Reserved7[1];  //
  123. AT91_REG  PIOA_IFER;  // Input Filter Enable Register
  124. AT91_REG  PIOA_IFDR;  // Input Filter Disable Register
  125. AT91_REG  PIOA_IFSR;  // Input Filter Status Register
  126. AT91_REG  Reserved8[1];  //
  127. AT91_REG  PIOA_SODR;  // Set Output Data Register
  128. AT91_REG  PIOA_CODR;  // Clear Output Data Register
  129. AT91_REG  PIOA_ODSR;  // Output Data Status Register
  130. AT91_REG  PIOA_PDSR;  // Pin Data Status Register
  131. AT91_REG  PIOA_IER;  // Interrupt Enable Register
  132. AT91_REG  PIOA_IDR;  // Interrupt Disable Register
  133. AT91_REG  PIOA_IMR;  // Interrupt Mask Register
  134. AT91_REG  PIOA_ISR;  // Interrupt Status Register
  135. AT91_REG  PIOA_MDER;  // Multi-driver Enable Register
  136. AT91_REG  PIOA_MDDR;  // Multi-driver Disable Register
  137. AT91_REG  PIOA_MDSR;  // Multi-driver Status Register
  138. AT91_REG  Reserved9[1];  //
  139. AT91_REG  PIOA_PPUDR;  // Pull-up Disable Register
  140. AT91_REG  PIOA_PPUER;  // Pull-up Enable Register
  141. AT91_REG  PIOA_PPUSR;  // Pull-up Status Register
  142. AT91_REG  Reserved10[1];  //
  143. AT91_REG  PIOA_ASR;  // Select A Register
  144. AT91_REG  PIOA_BSR;  // Select B Register
  145. AT91_REG  PIOA_ABSR;  // AB Select Status Register
  146. AT91_REG  Reserved11[9];  //
  147. AT91_REG  PIOA_OWER;  // Output Write Enable Register
  148. AT91_REG  PIOA_OWDR;  // Output Write Disable Register
  149. AT91_REG  PIOA_OWSR;  // Output Write Status Register
  150. AT91_REG  Reserved12[85];  //
  151. AT91_REG  PIOB_PER;  // PIO Enable Register
  152. AT91_REG  PIOB_PDR;  // PIO Disable Register
  153. AT91_REG  PIOB_PSR;  // PIO Status Register
  154. AT91_REG  Reserved13[1];  //
  155. AT91_REG  PIOB_OER;  // Output Enable Register
  156. AT91_REG  PIOB_ODR;  // Output Disable Registerr
  157. AT91_REG  PIOB_OSR;  // Output Status Register
  158. AT91_REG  Reserved14[1];  //
  159. AT91_REG  PIOB_IFER;  // Input Filter Enable Register
  160. AT91_REG  PIOB_IFDR;  // Input Filter Disable Register
  161. AT91_REG  PIOB_IFSR;  // Input Filter Status Register
  162. AT91_REG  Reserved15[1];  //
  163. AT91_REG  PIOB_SODR;  // Set Output Data Register
  164. AT91_REG  PIOB_CODR;  // Clear Output Data Register
  165. AT91_REG  PIOB_ODSR;  // Output Data Status Register
  166. AT91_REG  PIOB_PDSR;  // Pin Data Status Register
  167. AT91_REG  PIOB_IER;  // Interrupt Enable Register
  168. AT91_REG  PIOB_IDR;  // Interrupt Disable Register
  169. AT91_REG  PIOB_IMR;  // Interrupt Mask Register
  170. AT91_REG  PIOB_ISR;  // Interrupt Status Register
  171. AT91_REG  PIOB_MDER;  // Multi-driver Enable Register
  172. AT91_REG  PIOB_MDDR;  // Multi-driver Disable Register
  173. AT91_REG  PIOB_MDSR;  // Multi-driver Status Register
  174. AT91_REG  Reserved16[1];  //
  175. AT91_REG  PIOB_PPUDR;  // Pull-up Disable Register
  176. AT91_REG  PIOB_PPUER;  // Pull-up Enable Register
  177. AT91_REG  PIOB_PPUSR;  // Pull-up Status Register
  178. AT91_REG  Reserved17[1];  //
  179. AT91_REG  PIOB_ASR;  // Select A Register
  180. AT91_REG  PIOB_BSR;  // Select B Register
  181. AT91_REG  PIOB_ABSR;  // AB Select Status Register
  182. AT91_REG  Reserved18[9];  //
  183. AT91_REG  PIOB_OWER;  // Output Write Enable Register
  184. AT91_REG  PIOB_OWDR;  // Output Write Disable Register
  185. AT91_REG  PIOB_OWSR;  // Output Write Status Register
  186. AT91_REG  Reserved19[341];  //
  187. AT91_REG  PMC_SCER;  // System Clock Enable Register
  188. AT91_REG  PMC_SCDR;  // System Clock Disable Register
  189. AT91_REG  PMC_SCSR;  // System Clock Status Register
  190. AT91_REG  Reserved20[1];  //
  191. AT91_REG  PMC_PCER;  // Peripheral Clock Enable Register
  192. AT91_REG  PMC_PCDR;  // Peripheral Clock Disable Register
  193. AT91_REG  PMC_PCSR;  // Peripheral Clock Status Register
  194. AT91_REG  Reserved21[1];  //
  195. AT91_REG  PMC_MOR;  // Main Oscillator Register
  196. AT91_REG  PMC_MCFR;  // Main Clock  Frequency Register
  197. AT91_REG  Reserved22[1];  //
  198. AT91_REG  PMC_PLLR;  // PLL Register
  199. AT91_REG  PMC_MCKR;  // Master Clock Register
  200. AT91_REG  Reserved23[3];  //
  201. AT91_REG  PMC_PCKR[4];  // Programmable Clock Register
  202. AT91_REG  Reserved24[4];  //
  203. AT91_REG  PMC_IER;  // Interrupt Enable Register
  204. AT91_REG  PMC_IDR;  // Interrupt Disable Register
  205. AT91_REG  PMC_SR;  // Status Register
  206. AT91_REG  PMC_IMR;  // Interrupt Mask Register
  207. AT91_REG  Reserved25[36];  //
  208. AT91_REG  RSTC_RCR;  // Reset Control Register
  209. AT91_REG  RSTC_RSR;  // Reset Status Register
  210. AT91_REG  RSTC_RMR;  // Reset Mode Register
  211. AT91_REG  Reserved26[5];  //
  212. AT91_REG  RTTC_RTMR;  // Real-time Mode Register
  213. AT91_REG  RTTC_RTAR;  // Real-time Alarm Register
  214. AT91_REG  RTTC_RTVR;  // Real-time Value Register
  215. AT91_REG  RTTC_RTSR;  // Real-time Status Register
  216. AT91_REG  PITC_PIMR;  // Period Interval Mode Register
  217. AT91_REG  PITC_PISR;  // Period Interval Status Register
  218. AT91_REG  PITC_PIVR;  // Period Interval Value Register
  219. AT91_REG  PITC_PIIR;  // Period Interval Image Register
  220. AT91_REG  WDTC_WDCR;  // Watchdog Control Register
  221. AT91_REG  WDTC_WDMR;  // Watchdog Mode Register
  222. AT91_REG  WDTC_WDSR;  // Watchdog Status Register
  223. AT91_REG  Reserved27[5];  //
  224. AT91_REG  VREG_MR;  // Voltage Regulator Mode Register
  225. } AT91S_SYS, *AT91PS_SYS;
  226. #else
  227. #endif
  228. // *****************************************************************************
  229. //              SOFTWARE API DEFINITION  FOR Advanced Interrupt Controller
  230. // *****************************************************************************
  231. #ifndef __ASSEMBLY__
  232. typedef struct _AT91S_AIC {
  233. AT91_REG  AIC_SMR[32];  // Source Mode Register
  234. AT91_REG  AIC_SVR[32];  // Source Vector Register
  235. AT91_REG  AIC_IVR;  // IRQ Vector Register
  236. AT91_REG  AIC_FVR;  // FIQ Vector Register
  237. AT91_REG  AIC_ISR;  // Interrupt Status Register
  238. AT91_REG  AIC_IPR;  // Interrupt Pending Register
  239. AT91_REG  AIC_IMR;  // Interrupt Mask Register
  240. AT91_REG  AIC_CISR;  // Core Interrupt Status Register
  241. AT91_REG  Reserved0[2];  //
  242. AT91_REG  AIC_IECR;  // Interrupt Enable Command Register
  243. AT91_REG  AIC_IDCR;  // Interrupt Disable Command Register
  244. AT91_REG  AIC_ICCR;  // Interrupt Clear Command Register
  245. AT91_REG  AIC_ISCR;  // Interrupt Set Command Register
  246. AT91_REG  AIC_EOICR;  // End of Interrupt Command Register
  247. AT91_REG  AIC_SPU;  // Spurious Vector Register
  248. AT91_REG  AIC_DCR;  // Debug Control Register (Protect)
  249. AT91_REG  Reserved1[1];  //
  250. AT91_REG  AIC_FFER;  // Fast Forcing Enable Register
  251. AT91_REG  AIC_FFDR;  // Fast Forcing Disable Register
  252. AT91_REG  AIC_FFSR;  // Fast Forcing Status Register
  253. } AT91S_AIC, *AT91PS_AIC;
  254. #else
  255. #define AIC_SMR         (AT91_CAST(AT91_REG *)  0x00000000) // (AIC_SMR) Source Mode Register
  256. #define AIC_SVR         (AT91_CAST(AT91_REG *)  0x00000080) // (AIC_SVR) Source Vector Register
  257. #define AIC_IVR         (AT91_CAST(AT91_REG *)  0x00000100) // (AIC_IVR) IRQ Vector Register
  258. #define AIC_FVR         (AT91_CAST(AT91_REG *)  0x00000104) // (AIC_FVR) FIQ Vector Register
  259. #define AIC_ISR         (AT91_CAST(AT91_REG *)  0x00000108) // (AIC_ISR) Interrupt Status Register
  260. #define AIC_IPR         (AT91_CAST(AT91_REG *)  0x0000010C) // (AIC_IPR) Interrupt Pending Register
  261. #define AIC_IMR         (AT91_CAST(AT91_REG *)  0x00000110) // (AIC_IMR) Interrupt Mask Register
  262. #define AIC_CISR        (AT91_CAST(AT91_REG *)  0x00000114) // (AIC_CISR) Core Interrupt Status Register
  263. #define AIC_IECR        (AT91_CAST(AT91_REG *)  0x00000120) // (AIC_IECR) Interrupt Enable Command Register
  264. #define AIC_IDCR        (AT91_CAST(AT91_REG *)  0x00000124) // (AIC_IDCR) Interrupt Disable Command Register
  265. #define AIC_ICCR        (AT91_CAST(AT91_REG *)  0x00000128) // (AIC_ICCR) Interrupt Clear Command Register
  266. #define AIC_ISCR        (AT91_CAST(AT91_REG *)  0x0000012C) // (AIC_ISCR) Interrupt Set Command Register
  267. #define AIC_EOICR       (AT91_CAST(AT91_REG *)  0x00000130) // (AIC_EOICR) End of Interrupt Command Register
  268. #define AIC_SPU         (AT91_CAST(AT91_REG *)  0x00000134) // (AIC_SPU) Spurious Vector Register
  269. #define AIC_DCR         (AT91_CAST(AT91_REG *)  0x00000138) // (AIC_DCR) Debug Control Register (Protect)
  270. #define AIC_FFER        (AT91_CAST(AT91_REG *)  0x00000140) // (AIC_FFER) Fast Forcing Enable Register
  271. #define AIC_FFDR        (AT91_CAST(AT91_REG *)  0x00000144) // (AIC_FFDR) Fast Forcing Disable Register
  272. #define AIC_FFSR        (AT91_CAST(AT91_REG *)  0x00000148) // (AIC_FFSR) Fast Forcing Status Register
  273. #endif
  274. // -------- AIC_SMR : (AIC Offset: 0x0) Control Register --------
  275. #define AT91C_AIC_PRIOR       (0x7 <<  0) // (AIC) Priority Level
  276. #define  AT91C_AIC_PRIOR_LOWEST               (0x0) // (AIC) Lowest priority level
  277. #define  AT91C_AIC_PRIOR_HIGHEST              (0x7) // (AIC) Highest priority level
  278. #define AT91C_AIC_SRCTYPE     (0x3 <<  5) // (AIC) Interrupt Source Type
  279. #define  AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL       (0x0 <<  5) // (AIC) Internal Sources Code Label High-level Sensitive
  280. #define  AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL        (0x0 <<  5) // (AIC) External Sources Code Label Low-level Sensitive
  281. #define  AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE    (0x1 <<  5) // (AIC) Internal Sources Code Label Positive Edge triggered
  282. #define  AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE    (0x1 <<  5) // (AIC) External Sources Code Label Negative Edge triggered
  283. #define  AT91C_AIC_SRCTYPE_HIGH_LEVEL           (0x2 <<  5) // (AIC) Internal Or External Sources Code Label High-level Sensitive
  284. #define  AT91C_AIC_SRCTYPE_POSITIVE_EDGE        (0x3 <<  5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered
  285. // -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register --------
  286. #define AT91C_AIC_NFIQ        (0x1 <<  0) // (AIC) NFIQ Status
  287. #define AT91C_AIC_NIRQ        (0x1 <<  1) // (AIC) NIRQ Status
  288. // -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) --------
  289. #define AT91C_AIC_DCR_PROT    (0x1 <<  0) // (AIC) Protection Mode
  290. #define AT91C_AIC_DCR_GMSK    (0x1 <<  1) // (AIC) General Mask
  291. // *****************************************************************************
  292. //              SOFTWARE API DEFINITION  FOR Peripheral DMA Controller
  293. // *****************************************************************************
  294. #ifndef __ASSEMBLY__
  295. typedef struct _AT91S_PDC {
  296. AT91_REG  PDC_RPR;  // Receive Pointer Register
  297. AT91_REG  PDC_RCR;  // Receive Counter Register
  298. AT91_REG  PDC_TPR;  // Transmit Pointer Register
  299. AT91_REG  PDC_TCR;  // Transmit Counter Register
  300. AT91_REG  PDC_RNPR;  // Receive Next Pointer Register
  301. AT91_REG  PDC_RNCR;  // Receive Next Counter Register
  302. AT91_REG  PDC_TNPR;  // Transmit Next Pointer Register
  303. AT91_REG  PDC_TNCR;  // Transmit Next Counter Register
  304. AT91_REG  PDC_PTCR;  // PDC Transfer Control Register
  305. AT91_REG  PDC_PTSR;  // PDC Transfer Status Register
  306. } AT91S_PDC, *AT91PS_PDC;
  307. #else
  308. #define PDC_RPR         (AT91_CAST(AT91_REG *)  0x00000000) // (PDC_RPR) Receive Pointer Register
  309. #define PDC_RCR         (AT91_CAST(AT91_REG *)  0x00000004) // (PDC_RCR) Receive Counter Register
  310. #define PDC_TPR         (AT91_CAST(AT91_REG *)  0x00000008) // (PDC_TPR) Transmit Pointer Register
  311. #define PDC_TCR         (AT91_CAST(AT91_REG *)  0x0000000C) // (PDC_TCR) Transmit Counter Register
  312. #define PDC_RNPR        (AT91_CAST(AT91_REG *)  0x00000010) // (PDC_RNPR) Receive Next Pointer Register
  313. #define PDC_RNCR        (AT91_CAST(AT91_REG *)  0x00000014) // (PDC_RNCR) Receive Next Counter Register
  314. #define PDC_TNPR        (AT91_CAST(AT91_REG *)  0x00000018) // (PDC_TNPR) Transmit Next Pointer Register
  315. #define PDC_TNCR        (AT91_CAST(AT91_REG *)  0x0000001C) // (PDC_TNCR) Transmit Next Counter Register
  316. #define PDC_PTCR        (AT91_CAST(AT91_REG *)  0x00000020) // (PDC_PTCR) PDC Transfer Control Register
  317. #define PDC_PTSR        (AT91_CAST(AT91_REG *)  0x00000024) // (PDC_PTSR) PDC Transfer Status Register
  318. #endif
  319. // -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register --------
  320. #define AT91C_PDC_RXTEN       (0x1 <<  0) // (PDC) Receiver Transfer Enable
  321. #define AT91C_PDC_RXTDIS      (0x1 <<  1) // (PDC) Receiver Transfer Disable
  322. #define AT91C_PDC_TXTEN       (0x1 <<  8) // (PDC) Transmitter Transfer Enable
  323. #define AT91C_PDC_TXTDIS      (0x1 <<  9) // (PDC) Transmitter Transfer Disable
  324. // -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register --------
  325. // *****************************************************************************
  326. //              SOFTWARE API DEFINITION  FOR Debug Unit
  327. // *****************************************************************************
  328. #ifndef __ASSEMBLY__
  329. typedef struct _AT91S_DBGU {
  330. AT91_REG  DBGU_CR;  // Control Register
  331. AT91_REG  DBGU_MR;  // Mode Register
  332. AT91_REG  DBGU_IER;  // Interrupt Enable Register
  333. AT91_REG  DBGU_IDR;  // Interrupt Disable Register
  334. AT91_REG  DBGU_IMR;  // Interrupt Mask Register
  335. AT91_REG  DBGU_CSR;  // Channel Status Register
  336. AT91_REG  DBGU_RHR;  // Receiver Holding Register
  337. AT91_REG  DBGU_THR;  // Transmitter Holding Register
  338. AT91_REG  DBGU_BRGR;  // Baud Rate Generator Register
  339. AT91_REG  Reserved0[7];  //
  340. AT91_REG  DBGU_CIDR;  // Chip ID Register
  341. AT91_REG  DBGU_EXID;  // Chip ID Extension Register
  342. AT91_REG  DBGU_FNTR;  // Force NTRST Register
  343. AT91_REG  Reserved1[45];  //
  344. AT91_REG  DBGU_RPR;  // Receive Pointer Register
  345. AT91_REG  DBGU_RCR;  // Receive Counter Register
  346. AT91_REG  DBGU_TPR;  // Transmit Pointer Register
  347. AT91_REG  DBGU_TCR;  // Transmit Counter Register
  348. AT91_REG  DBGU_RNPR;  // Receive Next Pointer Register
  349. AT91_REG  DBGU_RNCR;  // Receive Next Counter Register
  350. AT91_REG  DBGU_TNPR;  // Transmit Next Pointer Register
  351. AT91_REG  DBGU_TNCR;  // Transmit Next Counter Register
  352. AT91_REG  DBGU_PTCR;  // PDC Transfer Control Register
  353. AT91_REG  DBGU_PTSR;  // PDC Transfer Status Register
  354. } AT91S_DBGU, *AT91PS_DBGU;
  355. #else
  356. #define DBGU_CR         (AT91_CAST(AT91_REG *)  0x00000000) // (DBGU_CR) Control Register
  357. #define DBGU_MR         (AT91_CAST(AT91_REG *)  0x00000004) // (DBGU_MR) Mode Register
  358. #define DBGU_IER        (AT91_CAST(AT91_REG *)  0x00000008) // (DBGU_IER) Interrupt Enable Register
  359. #define DBGU_IDR        (AT91_CAST(AT91_REG *)  0x0000000C) // (DBGU_IDR) Interrupt Disable Register
  360. #define DBGU_IMR        (AT91_CAST(AT91_REG *)  0x00000010) // (DBGU_IMR) Interrupt Mask Register
  361. #define DBGU_CSR        (AT91_CAST(AT91_REG *)  0x00000014) // (DBGU_CSR) Channel Status Register
  362. #define DBGU_RHR        (AT91_CAST(AT91_REG *)  0x00000018) // (DBGU_RHR) Receiver Holding Register
  363. #define DBGU_THR        (AT91_CAST(AT91_REG *)  0x0000001C) // (DBGU_THR) Transmitter Holding Register
  364. #define DBGU_BRGR       (AT91_CAST(AT91_REG *)  0x00000020) // (DBGU_BRGR) Baud Rate Generator Register
  365. #define DBGU_CIDR       (AT91_CAST(AT91_REG *)  0x00000040) // (DBGU_CIDR) Chip ID Register
  366. #define DBGU_EXID       (AT91_CAST(AT91_REG *)  0x00000044) // (DBGU_EXID) Chip ID Extension Register
  367. #define DBGU_FNTR       (AT91_CAST(AT91_REG *)  0x00000048) // (DBGU_FNTR) Force NTRST Register
  368. #endif
  369. // -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register --------
  370. #define AT91C_US_RSTRX        (0x1 <<  2) // (DBGU) Reset Receiver
  371. #define AT91C_US_RSTTX        (0x1 <<  3) // (DBGU) Reset Transmitter
  372. #define AT91C_US_RXEN         (0x1 <<  4) // (DBGU) Receiver Enable
  373. #define AT91C_US_RXDIS        (0x1 <<  5) // (DBGU) Receiver Disable
  374. #define AT91C_US_TXEN         (0x1 <<  6) // (DBGU) Transmitter Enable
  375. #define AT91C_US_TXDIS        (0x1 <<  7) // (DBGU) Transmitter Disable
  376. #define AT91C_US_RSTSTA       (0x1 <<  8) // (DBGU) Reset Status Bits
  377. // -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register --------
  378. #define AT91C_US_PAR          (0x7 <<  9) // (DBGU) Parity type
  379. #define  AT91C_US_PAR_EVEN                 (0x0 <<  9) // (DBGU) Even Parity
  380. #define  AT91C_US_PAR_ODD                  (0x1 <<  9) // (DBGU) Odd Parity
  381. #define  AT91C_US_PAR_SPACE                (0x2 <<  9) // (DBGU) Parity forced to 0 (Space)
  382. #define  AT91C_US_PAR_MARK                 (0x3 <<  9) // (DBGU) Parity forced to 1 (Mark)
  383. #define  AT91C_US_PAR_NONE                 (0x4 <<  9) // (DBGU) No Parity
  384. #define  AT91C_US_PAR_MULTI_DROP           (0x6 <<  9) // (DBGU) Multi-drop mode
  385. #define AT91C_US_CHMODE       (0x3 << 14) // (DBGU) Channel Mode
  386. #define  AT91C_US_CHMODE_NORMAL               (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART.
  387. #define  AT91C_US_CHMODE_AUTO                 (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin.
  388. #define  AT91C_US_CHMODE_LOCAL                (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal.
  389. #define  AT91C_US_CHMODE_REMOTE               (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin.
  390. // -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register --------
  391. #define AT91C_US_RXRDY        (0x1 <<  0) // (DBGU) RXRDY Interrupt
  392. #define AT91C_US_TXRDY        (0x1 <<  1) // (DBGU) TXRDY Interrupt
  393. #define AT91C_US_ENDRX        (0x1 <<  3) // (DBGU) End of Receive Transfer Interrupt
  394. #define AT91C_US_ENDTX        (0x1 <<  4) // (DBGU) End of Transmit Interrupt
  395. #define AT91C_US_OVRE         (0x1 <<  5) // (DBGU) Overrun Interrupt
  396. #define AT91C_US_FRAME        (0x1 <<  6) // (DBGU) Framing Error Interrupt
  397. #define AT91C_US_PARE         (0x1 <<  7) // (DBGU) Parity Error Interrupt
  398. #define AT91C_US_TXEMPTY      (0x1 <<  9) // (DBGU) TXEMPTY Interrupt
  399. #define AT91C_US_TXBUFE       (0x1 << 11) // (DBGU) TXBUFE Interrupt
  400. #define AT91C_US_RXBUFF       (0x1 << 12) // (DBGU) RXBUFF Interrupt
  401. #define AT91C_US_COMM_TX      (0x1 << 30) // (DBGU) COMM_TX Interrupt
  402. #define AT91C_US_COMM_RX      (0x1 << 31) // (DBGU) COMM_RX Interrupt
  403. // -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register --------
  404. // -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register --------
  405. // -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register --------
  406. // -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register --------
  407. #define AT91C_US_FORCE_NTRST  (0x1 <<  0) // (DBGU) Force NTRST in JTAG
  408. // *****************************************************************************
  409. //              SOFTWARE API DEFINITION  FOR Parallel Input Output Controler
  410. // *****************************************************************************
  411. #ifndef __ASSEMBLY__
  412. typedef struct _AT91S_PIO {
  413. AT91_REG  PIO_PER;  // PIO Enable Register
  414. AT91_REG  PIO_PDR;  // PIO Disable Register
  415. AT91_REG  PIO_PSR;  // PIO Status Register
  416. AT91_REG  Reserved0[1];  //
  417. AT91_REG  PIO_OER;  // Output Enable Register
  418. AT91_REG  PIO_ODR;  // Output Disable Registerr
  419. AT91_REG  PIO_OSR;  // Output Status Register
  420. AT91_REG  Reserved1[1];  //
  421. AT91_REG  PIO_IFER;  // Input Filter Enable Register
  422. AT91_REG  PIO_IFDR;  // Input Filter Disable Register
  423. AT91_REG  PIO_IFSR;  // Input Filter Status Register
  424. AT91_REG  Reserved2[1];  //
  425. AT91_REG  PIO_SODR;  // Set Output Data Register
  426. AT91_REG  PIO_CODR;  // Clear Output Data Register
  427. AT91_REG  PIO_ODSR;  // Output Data Status Register
  428. AT91_REG  PIO_PDSR;  // Pin Data Status Register
  429. AT91_REG  PIO_IER;  // Interrupt Enable Register
  430. AT91_REG  PIO_IDR;  // Interrupt Disable Register
  431. AT91_REG  PIO_IMR;  // Interrupt Mask Register
  432. AT91_REG  PIO_ISR;  // Interrupt Status Register
  433. AT91_REG  PIO_MDER;  // Multi-driver Enable Register
  434. AT91_REG  PIO_MDDR;  // Multi-driver Disable Register
  435. AT91_REG  PIO_MDSR;  // Multi-driver Status Register
  436. AT91_REG  Reserved3[1];  //
  437. AT91_REG  PIO_PPUDR;  // Pull-up Disable Register
  438. AT91_REG  PIO_PPUER;  // Pull-up Enable Register
  439. AT91_REG  PIO_PPUSR;  // Pull-up Status Register
  440. AT91_REG  Reserved4[1];  //
  441. AT91_REG  PIO_ASR;  // Select A Register
  442. AT91_REG  PIO_BSR;  // Select B Register
  443. AT91_REG  PIO_ABSR;  // AB Select Status Register
  444. AT91_REG  Reserved5[9];  //
  445. AT91_REG  PIO_OWER;  // Output Write Enable Register
  446. AT91_REG  PIO_OWDR;  // Output Write Disable Register
  447. AT91_REG  PIO_OWSR;  // Output Write Status Register
  448. } AT91S_PIO, *AT91PS_PIO;
  449. #else
  450. #define PIO_PER         (AT91_CAST(AT91_REG *)  0x00000000) // (PIO_PER) PIO Enable Register
  451. #define PIO_PDR         (AT91_CAST(AT91_REG *)  0x00000004) // (PIO_PDR) PIO Disable Register
  452. #define PIO_PSR         (AT91_CAST(AT91_REG *)  0x00000008) // (PIO_PSR) PIO Status Register
  453. #define PIO_OER         (AT91_CAST(AT91_REG *)  0x00000010) // (PIO_OER) Output Enable Register
  454. #define PIO_ODR         (AT91_CAST(AT91_REG *)  0x00000014) // (PIO_ODR) Output Disable Registerr
  455. #define PIO_OSR         (AT91_CAST(AT91_REG *)  0x00000018) // (PIO_OSR) Output Status Register
  456. #define PIO_IFER        (AT91_CAST(AT91_REG *)  0x00000020) // (PIO_IFER) Input Filter Enable Register
  457. #define PIO_IFDR        (AT91_CAST(AT91_REG *)  0x00000024) // (PIO_IFDR) Input Filter Disable Register
  458. #define PIO_IFSR        (AT91_CAST(AT91_REG *)  0x00000028) // (PIO_IFSR) Input Filter Status Register
  459. #define PIO_SODR        (AT91_CAST(AT91_REG *)  0x00000030) // (PIO_SODR) Set Output Data Register
  460. #define PIO_CODR        (AT91_CAST(AT91_REG *)  0x00000034) // (PIO_CODR) Clear Output Data Register
  461. #define PIO_ODSR        (AT91_CAST(AT91_REG *)  0x00000038) // (PIO_ODSR) Output Data Status Register
  462. #define PIO_PDSR        (AT91_CAST(AT91_REG *)  0x0000003C) // (PIO_PDSR) Pin Data Status Register
  463. #define PIO_IER         (AT91_CAST(AT91_REG *)  0x00000040) // (PIO_IER) Interrupt Enable Register
  464. #define PIO_IDR         (AT91_CAST(AT91_REG *)  0x00000044) // (PIO_IDR) Interrupt Disable Register
  465. #define PIO_IMR         (AT91_CAST(AT91_REG *)  0x00000048) // (PIO_IMR) Interrupt Mask Register
  466. #define PIO_ISR         (AT91_CAST(AT91_REG *)  0x0000004C) // (PIO_ISR) Interrupt Status Register
  467. #define PIO_MDER        (AT91_CAST(AT91_REG *)  0x00000050) // (PIO_MDER) Multi-driver Enable Register
  468. #define PIO_MDDR        (AT91_CAST(AT91_REG *)  0x00000054) // (PIO_MDDR) Multi-driver Disable Register
  469. #define PIO_MDSR        (AT91_CAST(AT91_REG *)  0x00000058) // (PIO_MDSR) Multi-driver Status Register
  470. #define PIO_PPUDR       (AT91_CAST(AT91_REG *)  0x00000060) // (PIO_PPUDR) Pull-up Disable Register
  471. #define PIO_PPUER       (AT91_CAST(AT91_REG *)  0x00000064) // (PIO_PPUER) Pull-up Enable Register
  472. #define PIO_PPUSR       (AT91_CAST(AT91_REG *)  0x00000068) // (PIO_PPUSR) Pull-up Status Register
  473. #define PIO_ASR         (AT91_CAST(AT91_REG *)  0x00000070) // (PIO_ASR) Select A Register
  474. #define PIO_BSR         (AT91_CAST(AT91_REG *)  0x00000074) // (PIO_BSR) Select B Register
  475. #define PIO_ABSR        (AT91_CAST(AT91_REG *)  0x00000078) // (PIO_ABSR) AB Select Status Register
  476. #define PIO_OWER        (AT91_CAST(AT91_REG *)  0x000000A0) // (PIO_OWER) Output Write Enable Register
  477. #define PIO_OWDR        (AT91_CAST(AT91_REG *)  0x000000A4) // (PIO_OWDR) Output Write Disable Register
  478. #define PIO_OWSR        (AT91_CAST(AT91_REG *)  0x000000A8) // (PIO_OWSR) Output Write Status Register
  479. #endif
  480. // *****************************************************************************
  481. //              SOFTWARE API DEFINITION  FOR Clock Generator Controler
  482. // *****************************************************************************
  483. #ifndef __ASSEMBLY__
  484. typedef struct _AT91S_CKGR {
  485. AT91_REG  CKGR_MOR;  // Main Oscillator Register
  486. AT91_REG  CKGR_MCFR;  // Main Clock  Frequency Register
  487. AT91_REG  Reserved0[1];  //
  488. AT91_REG  CKGR_PLLR;  // PLL Register
  489. } AT91S_CKGR, *AT91PS_CKGR;
  490. #else
  491. #define CKGR_MOR        (AT91_CAST(AT91_REG *)  0x00000000) // (CKGR_MOR) Main Oscillator Register
  492. #define CKGR_MCFR       (AT91_CAST(AT91_REG *)  0x00000004) // (CKGR_MCFR) Main Clock  Frequency Register
  493. #define CKGR_PLLR       (AT91_CAST(AT91_REG *)  0x0000000C) // (CKGR_PLLR) PLL Register
  494. #endif
  495. // -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register --------
  496. #define AT91C_CKGR_MOSCEN     (0x1 <<  0) // (CKGR) Main Oscillator Enable
  497. #define AT91C_CKGR_OSCBYPASS  (0x1 <<  1) // (CKGR) Main Oscillator Bypass
  498. #define AT91C_CKGR_OSCOUNT    (0xFF <<  8) // (CKGR) Main Oscillator Start-up Time
  499. // -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register --------
  500. #define AT91C_CKGR_MAINF      (0xFFFF <<  0) // (CKGR) Main Clock Frequency
  501. #define AT91C_CKGR_MAINRDY    (0x1 << 16) // (CKGR) Main Clock Ready
  502. // -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register --------
  503. #define AT91C_CKGR_DIV        (0xFF <<  0) // (CKGR) Divider Selected
  504. #define  AT91C_CKGR_DIV_0                    (0x0) // (CKGR) Divider output is 0
  505. #define  AT91C_CKGR_DIV_BYPASS               (0x1) // (CKGR) Divider is bypassed
  506. #define AT91C_CKGR_PLLCOUNT   (0x3F <<  8) // (CKGR) PLL Counter
  507. #define AT91C_CKGR_OUT        (0x3 << 14) // (CKGR) PLL Output Frequency Range
  508. #define  AT91C_CKGR_OUT_0                    (0x0 << 14) // (CKGR) Please refer to the PLL datasheet
  509. #define  AT91C_CKGR_OUT_1                    (0x1 << 14) // (CKGR) Please refer to the PLL datasheet
  510. #define  AT91C_CKGR_OUT_2                    (0x2 << 14) // (CKGR) Please refer to the PLL datasheet
  511. #define  AT91C_CKGR_OUT_3                    (0x3 << 14) // (CKGR) Please refer to the PLL datasheet
  512. #define AT91C_CKGR_MUL        (0x7FF << 16) // (CKGR) PLL Multiplier
  513. #define AT91C_CKGR_USBDIV     (0x3 << 28) // (CKGR) Divider for USB Clocks
  514. #define  AT91C_CKGR_USBDIV_0                    (0x0 << 28) // (CKGR) Divider output is PLL clock output
  515. #define  AT91C_CKGR_USBDIV_1                    (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2
  516. #define  AT91C_CKGR_USBDIV_2                    (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4
  517. // *****************************************************************************
  518. //              SOFTWARE API DEFINITION  FOR Power Management Controler
  519. // *****************************************************************************
  520. #ifndef __ASSEMBLY__
  521. typedef struct _AT91S_PMC {
  522. AT91_REG  PMC_SCER;  // System Clock Enable Register
  523. AT91_REG  PMC_SCDR;  // System Clock Disable Register
  524. AT91_REG  PMC_SCSR;  // System Clock Status Register
  525. AT91_REG  Reserved0[1];  //
  526. AT91_REG  PMC_PCER;  // Peripheral Clock Enable Register
  527. AT91_REG  PMC_PCDR;  // Peripheral Clock Disable Register
  528. AT91_REG  PMC_PCSR;  // Peripheral Clock Status Register
  529. AT91_REG  Reserved1[1];  //
  530. AT91_REG  PMC_MOR;  // Main Oscillator Register
  531. AT91_REG  PMC_MCFR;  // Main Clock  Frequency Register
  532. AT91_REG  Reserved2[1];  //
  533. AT91_REG  PMC_PLLR;  // PLL Register
  534. AT91_REG  PMC_MCKR;  // Master Clock Register
  535. AT91_REG  Reserved3[3];  //
  536. AT91_REG  PMC_PCKR[4];  // Programmable Clock Register
  537. AT91_REG  Reserved4[4];  //
  538. AT91_REG  PMC_IER;  // Interrupt Enable Register
  539. AT91_REG  PMC_IDR;  // Interrupt Disable Register
  540. AT91_REG  PMC_SR;  // Status Register
  541. AT91_REG  PMC_IMR;  // Interrupt Mask Register
  542. } AT91S_PMC, *AT91PS_PMC;
  543. #else
  544. #define PMC_SCER        (AT91_CAST(AT91_REG *)  0x00000000) // (PMC_SCER) System Clock Enable Register
  545. #define PMC_SCDR        (AT91_CAST(AT91_REG *)  0x00000004) // (PMC_SCDR) System Clock Disable Register
  546. #define PMC_SCSR        (AT91_CAST(AT91_REG *)  0x00000008) // (PMC_SCSR) System Clock Status Register
  547. #define PMC_PCER        (AT91_CAST(AT91_REG *)  0x00000010) // (PMC_PCER) Peripheral Clock Enable Register
  548. #define PMC_PCDR        (AT91_CAST(AT91_REG *)  0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register
  549. #define PMC_PCSR        (AT91_CAST(AT91_REG *)  0x00000018) // (PMC_PCSR) Peripheral Clock Status Register
  550. #define PMC_MCKR        (AT91_CAST(AT91_REG *)  0x00000030) // (PMC_MCKR) Master Clock Register
  551. #define PMC_PCKR        (AT91_CAST(AT91_REG *)  0x00000040) // (PMC_PCKR) Programmable Clock Register
  552. #define PMC_IER         (AT91_CAST(AT91_REG *)  0x00000060) // (PMC_IER) Interrupt Enable Register
  553. #define PMC_IDR         (AT91_CAST(AT91_REG *)  0x00000064) // (PMC_IDR) Interrupt Disable Register
  554. #define PMC_SR          (AT91_CAST(AT91_REG *)  0x00000068) // (PMC_SR) Status Register
  555. #define PMC_IMR         (AT91_CAST(AT91_REG *)  0x0000006C) // (PMC_IMR) Interrupt Mask Register
  556. #endif
  557. // -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register --------
  558. #define AT91C_PMC_PCK         (0x1 <<  0) // (PMC) Processor Clock
  559. #define AT91C_PMC_UDP         (0x1 <<  7) // (PMC) USB Device Port Clock
  560. #define AT91C_PMC_PCK0        (0x1 <<  8) // (PMC) Programmable Clock Output
  561. #define AT91C_PMC_PCK1        (0x1 <<  9) // (PMC) Programmable Clock Output
  562. #define AT91C_PMC_PCK2        (0x1 << 10) // (PMC) Programmable Clock Output
  563. #define AT91C_PMC_PCK3        (0x1 << 11) // (PMC) Programmable Clock Output
  564. // -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register --------
  565. // -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register --------
  566. // -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register --------
  567. // -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register --------
  568. // -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register --------
  569. // -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register --------
  570. #define AT91C_PMC_CSS         (0x3 <<  0) // (PMC) Programmable Clock Selection
  571. #define  AT91C_PMC_CSS_SLOW_CLK             (0x0) // (PMC) Slow Clock is selected
  572. #define  AT91C_PMC_CSS_MAIN_CLK             (0x1) // (PMC) Main Clock is selected
  573. #define  AT91C_PMC_CSS_PLL_CLK              (0x3) // (PMC) Clock from PLL is selected
  574. #define AT91C_PMC_PRES        (0x7 <<  2) // (PMC) Programmable Clock Prescaler
  575. #define  AT91C_PMC_PRES_CLK                  (0x0 <<  2) // (PMC) Selected clock
  576. #define  AT91C_PMC_PRES_CLK_2                (0x1 <<  2) // (PMC) Selected clock divided by 2
  577. #define  AT91C_PMC_PRES_CLK_4                (0x2 <<  2) // (PMC) Selected clock divided by 4
  578. #define  AT91C_PMC_PRES_CLK_8                (0x3 <<  2) // (PMC) Selected clock divided by 8
  579. #define  AT91C_PMC_PRES_CLK_16               (0x4 <<  2) // (PMC) Selected clock divided by 16
  580. #define  AT91C_PMC_PRES_CLK_32               (0x5 <<  2) // (PMC) Selected clock divided by 32
  581. #define  AT91C_PMC_PRES_CLK_64               (0x6 <<  2) // (PMC) Selected clock divided by 64
  582. // -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register --------
  583. // -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register --------
  584. #define AT91C_PMC_MOSCS       (0x1 <<  0) // (PMC) MOSC Status/Enable/Disable/Mask
  585. #define AT91C_PMC_LOCK        (0x1 <<  2) // (PMC) PLL Status/Enable/Disable/Mask
  586. #define AT91C_PMC_MCKRDY      (0x1 <<  3) // (PMC) MCK_RDY Status/Enable/Disable/Mask
  587. #define AT91C_PMC_PCK0RDY     (0x1 <<  8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask
  588. #define AT91C_PMC_PCK1RDY     (0x1 <<  9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask
  589. #define AT91C_PMC_PCK2RDY     (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask
  590. #define AT91C_PMC_PCK3RDY     (0x1 << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask
  591. // -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register --------
  592. // -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register --------
  593. // -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register --------
  594. // *****************************************************************************
  595. //              SOFTWARE API DEFINITION  FOR Reset Controller Interface
  596. // *****************************************************************************
  597. #ifndef __ASSEMBLY__
  598. typedef struct _AT91S_RSTC {
  599. AT91_REG  RSTC_RCR;  // Reset Control Register
  600. AT91_REG  RSTC_RSR;  // Reset Status Register
  601. AT91_REG  RSTC_RMR;  // Reset Mode Register
  602. } AT91S_RSTC, *AT91PS_RSTC;
  603. #else
  604. #define RSTC_RCR        (AT91_CAST(AT91_REG *)  0x00000000) // (RSTC_RCR) Reset Control Register
  605. #define RSTC_RSR        (AT91_CAST(AT91_REG *)  0x00000004) // (RSTC_RSR) Reset Status Register
  606. #define RSTC_RMR        (AT91_CAST(AT91_REG *)  0x00000008) // (RSTC_RMR) Reset Mode Register
  607. #endif
  608. // -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register --------
  609. #define AT91C_RSTC_PROCRST    (0x1 <<  0) // (RSTC) Processor Reset
  610. #define AT91C_RSTC_PERRST     (0x1 <<  2) // (RSTC) Peripheral Reset
  611. #define AT91C_RSTC_EXTRST     (0x1 <<  3) // (RSTC) External Reset
  612. #define AT91C_RSTC_KEY        (0xFF << 24) // (RSTC) Password
  613. // -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register --------
  614. #define AT91C_RSTC_URSTS      (0x1 <<  0) // (RSTC) User Reset Status
  615. #define AT91C_RSTC_BODSTS     (0x1 <<  1) // (RSTC) Brownout Detection Status
  616. #define AT91C_RSTC_RSTTYP     (0x7 <<  8) // (RSTC) Reset Type
  617. #define  AT91C_RSTC_RSTTYP_POWERUP              (0x0 <<  8) // (RSTC) Power-up Reset. VDDCORE rising.
  618. #define  AT91C_RSTC_RSTTYP_WAKEUP               (0x1 <<  8) // (RSTC) WakeUp Reset. VDDCORE rising.
  619. #define  AT91C_RSTC_RSTTYP_WATCHDOG             (0x2 <<  8) // (RSTC) Watchdog Reset. Watchdog overflow occured.
  620. #define  AT91C_RSTC_RSTTYP_SOFTWARE             (0x3 <<  8) // (RSTC) Software Reset. Processor reset required by the software.
  621. #define  AT91C_RSTC_RSTTYP_USER                 (0x4 <<  8) // (RSTC) User Reset. NRST pin detected low.
  622. #define  AT91C_RSTC_RSTTYP_BROWNOUT             (0x5 <<  8) // (RSTC) Brownout Reset occured.
  623. #define AT91C_RSTC_NRSTL      (0x1 << 16) // (RSTC) NRST pin level
  624. #define AT91C_RSTC_SRCMP      (0x1 << 17) // (RSTC) Software Reset Command in Progress.
  625. // -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register --------
  626. #define AT91C_RSTC_URSTEN     (0x1 <<  0) // (RSTC) User Reset Enable
  627. #define AT91C_RSTC_URSTIEN    (0x1 <<  4) // (RSTC) User Reset Interrupt Enable
  628. #define AT91C_RSTC_ERSTL      (0xF <<  8) // (RSTC) User Reset Length
  629. #define AT91C_RSTC_BODIEN     (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable
  630. // *****************************************************************************
  631. //              SOFTWARE API DEFINITION  FOR Real Time Timer Controller Interface
  632. // *****************************************************************************
  633. #ifndef __ASSEMBLY__
  634. typedef struct _AT91S_RTTC {
  635. AT91_REG  RTTC_RTMR;  // Real-time Mode Register
  636. AT91_REG  RTTC_RTAR;  // Real-time Alarm Register
  637. AT91_REG  RTTC_RTVR;  // Real-time Value Register
  638. AT91_REG  RTTC_RTSR;  // Real-time Status Register
  639. } AT91S_RTTC, *AT91PS_RTTC;
  640. #else
  641. #define RTTC_RTMR       (AT91_CAST(AT91_REG *)  0x00000000) // (RTTC_RTMR) Real-time Mode Register
  642. #define RTTC_RTAR       (AT91_CAST(AT91_REG *)  0x00000004) // (RTTC_RTAR) Real-time Alarm Register
  643. #define RTTC_RTVR       (AT91_CAST(AT91_REG *)  0x00000008) // (RTTC_RTVR) Real-time Value Register
  644. #define RTTC_RTSR       (AT91_CAST(AT91_REG *)  0x0000000C) // (RTTC_RTSR) Real-time Status Register
  645. #endif
  646. // -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register --------
  647. #define AT91C_RTTC_RTPRES     (0xFFFF <<  0) // (RTTC) Real-time Timer Prescaler Value
  648. #define AT91C_RTTC_ALMIEN     (0x1 << 16) // (RTTC) Alarm Interrupt Enable
  649. #define AT91C_RTTC_RTTINCIEN  (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable
  650. #define AT91C_RTTC_RTTRST     (0x1 << 18) // (RTTC) Real Time Timer Restart
  651. // -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register --------
  652. #define AT91C_RTTC_ALMV       (0x0 <<  0) // (RTTC) Alarm Value
  653. // -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register --------
  654. #define AT91C_RTTC_CRTV       (0x0 <<  0) // (RTTC) Current Real-time Value
  655. // -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register --------
  656. #define AT91C_RTTC_ALMS       (0x1 <<  0) // (RTTC) Real-time Alarm Status
  657. #define AT91C_RTTC_RTTINC     (0x1 <<  1) // (RTTC) Real-time Timer Increment
  658. // *****************************************************************************
  659. //              SOFTWARE API DEFINITION  FOR Periodic Interval Timer Controller Interface
  660. // *****************************************************************************
  661. #ifndef __ASSEMBLY__
  662. typedef struct _AT91S_PITC {
  663. AT91_REG  PITC_PIMR;  // Period Interval Mode Register
  664. AT91_REG  PITC_PISR;  // Period Interval Status Register
  665. AT91_REG  PITC_PIVR;  // Period Interval Value Register
  666. AT91_REG  PITC_PIIR;  // Period Interval Image Register
  667. } AT91S_PITC, *AT91PS_PITC;
  668. #else
  669. #define PITC_PIMR       (AT91_CAST(AT91_REG *)  0x00000000) // (PITC_PIMR) Period Interval Mode Register
  670. #define PITC_PISR       (AT91_CAST(AT91_REG *)  0x00000004) // (PITC_PISR) Period Interval Status Register
  671. #define PITC_PIVR       (AT91_CAST(AT91_REG *)  0x00000008) // (PITC_PIVR) Period Interval Value Register
  672. #define PITC_PIIR       (AT91_CAST(AT91_REG *)  0x0000000C) // (PITC_PIIR) Period Interval Image Register
  673. #endif
  674. // -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register --------
  675. #define AT91C_PITC_PIV        (0xFFFFF <<  0) // (PITC) Periodic Interval Value
  676. #define AT91C_PITC_PITEN      (0x1 << 24) // (PITC) Periodic Interval Timer Enabled
  677. #define AT91C_PITC_PITIEN     (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable
  678. // -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register --------
  679. #define AT91C_PITC_PITS       (0x1 <<  0) // (PITC) Periodic Interval Timer Status
  680. // -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register --------
  681. #define AT91C_PITC_CPIV       (0xFFFFF <<  0) // (PITC) Current Periodic Interval Value
  682. #define AT91C_PITC_PICNT      (0xFFF << 20) // (PITC) Periodic Interval Counter
  683. // -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register --------
  684. // *****************************************************************************
  685. //              SOFTWARE API DEFINITION  FOR Watchdog Timer Controller Interface
  686. // *****************************************************************************
  687. #ifndef __ASSEMBLY__
  688. typedef struct _AT91S_WDTC {
  689. AT91_REG  WDTC_WDCR;  // Watchdog Control Register
  690. AT91_REG  WDTC_WDMR;  // Watchdog Mode Register
  691. AT91_REG  WDTC_WDSR;  // Watchdog Status Register
  692. } AT91S_WDTC, *AT91PS_WDTC;
  693. #else
  694. #define WDTC_WDCR       (AT91_CAST(AT91_REG *)  0x00000000) // (WDTC_WDCR) Watchdog Control Register
  695. #define WDTC_WDMR       (AT91_CAST(AT91_REG *)  0x00000004) // (WDTC_WDMR) Watchdog Mode Register
  696. #define WDTC_WDSR       (AT91_CAST(AT91_REG *)  0x00000008) // (WDTC_WDSR) Watchdog Status Register
  697. #endif
  698. // -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register --------
  699. #define AT91C_WDTC_WDRSTT     (0x1 <<  0) // (WDTC) Watchdog Restart
  700. #define AT91C_WDTC_KEY        (0xFF << 24) // (WDTC) Watchdog KEY Password
  701. // -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register --------
  702. #define AT91C_WDTC_WDV        (0xFFF <<  0) // (WDTC) Watchdog Timer Restart
  703. #define AT91C_WDTC_WDFIEN     (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable
  704. #define AT91C_WDTC_WDRSTEN    (0x1 << 13) // (WDTC) Watchdog Reset Enable
  705. #define AT91C_WDTC_WDRPROC    (0x1 << 14) // (WDTC) Watchdog Timer Restart
  706. #define AT91C_WDTC_WDDIS      (0x1 << 15) // (WDTC) Watchdog Disable
  707. #define AT91C_WDTC_WDD        (0xFFF << 16) // (WDTC) Watchdog Delta Value
  708. #define AT91C_WDTC_WDDBGHLT   (0x1 << 28) // (WDTC) Watchdog Debug Halt
  709. #define AT91C_WDTC_WDIDLEHLT  (0x1 << 29) // (WDTC) Watchdog Idle Halt
  710. // -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register --------
  711. #define AT91C_WDTC_WDUNF      (0x1 <<  0) // (WDTC) Watchdog Underflow
  712. #define AT91C_WDTC_WDERR      (0x1 <<  1) // (WDTC) Watchdog Error
  713. // *****************************************************************************
  714. //              SOFTWARE API DEFINITION  FOR Voltage Regulator Mode Controller Interface
  715. // *****************************************************************************
  716. #ifndef __ASSEMBLY__
  717. typedef struct _AT91S_VREG {
  718. AT91_REG  VREG_MR;  // Voltage Regulator Mode Register
  719. } AT91S_VREG, *AT91PS_VREG;
  720. #else
  721. #define VREG_MR         (AT91_CAST(AT91_REG *)  0x00000000) // (VREG_MR) Voltage Regulator Mode Register
  722. #endif
  723. // -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register --------
  724. #define AT91C_VREG_PSTDBY     (0x1 <<  0) // (VREG) Voltage Regulator Power Standby Mode
  725. // *****************************************************************************
  726. //              SOFTWARE API DEFINITION  FOR Embedded Flash Controller Interface
  727. // *****************************************************************************
  728. #ifndef __ASSEMBLY__
  729. typedef struct _AT91S_EFC {
  730. AT91_REG  EFC_FMR;  // MC Flash Mode Register
  731. AT91_REG  EFC_FCR;  // MC Flash Command Register
  732. AT91_REG  EFC_FSR;  // MC Flash Status Register
  733. AT91_REG  EFC_VR;  // MC Flash Version Register
  734. } AT91S_EFC, *AT91PS_EFC;
  735. #else
  736. #define MC_FMR          (AT91_CAST(AT91_REG *)  0x00000000) // (MC_FMR) MC Flash Mode Register
  737. #define MC_FCR          (AT91_CAST(AT91_REG *)  0x00000004) // (MC_FCR) MC Flash Command Register
  738. #define MC_FSR          (AT91_CAST(AT91_REG *)  0x00000008) // (MC_FSR) MC Flash Status Register
  739. #define MC_VR           (AT91_CAST(AT91_REG *)  0x0000000C) // (MC_VR) MC Flash Version Register
  740. #endif
  741. // -------- MC_FMR : (EFC Offset: 0x0) MC Flash Mode Register --------
  742. #define AT91C_MC_FRDY         (0x1 <<  0) // (EFC) Flash Ready
  743. #define AT91C_MC_LOCKE        (0x1 <<  2) // (EFC) Lock Error
  744. #define AT91C_MC_PROGE        (0x1 <<  3) // (EFC) Programming Error
  745. #define AT91C_MC_NEBP         (0x1 <<  7) // (EFC) No Erase Before Programming
  746. #define AT91C_MC_FWS          (0x3 <<  8) // (EFC) Flash Wait State
  747. #define  AT91C_MC_FWS_0FWS                 (0x0 <<  8) // (EFC) 1 cycle for Read, 2 for Write operations
  748. #define  AT91C_MC_FWS_1FWS                 (0x1 <<  8) // (EFC) 2 cycles for Read, 3 for Write operations
  749. #define  AT91C_MC_FWS_2FWS                 (0x2 <<  8) // (EFC) 3 cycles for Read, 4 for Write operations
  750. #define  AT91C_MC_FWS_3FWS                 (0x3 <<  8) // (EFC) 4 cycles for Read, 4 for Write operations
  751. #define AT91C_MC_FMCN         (0xFF << 16) // (EFC) Flash Microsecond Cycle Number
  752. // -------- MC_FCR : (EFC Offset: 0x4) MC Flash Command Register --------
  753. #define AT91C_MC_FCMD         (0xF <<  0) // (EFC) Flash Command
  754. #define  AT91C_MC_FCMD_START_PROG           (0x1) // (EFC) Starts the programming of th epage specified by PAGEN.
  755. #define  AT91C_MC_FCMD_LOCK                 (0x2) // (EFC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN.
  756. #define  AT91C_MC_FCMD_PROG_AND_LOCK        (0x3) // (EFC) The lock sequence automatically happens after the programming sequence is completed.
  757. #define  AT91C_MC_FCMD_UNLOCK               (0x4) // (EFC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN.
  758. #define  AT91C_MC_FCMD_ERASE_ALL            (0x8) // (EFC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled.
  759. #define  AT91C_MC_FCMD_SET_GP_NVM           (0xB) // (EFC) Set General Purpose NVM bits.
  760. #define  AT91C_MC_FCMD_CLR_GP_NVM           (0xD) // (EFC) Clear General Purpose NVM bits.
  761. #define  AT91C_MC_FCMD_SET_SECURITY         (0xF) // (EFC) Set Security Bit.
  762. #define AT91C_MC_PAGEN        (0x3FF <<  8) // (EFC) Page Number
  763. #define AT91C_MC_KEY          (0xFF << 24) // (EFC) Writing Protect Key
  764. // -------- MC_FSR : (EFC Offset: 0x8) MC Flash Command Register --------
  765. #define AT91C_MC_SECURITY     (0x1 <<  4) // (EFC) Security Bit Status
  766. #define AT91C_MC_GPNVM0       (0x1 <<  8) // (EFC) Sector 0 Lock Status
  767. #define AT91C_MC_GPNVM1       (0x1 <<  9) // (EFC) Sector 1 Lock Status
  768. #define AT91C_MC_GPNVM2       (0x1 << 10) // (EFC) Sector 2 Lock Status
  769. #define AT91C_MC_GPNVM3       (0x1 << 11) // (EFC) Sector 3 Lock Status
  770. #define AT91C_MC_GPNVM4       (0x1 << 12) // (EFC) Sector 4 Lock Status
  771. #define AT91C_MC_GPNVM5       (0x1 << 13) // (EFC) Sector 5 Lock Status
  772. #define AT91C_MC_GPNVM6       (0x1 << 14) // (EFC) Sector 6 Lock Status
  773. #define AT91C_MC_GPNVM7       (0x1 << 15) // (EFC) Sector 7 Lock Status
  774. #define AT91C_MC_LOCKS0       (0x1 << 16) // (EFC) Sector 0 Lock Status
  775. #define AT91C_MC_LOCKS1       (0x1 << 17) // (EFC) Sector 1 Lock Status
  776. #define AT91C_MC_LOCKS2       (0x1 << 18) // (EFC) Sector 2 Lock Status
  777. #define AT91C_MC_LOCKS3       (0x1 << 19) // (EFC) Sector 3 Lock Status
  778. #define AT91C_MC_LOCKS4       (0x1 << 20) // (EFC) Sector 4 Lock Status
  779. #define AT91C_MC_LOCKS5       (0x1 << 21) // (EFC) Sector 5 Lock Status
  780. #define AT91C_MC_LOCKS6       (0x1 << 22) // (EFC) Sector 6 Lock Status
  781. #define AT91C_MC_LOCKS7       (0x1 << 23) // (EFC) Sector 7 Lock Status
  782. #define AT91C_MC_LOCKS8       (0x1 << 24) // (EFC) Sector 8 Lock Status
  783. #define AT91C_MC_LOCKS9       (0x1 << 25) // (EFC) Sector 9 Lock Status
  784. #define AT91C_MC_LOCKS10      (0x1 << 26) // (EFC) Sector 10 Lock Status
  785. #define AT91C_MC_LOCKS11      (0x1 << 27) // (EFC) Sector 11 Lock Status
  786. #define AT91C_MC_LOCKS12      (0x1 << 28) // (EFC) Sector 12 Lock Status
  787. #define AT91C_MC_LOCKS13      (0x1 << 29) // (EFC) Sector 13 Lock Status
  788. #define AT91C_MC_LOCKS14      (0x1 << 30) // (EFC) Sector 14 Lock Status
  789. #define AT91C_MC_LOCKS15      (0x1 << 31) // (EFC) Sector 15 Lock Status
  790. // -------- EFC_VR : (EFC Offset: 0xc) EFC version register --------
  791. #define AT91C_EFC_VERSION     (0xFFF <<  0) // (EFC) EFC version number
  792. #define AT91C_EFC_MFN         (0x7 << 16) // (EFC) EFC MFN
  793. // *****************************************************************************
  794. //              SOFTWARE API DEFINITION  FOR Memory Controller Interface
  795. // *****************************************************************************
  796. #ifndef __ASSEMBLY__
  797. typedef struct _AT91S_MC {
  798. AT91_REG  MC_RCR;  // MC Remap Control Register
  799. AT91_REG  MC_ASR;  // MC Abort Status Register
  800. AT91_REG  MC_AASR;  // MC Abort Address Status Register
  801. AT91_REG  Reserved0[1];  //
  802. AT91_REG  MC_PUIA[16];  // MC Protection Unit Area
  803. AT91_REG  MC_PUP;  // MC Protection Unit Peripherals
  804. AT91_REG  MC_PUER;  // MC Protection Unit Enable Register
  805. AT91_REG  Reserved1[2];  //
  806. AT91_REG  MC0_FMR;  // MC Flash Mode Register
  807. AT91_REG  MC0_FCR;  // MC Flash Command Register
  808. AT91_REG  MC0_FSR;  // MC Flash Status Register
  809. AT91_REG  MC0_VR;  // MC Flash Version Register
  810. AT91_REG  MC1_FMR;  // MC Flash Mode Register
  811. AT91_REG  MC1_FCR;  // MC Flash Command Register
  812. AT91_REG  MC1_FSR;  // MC Flash Status Register
  813. AT91_REG  MC1_VR;  // MC Flash Version Register
  814. } AT91S_MC, *AT91PS_MC;
  815. #else
  816. #define MC_RCR          (AT91_CAST(AT91_REG *)  0x00000000) // (MC_RCR) MC Remap Control Register
  817. #define MC_ASR          (AT91_CAST(AT91_REG *)  0x00000004) // (MC_ASR) MC Abort Status Register
  818. #define MC_AASR         (AT91_CAST(AT91_REG *)  0x00000008) // (MC_AASR) MC Abort Address Status Register
  819. #define MC_PUIA         (AT91_CAST(AT91_REG *)  0x00000010) // (MC_PUIA) MC Protection Unit Area
  820. #define MC_PUP          (AT91_CAST(AT91_REG *)  0x00000050) // (MC_PUP) MC Protection Unit Peripherals
  821. #define MC_PUER         (AT91_CAST(AT91_REG *)  0x00000054) // (MC_PUER) MC Protection Unit Enable Register
  822. #endif
  823. // -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register --------
  824. #define AT91C_MC_RCB          (0x1 <<  0) // (MC) Remap Command Bit
  825. // -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register --------
  826. #define AT91C_MC_UNDADD       (0x1 <<  0) // (MC) Undefined Addess Abort Status
  827. #define AT91C_MC_MISADD       (0x1 <<  1) // (MC) Misaligned Addess Abort Status
  828. #define AT91C_MC_MPU          (0x1 <<  2) // (MC) Memory protection Unit Abort Status
  829. #define AT91C_MC_ABTSZ        (0x3 <<  8) // (MC) Abort Size Status
  830. #define  AT91C_MC_ABTSZ_BYTE                 (0x0 <<  8) // (MC) Byte
  831. #define  AT91C_MC_ABTSZ_HWORD                (0x1 <<  8) // (MC) Half-word
  832. #define  AT91C_MC_ABTSZ_WORD                 (0x2 <<  8) // (MC) Word
  833. #define AT91C_MC_ABTTYP       (0x3 << 10) // (MC) Abort Type Status
  834. #define  AT91C_MC_ABTTYP_DATAR                (0x0 << 10) // (MC) Data Read
  835. #define  AT91C_MC_ABTTYP_DATAW                (0x1 << 10) // (MC) Data Write
  836. #define  AT91C_MC_ABTTYP_FETCH                (0x2 << 10) // (MC) Code Fetch
  837. #define AT91C_MC_MST0         (0x1 << 16) // (MC) Master 0 Abort Source
  838. #define AT91C_MC_MST1         (0x1 << 17) // (MC) Master 1 Abort Source
  839. #define AT91C_MC_SVMST0       (0x1 << 24) // (MC) Saved Master 0 Abort Source
  840. #define AT91C_MC_SVMST1       (0x1 << 25) // (MC) Saved Master 1 Abort Source
  841. // -------- MC_PUIA : (MC Offset: 0x10) MC Protection Unit Area --------
  842. #define AT91C_MC_PROT         (0x3 <<  0) // (MC) Protection
  843. #define  AT91C_MC_PROT_PNAUNA               (0x0) // (MC) Privilege: No Access, User: No Access
  844. #define  AT91C_MC_PROT_PRWUNA               (0x1) // (MC) Privilege: Read/Write, User: No Access
  845. #define  AT91C_MC_PROT_PRWURO               (0x2) // (MC) Privilege: Read/Write, User: Read Only
  846. #define  AT91C_MC_PROT_PRWURW               (0x3) // (MC) Privilege: Read/Write, User: Read/Write
  847. #define AT91C_MC_SIZE         (0xF <<  4) // (MC) Internal Area Size
  848. #define  AT91C_MC_SIZE_1KB                  (0x0 <<  4) // (MC) Area size 1KByte
  849. #define  AT91C_MC_SIZE_2KB                  (0x1 <<  4) // (MC) Area size 2KByte
  850. #define  AT91C_MC_SIZE_4KB                  (0x2 <<  4) // (MC) Area size 4KByte
  851. #define  AT91C_MC_SIZE_8KB                  (0x3 <<  4) // (MC) Area size 8KByte
  852. #define  AT91C_MC_SIZE_16KB                 (0x4 <<  4) // (MC) Area size 16KByte
  853. #define  AT91C_MC_SIZE_32KB                 (0x5 <<  4) // (MC) Area size 32KByte
  854. #define  AT91C_MC_SIZE_64KB                 (0x6 <<  4) // (MC) Area size 64KByte
  855. #define  AT91C_MC_SIZE_128KB                (0x7 <<  4) // (MC) Area size 128KByte
  856. #define  AT91C_MC_SIZE_256KB                (0x8 <<  4) // (MC) Area size 256KByte
  857. #define  AT91C_MC_SIZE_512KB                (0x9 <<  4) // (MC) Area size 512KByte
  858. #define  AT91C_MC_SIZE_1MB                  (0xA <<  4) // (MC) Area size 1MByte
  859. #define  AT91C_MC_SIZE_2MB                  (0xB <<  4) // (MC) Area size 2MByte
  860. #define  AT91C_MC_SIZE_4MB                  (0xC <<  4) // (MC) Area size 4MByte
  861. #define  AT91C_MC_SIZE_8MB                  (0xD <<  4) // (MC) Area size 8MByte
  862. #define  AT91C_MC_SIZE_16MB                 (0xE <<  4) // (MC) Area size 16MByte
  863. #define  AT91C_MC_SIZE_64MB                 (0xF <<  4) // (MC) Area size 64MByte
  864. #define AT91C_MC_BA           (0x3FFFF << 10) // (MC) Internal Area Base Address
  865. // -------- MC_PUP : (MC Offset: 0x50) MC Protection Unit Peripheral --------
  866. // -------- MC_PUER : (MC Offset: 0x54) MC Protection Unit Area --------
  867. #define AT91C_MC_PUEB         (0x1 <<  0) // (MC) Protection Unit enable Bit
  868. // *****************************************************************************
  869. //              SOFTWARE API DEFINITION  FOR Serial Parallel Interface
  870. // *****************************************************************************
  871. #ifndef __ASSEMBLY__
  872. typedef struct _AT91S_SPI {
  873. AT91_REG  SPI_CR;  // Control Register
  874. AT91_REG  SPI_MR;  // Mode Register
  875. AT91_REG  SPI_RDR;  // Receive Data Register
  876. AT91_REG  SPI_TDR;  // Transmit Data Register
  877. AT91_REG  SPI_SR;  // Status Register
  878. AT91_REG  SPI_IER;  // Interrupt Enable Register
  879. AT91_REG  SPI_IDR;  // Interrupt Disable Register
  880. AT91_REG  SPI_IMR;  // Interrupt Mask Register
  881. AT91_REG  Reserved0[4];  //
  882. AT91_REG  SPI_CSR[4];  // Chip Select Register
  883. AT91_REG  Reserved1[48];  //
  884. AT91_REG  SPI_RPR;  // Receive Pointer Register
  885. AT91_REG  SPI_RCR;  // Receive Counter Register
  886. AT91_REG  SPI_TPR;  // Transmit Pointer Register
  887. AT91_REG  SPI_TCR;  // Transmit Counter Register
  888. AT91_REG  SPI_RNPR;  // Receive Next Pointer Register
  889. AT91_REG  SPI_RNCR;  // Receive Next Counter Register
  890. AT91_REG  SPI_TNPR;  // Transmit Next Pointer Register
  891. AT91_REG  SPI_TNCR;  // Transmit Next Counter Register
  892. AT91_REG  SPI_PTCR;  // PDC Transfer Control Register
  893. AT91_REG  SPI_PTSR;  // PDC Transfer Status Register
  894. } AT91S_SPI, *AT91PS_SPI;
  895. #else
  896. #define SPI_CR          (AT91_CAST(AT91_REG *)  0x00000000) // (SPI_CR) Control Register
  897. #define SPI_MR          (AT91_CAST(AT91_REG *)  0x00000004) // (SPI_MR) Mode Register
  898. #define SPI_RDR         (AT91_CAST(AT91_REG *)  0x00000008) // (SPI_RDR) Receive Data Register
  899. #define SPI_TDR         (AT91_CAST(AT91_REG *)  0x0000000C) // (SPI_TDR) Transmit Data Register
  900. #define SPI_SR          (AT91_CAST(AT91_REG *)  0x00000010) // (SPI_SR) Status Register
  901. #define SPI_IER         (AT91_CAST(AT91_REG *)  0x00000014) // (SPI_IER) Interrupt Enable Register
  902. #define SPI_IDR         (AT91_CAST(AT91_REG *)  0x00000018) // (SPI_IDR) Interrupt Disable Register
  903. #define SPI_IMR         (AT91_CAST(AT91_REG *)  0x0000001C) // (SPI_IMR) Interrupt Mask Register
  904. #define SPI_CSR         (AT91_CAST(AT91_REG *)  0x00000030) // (SPI_CSR) Chip Select Register
  905. #endif
  906. // -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register --------
  907. #define AT91C_SPI_SPIEN       (0x1 <<  0) // (SPI) SPI Enable
  908. #define AT91C_SPI_SPIDIS      (0x1 <<  1) // (SPI) SPI Disable
  909. #define AT91C_SPI_SWRST       (0x1 <<  7) // (SPI) SPI Software reset
  910. #define AT91C_SPI_LASTXFER    (0x1 << 24) // (SPI) SPI Last Transfer
  911. // -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register --------
  912. #define AT91C_SPI_MSTR        (0x1 <<  0) // (SPI) Master/Slave Mode
  913. #define AT91C_SPI_PS          (0x1 <<  1) // (SPI) Peripheral Select
  914. #define  AT91C_SPI_PS_FIXED                (0x0 <<  1) // (SPI) Fixed Peripheral Select
  915. #define  AT91C_SPI_PS_VARIABLE             (0x1 <<  1) // (SPI) Variable Peripheral Select
  916. #define AT91C_SPI_PCSDEC      (0x1 <<  2) // (SPI) Chip Select Decode
  917. #define AT91C_SPI_FDIV        (0x1 <<  3) // (SPI) Clock Selection
  918. #define AT91C_SPI_MODFDIS     (0x1 <<  4) // (SPI) Mode Fault Detection
  919. #define AT91C_SPI_LLB         (0x1 <<  7) // (SPI) Clock Selection
  920. #define AT91C_SPI_PCS         (0xF << 16) // (SPI) Peripheral Chip Select
  921. #define AT91C_SPI_DLYBCS      (0xFF << 24) // (SPI) Delay Between Chip Selects
  922. // -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register --------
  923. #define AT91C_SPI_RD          (0xFFFF <<  0) // (SPI) Receive Data
  924. #define AT91C_SPI_RPCS        (0xF << 16) // (SPI) Peripheral Chip Select Status
  925. // -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register --------
  926. #define AT91C_SPI_TD          (0xFFFF <<  0) // (SPI) Transmit Data
  927. #define AT91C_SPI_TPCS        (0xF << 16) // (SPI) Peripheral Chip Select Status
  928. // -------- SPI_SR : (SPI Offset: 0x10) Status Register --------
  929. #define AT91C_SPI_RDRF        (0x1 <<  0) // (SPI) Receive Data Register Full
  930. #define AT91C_SPI_TDRE        (0x1 <<  1) // (SPI) Transmit Data Register Empty
  931. #define AT91C_SPI_MODF        (0x1 <<  2) // (SPI) Mode Fault Error
  932. #define AT91C_SPI_OVRES       (0x1 <<  3) // (SPI) Overrun Error Status
  933. #define AT91C_SPI_ENDRX       (0x1 <<  4) // (SPI) End of Receiver Transfer
  934. #define AT91C_SPI_ENDTX       (0x1 <<  5) // (SPI) End of Receiver Transfer
  935. #define AT91C_SPI_RXBUFF      (0x1 <<  6) // (SPI) RXBUFF Interrupt
  936. #define AT91C_SPI_TXBUFE      (0x1 <<  7) // (SPI) TXBUFE Interrupt
  937. #define AT91C_SPI_NSSR        (0x1 <<  8) // (SPI) NSSR Interrupt
  938. #define AT91C_SPI_TXEMPTY     (0x1 <<  9) // (SPI) TXEMPTY Interrupt
  939. #define AT91C_SPI_SPIENS      (0x1 << 16) // (SPI) Enable Status
  940. // -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register --------
  941. // -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register --------
  942. // -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register --------
  943. // -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register --------
  944. #define AT91C_SPI_CPOL        (0x1 <<  0) // (SPI) Clock Polarity
  945. #define AT91C_SPI_NCPHA       (0x1 <<  1) // (SPI) Clock Phase
  946. #define AT91C_SPI_CSAAT       (0x1 <<  3) // (SPI) Chip Select Active After Transfer
  947. #define AT91C_SPI_BITS        (0xF <<  4) // (SPI) Bits Per Transfer
  948. #define  AT91C_SPI_BITS_8                    (0x0 <<  4) // (SPI) 8 Bits Per transfer
  949. #define  AT91C_SPI_BITS_9                    (0x1 <<  4) // (SPI) 9 Bits Per transfer
  950. #define  AT91C_SPI_BITS_10                   (0x2 <<  4) // (SPI) 10 Bits Per transfer
  951. #define  AT91C_SPI_BITS_11                   (0x3 <<  4) // (SPI) 11 Bits Per transfer
  952. #define  AT91C_SPI_BITS_12                   (0x4 <<  4) // (SPI) 12 Bits Per transfer
  953. #define  AT91C_SPI_BITS_13                   (0x5 <<  4) // (SPI) 13 Bits Per transfer
  954. #define  AT91C_SPI_BITS_14                   (0x6 <<  4) // (SPI) 14 Bits Per transfer
  955. #define  AT91C_SPI_BITS_15                   (0x7 <<  4) // (SPI) 15 Bits Per transfer
  956. #define  AT91C_SPI_BITS_16                   (0x8 <<  4) // (SPI) 16 Bits Per transfer
  957. #define AT91C_SPI_SCBR        (0xFF <<  8) // (SPI) Serial Clock Baud Rate
  958. #define AT91C_SPI_DLYBS       (0xFF << 16) // (SPI) Delay Before SPCK
  959. #define AT91C_SPI_DLYBCT      (0xFF << 24) // (SPI) Delay Between Consecutive Transfers
  960. // *****************************************************************************
  961. //              SOFTWARE API DEFINITION  FOR Usart
  962. // *****************************************************************************
  963. #ifndef __ASSEMBLY__
  964. typedef struct _AT91S_USART {
  965. AT91_REG  US_CR;  // Control Register
  966. AT91_REG  US_MR;  // Mode Register
  967. AT91_REG  US_IER;  // Interrupt Enable Register
  968. AT91_REG  US_IDR;  // Interrupt Disable Register
  969. AT91_REG  US_IMR;  // Interrupt Mask Register
  970. AT91_REG  US_CSR;  // Channel Status Register
  971. AT91_REG  US_RHR;  // Receiver Holding Register
  972. AT91_REG  US_THR;  // Transmitter Holding Register
  973. AT91_REG  US_BRGR;  // Baud Rate Generator Register
  974. AT91_REG  US_RTOR;  // Receiver Time-out Register
  975. AT91_REG  US_TTGR;  // Transmitter Time-guard Register
  976. AT91_REG  Reserved0[5];  //
  977. AT91_REG  US_FIDI;  // FI_DI_Ratio Register
  978. AT91_REG  US_NER;  // Nb Errors Register
  979. AT91_REG  Reserved1[1];  //
  980. AT91_REG  US_IF;  // IRDA_FILTER Register
  981. AT91_REG  Reserved2[44];  //
  982. AT91_REG  US_RPR;  // Receive Pointer Register
  983. AT91_REG  US_RCR;  // Receive Counter Register
  984. AT91_REG  US_TPR;  // Transmit Pointer Register
  985. AT91_REG  US_TCR;  // Transmit Counter Register
  986. AT91_REG  US_RNPR;  // Receive Next Pointer Register
  987. AT91_REG  US_RNCR;  // Receive Next Counter Register
  988. AT91_REG  US_TNPR;  // Transmit Next Pointer Register
  989. AT91_REG  US_TNCR;  // Transmit Next Counter Register
  990. AT91_REG  US_PTCR;  // PDC Transfer Control Register
  991. AT91_REG  US_PTSR;  // PDC Transfer Status Register
  992. } AT91S_USART, *AT91PS_USART;
  993. #else
  994. #define US_CR           (AT91_CAST(AT91_REG *)  0x00000000) // (US_CR) Control Register
  995. #define US_MR           (AT91_CAST(AT91_REG *)  0x00000004) // (US_MR) Mode Register
  996. #define US_IER          (AT91_CAST(AT91_REG *)  0x00000008) // (US_IER) Interrupt Enable Register
  997. #define US_IDR          (AT91_CAST(AT91_REG *)  0x0000000C) // (US_IDR) Interrupt Disable Register
  998. #define US_IMR          (AT91_CAST(AT91_REG *)  0x00000010) // (US_IMR) Interrupt Mask Register
  999. #define US_CSR          (AT91_CAST(AT91_REG *)  0x00000014) // (US_CSR) Channel Status Register
  1000. #define US_RHR          (AT91_CAST(AT91_REG *)  0x00000018) // (US_RHR) Receiver Holding Register
  1001. #define US_THR          (AT91_CAST(AT91_REG *)  0x0000001C) // (US_THR) Transmitter Holding Register
  1002. #define US_BRGR         (AT91_CAST(AT91_REG *)  0x00000020) // (US_BRGR) Baud Rate Generator Register
  1003. #define US_RTOR         (AT91_CAST(AT91_REG *)  0x00000024) // (US_RTOR) Receiver Time-out Register
  1004. #define US_TTGR         (AT91_CAST(AT91_REG *)  0x00000028) // (US_TTGR) Transmitter Time-guard Register
  1005. #define US_FIDI         (AT91_CAST(AT91_REG *)  0x00000040) // (US_FIDI) FI_DI_Ratio Register
  1006. #define US_NER          (AT91_CAST(AT91_REG *)  0x00000044) // (US_NER) Nb Errors Register
  1007. #define US_IF           (AT91_CAST(AT91_REG *)  0x0000004C) // (US_IF) IRDA_FILTER Register
  1008. #endif
  1009. // -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register --------
  1010. #define AT91C_US_STTBRK       (0x1 <<  9) // (USART) Start Break
  1011. #define AT91C_US_STPBRK       (0x1 << 10) // (USART) Stop Break
  1012. #define AT91C_US_STTTO        (0x1 << 11) // (USART) Start Time-out
  1013. #define AT91C_US_SENDA        (0x1 << 12) // (USART) Send Address
  1014. #define AT91C_US_RSTIT        (0x1 << 13) // (USART) Reset Iterations
  1015. #define AT91C_US_RSTNACK      (0x1 << 14) // (USART) Reset Non Acknowledge
  1016. #define AT91C_US_RETTO        (0x1 << 15) // (USART) Rearm Time-out
  1017. #define AT91C_US_DTREN        (0x1 << 16) // (USART) Data Terminal ready Enable
  1018. #define AT91C_US_DTRDIS       (0x1 << 17) // (USART) Data Terminal ready Disable
  1019. #define AT91C_US_RTSEN        (0x1 << 18) // (USART) Request to Send enable
  1020. #define AT91C_US_RTSDIS       (0x1 << 19) // (USART) Request to Send Disable
  1021. // -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register --------
  1022. #define AT91C_US_USMODE       (0xF <<  0) // (USART) Usart mode
  1023. #define  AT91C_US_USMODE_NORMAL               (0x0) // (USART) Normal
  1024. #define  AT91C_US_USMODE_RS485                (0x1) // (USART) RS485
  1025. #define  AT91C_US_USMODE_HWHSH                (0x2) // (USART) Hardware Handshaking
  1026. #define  AT91C_US_USMODE_MODEM                (0x3) // (USART) Modem
  1027. #define  AT91C_US_USMODE_ISO7816_0            (0x4) // (USART) ISO7816 protocol: T = 0
  1028. #define  AT91C_US_USMODE_ISO7816_1            (0x6) // (USART) ISO7816 protocol: T = 1
  1029. #define  AT91C_US_USMODE_IRDA                 (0x8) // (USART) IrDA
  1030. #define  AT91C_US_USMODE_SWHSH                (0xC) // (USART) Software Handshaking
  1031. #define AT91C_US_CLKS         (0x3 <<  4) // (USART) Clock Selection (Baud Rate generator Input Clock
  1032. #define  AT91C_US_CLKS_CLOCK                (0x0 <<  4) // (USART) Clock
  1033. #define  AT91C_US_CLKS_FDIV1                (0x1 <<  4) // (USART) fdiv1
  1034. #define  AT91C_US_CLKS_SLOW                 (0x2 <<  4) // (USART) slow_clock (ARM)
  1035. #define  AT91C_US_CLKS_EXT                  (0x3 <<  4) // (USART) External (SCK)
  1036. #define AT91C_US_CHRL         (0x3 <<  6) // (USART) Clock Selection (Baud Rate generator Input Clock
  1037. #define  AT91C_US_CHRL_5_BITS               (0x0 <<  6) // (USART) Character Length: 5 bits
  1038. #define  AT91C_US_CHRL_6_BITS               (0x1 <<  6) // (USART) Character Length: 6 bits
  1039. #define  AT91C_US_CHRL_7_BITS               (0x2 <<  6) // (USART) Character Length: 7 bits
  1040. #define  AT91C_US_CHRL_8_BITS               (0x3 <<  6) // (USART) Character Length: 8 bits
  1041. #define AT91C_US_SYNC         (0x1 <<  8) // (USART) Synchronous Mode Select
  1042. #define AT91C_US_NBSTOP       (0x3 << 12) // (USART) Number of Stop bits
  1043. #define  AT91C_US_NBSTOP_1_BIT                (0x0 << 12) // (USART) 1 stop bit
  1044. #define  AT91C_US_NBSTOP_15_BIT               (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits
  1045. #define  AT91C_US_NBSTOP_2_BIT                (0x2 << 12) // (USART) 2 stop bits
  1046. #define AT91C_US_MSBF         (0x1 << 16) // (USART) Bit Order
  1047. #define AT91C_US_MODE9        (0x1 << 17) // (USART) 9-bit Character length
  1048. #define AT91C_US_CKLO         (0x1 << 18) // (USART) Clock Output Select
  1049. #define AT91C_US_OVER         (0x1 << 19) // (USART) Over Sampling Mode
  1050. #define AT91C_US_INACK        (0x1 << 20) // (USART) Inhibit Non Acknowledge
  1051. #define AT91C_US_DSNACK       (0x1 << 21) // (USART) Disable Successive NACK
  1052. #define AT91C_US_MAX_ITER     (0x1 << 24) // (USART) Number of Repetitions
  1053. #define AT91C_US_FILTER       (0x1 << 28) // (USART) Receive Line Filter
  1054. // -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register --------
  1055. #define AT91C_US_RXBRK        (0x1 <<  2) // (USART) Break Received/End of Break
  1056. #define AT91C_US_TIMEOUT      (0x1 <<  8) // (USART) Receiver Time-out
  1057. #define AT91C_US_ITERATION    (0x1 << 10) // (USART) Max number of Repetitions Reached
  1058. #define AT91C_US_NACK         (0x1 << 13) // (USART) Non Acknowledge
  1059. #define AT91C_US_RIIC         (0x1 << 16) // (USART) Ring INdicator Input Change Flag
  1060. #define AT91C_US_DSRIC        (0x1 << 17) // (USART) Data Set Ready Input Change Flag
  1061. #define AT91C_US_DCDIC        (0x1 << 18) // (USART) Data Carrier Flag
  1062. #define AT91C_US_CTSIC        (0x1 << 19) // (USART) Clear To Send Input Change Flag
  1063. // -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register --------
  1064. // -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register --------
  1065. // -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register --------
  1066. #define AT91C_US_RI           (0x1 << 20) // (USART) Image of RI Input
  1067. #define AT91C_US_DSR          (0x1 << 21) // (USART) Image of DSR Input
  1068. #define AT91C_US_DCD          (0x1 << 22) // (USART) Image of DCD Input
  1069. #define AT91C_US_CTS          (0x1 << 23) // (USART) Image of CTS Input
  1070. // *****************************************************************************
  1071. //              SOFTWARE API DEFINITION  FOR Synchronous Serial Controller Interface
  1072. // *****************************************************************************
  1073. #ifndef __ASSEMBLY__
  1074. typedef struct _AT91S_SSC {
  1075. AT91_REG  SSC_CR;  // Control Register
  1076. AT91_REG  SSC_CMR;  // Clock Mode Register
  1077. AT91_REG  Reserved0[2];  //
  1078. AT91_REG  SSC_RCMR;  // Receive Clock ModeRegister
  1079. AT91_REG  SSC_RFMR;  // Receive Frame Mode Register
  1080. AT91_REG  SSC_TCMR;  // Transmit Clock Mode Register
  1081. AT91_REG  SSC_TFMR;  // Transmit Frame Mode Register
  1082. AT91_REG  SSC_RHR;  // Receive Holding Register
  1083. AT91_REG  SSC_THR;  // Transmit Holding Register
  1084. AT91_REG  Reserved1[2];  //
  1085. AT91_REG  SSC_RSHR;  // Receive Sync Holding Register
  1086. AT91_REG  SSC_TSHR;  // Transmit Sync Holding Register
  1087. AT91_REG  Reserved2[2];  //
  1088. AT91_REG  SSC_SR;  // Status Register
  1089. AT91_REG  SSC_IER;  // Interrupt Enable Register
  1090. AT91_REG  SSC_IDR;  // Interrupt Disable Register
  1091. AT91_REG  SSC_IMR;  // Interrupt Mask Register
  1092. AT91_REG  Reserved3[44];  //
  1093. AT91_REG  SSC_RPR;  // Receive Pointer Register
  1094. AT91_REG  SSC_RCR;  // Receive Counter Register
  1095. AT91_REG  SSC_TPR;  // Transmit Pointer Register
  1096. AT91_REG  SSC_TCR;  // Transmit Counter Register
  1097. AT91_REG  SSC_RNPR;  // Receive Next Pointer Register
  1098. AT91_REG  SSC_RNCR;  // Receive Next Counter Register
  1099. AT91_REG  SSC_TNPR;  // Transmit Next Pointer Register
  1100. AT91_REG  SSC_TNCR;  // Transmit Next Counter Register
  1101. AT91_REG  SSC_PTCR;  // PDC Transfer Control Register
  1102. AT91_REG  SSC_PTSR;  // PDC Transfer Status Register
  1103. } AT91S_SSC, *AT91PS_SSC;
  1104. #else
  1105. #define SSC_CR          (AT91_CAST(AT91_REG *)  0x00000000) // (SSC_CR) Control Register
  1106. #define SSC_CMR         (AT91_CAST(AT91_REG *)  0x00000004) // (SSC_CMR) Clock Mode Register
  1107. #define SSC_RCMR        (AT91_CAST(AT91_REG *)  0x00000010) // (SSC_RCMR) Receive Clock ModeRegister
  1108. #define SSC_RFMR        (AT91_CAST(AT91_REG *)  0x00000014) // (SSC_RFMR) Receive Frame Mode Register
  1109. #define SSC_TCMR        (AT91_CAST(AT91_REG *)  0x00000018) // (SSC_TCMR) Transmit Clock Mode Register
  1110. #define SSC_TFMR        (AT91_CAST(AT91_REG *)  0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register
  1111. #define SSC_RHR         (AT91_CAST(AT91_REG *)  0x00000020) // (SSC_RHR) Receive Holding Register
  1112. #define SSC_THR         (AT91_CAST(AT91_REG *)  0x00000024) // (SSC_THR) Transmit Holding Register
  1113. #define SSC_RSHR        (AT91_CAST(AT91_REG *)  0x00000030) // (SSC_RSHR) Receive Sync Holding Register
  1114. #define SSC_TSHR        (AT91_CAST(AT91_REG *)  0x00000034) // (SSC_TSHR) Transmit Sync Holding Register
  1115. #define SSC_SR          (AT91_CAST(AT91_REG *)  0x00000040) // (SSC_SR) Status Register
  1116. #define SSC_IER         (AT91_CAST(AT91_REG *)  0x00000044) // (SSC_IER) Interrupt Enable Register
  1117. #define SSC_IDR         (AT91_CAST(AT91_REG *)  0x00000048) // (SSC_IDR) Interrupt Disable Register
  1118. #define SSC_IMR         (AT91_CAST(AT91_REG *)  0x0000004C) // (SSC_IMR) Interrupt Mask Register
  1119. #endif
  1120. // -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register --------
  1121. #define AT91C_SSC_RXEN        (0x1 <<  0) // (SSC) Receive Enable
  1122. #define AT91C_SSC_RXDIS       (0x1 <<  1) // (SSC) Receive Disable
  1123. #define AT91C_SSC_TXEN        (0x1 <<  8) // (SSC) Transmit Enable
  1124. #define AT91C_SSC_TXDIS       (0x1 <<  9) // (SSC) Transmit Disable
  1125. #define AT91C_SSC_SWRST       (0x1 << 15) // (SSC) Software Reset
  1126. // -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register --------
  1127. #define AT91C_SSC_CKS         (0x3 <<  0) // (SSC) Receive/Transmit Clock Selection
  1128. #define  AT91C_SSC_CKS_DIV                  (0x0) // (SSC) Divided Clock
  1129. #define  AT91C_SSC_CKS_TK                   (0x1) // (SSC) TK Clock signal
  1130. #define  AT91C_SSC_CKS_RK                   (0x2) // (SSC) RK pin
  1131. #define AT91C_SSC_CKO         (0x7 <<  2) // (SSC) Receive/Transmit Clock Output Mode Selection
  1132. #define  AT91C_SSC_CKO_NONE                 (0x0 <<  2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only
  1133. #define  AT91C_SSC_CKO_CONTINOUS            (0x1 <<  2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output
  1134. #define  AT91C_SSC_CKO_DATA_TX              (0x2 <<  2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output
  1135. #define AT91C_SSC_CKI         (0x1 <<  5) // (SSC) Receive/Transmit Clock Inversion
  1136. #define AT91C_SSC_CKG         (0x3 <<  6) // (SSC) Receive/Transmit Clock Gating Selection
  1137. #define  AT91C_SSC_CKG_NONE                 (0x0 <<  6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock
  1138. #define  AT91C_SSC_CKG_LOW                  (0x1 <<  6) // (SSC) Receive/Transmit Clock enabled only if RF Low
  1139. #define  AT91C_SSC_CKG_HIGH                 (0x2 <<  6) // (SSC) Receive/Transmit Clock enabled only if RF High
  1140. #define AT91C_SSC_START       (0xF <<  8) // (SSC) Receive/Transmit Start Selection
  1141. #define  AT91C_SSC_START_CONTINOUS            (0x0 <<  8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data.
  1142. #define  AT91C_SSC_START_TX                   (0x1 <<  8) // (SSC) Transmit/Receive start
  1143. #define  AT91C_SSC_START_LOW_RF               (0x2 <<  8) // (SSC) Detection of a low level on RF input
  1144. #define  AT91C_SSC_START_HIGH_RF              (0x3 <<  8) // (SSC) Detection of a high level on RF input
  1145. #define  AT91C_SSC_START_FALL_RF              (0x4 <<  8) // (SSC) Detection of a falling edge on RF input
  1146. #define  AT91C_SSC_START_RISE_RF              (0x5 <<  8) // (SSC) Detection of a rising edge on RF input
  1147. #define  AT91C_SSC_START_LEVEL_RF             (0x6 <<  8) // (SSC) Detection of any level change on RF input
  1148. #define  AT91C_SSC_START_EDGE_RF              (0x7 <<  8) // (SSC) Detection of any edge on RF input
  1149. #define  AT91C_SSC_START_0                    (0x8 <<  8) // (SSC) Compare 0
  1150. #define AT91C_SSC_STOP        (0x1 << 12) // (SSC) Receive Stop Selection
  1151. #define AT91C_SSC_STTDLY      (0xFF << 16) // (SSC) Receive/Transmit Start Delay
  1152. #define AT91C_SSC_PERIOD      (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection
  1153. // -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register --------
  1154. #define AT91C_SSC_DATLEN      (0x1F <<  0) // (SSC) Data Length
  1155. #define AT91C_SSC_LOOP        (0x1 <<  5) // (SSC) Loop Mode
  1156. #define AT91C_SSC_MSBF        (0x1 <<  7) // (SSC) Most Significant Bit First
  1157. #define AT91C_SSC_DATNB       (0xF <<  8) // (SSC) Data Number per Frame
  1158. #define AT91C_SSC_FSLEN       (0xF << 16) // (SSC) Receive/Transmit Frame Sync length
  1159. #define AT91C_SSC_FSOS        (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection
  1160. #define  AT91C_SSC_FSOS_NONE                 (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only
  1161. #define  AT91C_SSC_FSOS_NEGATIVE             (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse
  1162. #define  AT91C_SSC_FSOS_POSITIVE             (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse
  1163. #define  AT91C_SSC_FSOS_LOW                  (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer
  1164. #define  AT91C_SSC_FSOS_HIGH                 (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer
  1165. #define  AT91C_SSC_FSOS_TOGGLE               (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer
  1166. #define AT91C_SSC_FSEDGE      (0x1 << 24) // (SSC) Frame Sync Edge Detection
  1167. // -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register --------
  1168. // -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register --------
  1169. #define AT91C_SSC_DATDEF      (0x1 <<  5) // (SSC) Data Default Value
  1170. #define AT91C_SSC_FSDEN       (0x1 << 23) // (SSC) Frame Sync Data Enable
  1171. // -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register --------
  1172. #define AT91C_SSC_TXRDY       (0x1 <<  0) // (SSC) Transmit Ready
  1173. #define AT91C_SSC_TXEMPTY     (0x1 <<  1) // (SSC) Transmit Empty
  1174. #define AT91C_SSC_ENDTX       (0x1 <<  2) // (SSC) End Of Transmission
  1175. #define AT91C_SSC_TXBUFE      (0x1 <<  3) // (SSC) Transmit Buffer Empty
  1176. #define AT91C_SSC_RXRDY       (0x1 <<  4) // (SSC) Receive Ready
  1177. #define AT91C_SSC_OVRUN       (0x1 <<  5) // (SSC) Receive Overrun
  1178. #define AT91C_SSC_ENDRX       (0x1 <<  6) // (SSC) End of Reception
  1179. #define AT91C_SSC_RXBUFF      (0x1 <<  7) // (SSC) Receive Buffer Full
  1180. #define AT91C_SSC_CP0         (0x1 <<  8) // (SSC) Compare 0
  1181. #define AT91C_SSC_CP1         (0x1 <<  9) // (SSC) Compare 1
  1182. #define AT91C_SSC_TXSYN       (0x1 << 10) // (SSC) Transmit Sync
  1183. #define AT91C_SSC_RXSYN       (0x1 << 11) // (SSC) Receive Sync
  1184. #define AT91C_SSC_TXENA       (0x1 << 16) // (SSC) Transmit Enable
  1185. #define AT91C_SSC_RXENA       (0x1 << 17) // (SSC) Receive Enable
  1186. // -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register --------
  1187. // -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register --------
  1188. // -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register --------
  1189. // *****************************************************************************
  1190. //              SOFTWARE API DEFINITION  FOR Two-wire Interface
  1191. // *****************************************************************************
  1192. #ifndef __ASSEMBLY__
  1193. typedef struct _AT91S_TWI {
  1194. AT91_REG  TWI_CR;  // Control Register
  1195. AT91_REG  TWI_MMR;  // Master Mode Register
  1196. AT91_REG  Reserved0[1];  //
  1197. AT91_REG  TWI_IADR;  // Internal Address Register
  1198. AT91_REG  TWI_CWGR;  // Clock Waveform Generator Register
  1199. AT91_REG  Reserved1[3];  //
  1200. AT91_REG  TWI_SR;  // Status Register
  1201. AT91_REG  TWI_IER;  // Interrupt Enable Register
  1202. AT91_REG  TWI_IDR;  // Interrupt Disable Register
  1203. AT91_REG  TWI_IMR;  // Interrupt Mask Register
  1204. AT91_REG  TWI_RHR;  // Receive Holding Register
  1205. AT91_REG  TWI_THR;  // Transmit Holding Register
  1206. AT91_REG  Reserved2[50];  //
  1207. AT91_REG  TWI_RPR;  // Receive Pointer Register
  1208. AT91_REG  TWI_RCR;  // Receive Counter Register
  1209. AT91_REG  TWI_TPR;  // Transmit Pointer Register
  1210. AT91_REG  TWI_TCR;  // Transmit Counter Register
  1211. AT91_REG  TWI_RNPR;  // Receive Next Pointer Register
  1212. AT91_REG  TWI_RNCR;  // Receive Next Counter Register
  1213. AT91_REG  TWI_TNPR;  // Transmit Next Pointer Register
  1214. AT91_REG  TWI_TNCR;  // Transmit Next Counter Register
  1215. AT91_REG  TWI_PTCR;  // PDC Transfer Control Register
  1216. AT91_REG  TWI_PTSR;  // PDC Transfer Status Register
  1217. } AT91S_TWI, *AT91PS_TWI;
  1218. #else
  1219. #define TWI_CR          (AT91_CAST(AT91_REG *)  0x00000000) // (TWI_CR) Control Register
  1220. #define TWI_MMR         (AT91_CAST(AT91_REG *)  0x00000004) // (TWI_MMR) Master Mode Register
  1221. #define TWI_IADR        (AT91_CAST(AT91_REG *)  0x0000000C) // (TWI_IADR) Internal Address Register
  1222. #define TWI_CWGR        (AT91_CAST(AT91_REG *)  0x00000010) // (TWI_CWGR) Clock Waveform Generator Register
  1223. #define TWI_SR          (AT91_CAST(AT91_REG *)  0x00000020) // (TWI_SR) Status Register
  1224. #define TWI_IER         (AT91_CAST(AT91_REG *)  0x00000024) // (TWI_IER) Interrupt Enable Register
  1225. #define TWI_IDR         (AT91_CAST(AT91_REG *)  0x00000028) // (TWI_IDR) Interrupt Disable Register
  1226. #define TWI_IMR         (AT91_CAST(AT91_REG *)  0x0000002C) // (TWI_IMR) Interrupt Mask Register
  1227. #define TWI_RHR         (AT91_CAST(AT91_REG *)  0x00000030) // (TWI_RHR) Receive Holding Register
  1228. #define TWI_THR         (AT91_CAST(AT91_REG *)  0x00000034) // (TWI_THR) Transmit Holding Register
  1229. #endif
  1230. // -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register --------
  1231. #define AT91C_TWI_START       (0x1 <<  0) // (TWI) Send a START Condition
  1232. #define AT91C_TWI_STOP        (0x1 <<  1) // (TWI) Send a STOP Condition
  1233. #define AT91C_TWI_MSEN        (0x1 <<  2) // (TWI) TWI Master Transfer Enabled
  1234. #define AT91C_TWI_MSDIS       (0x1 <<  3) // (TWI) TWI Master Transfer Disabled
  1235. #define AT91C_TWI_SWRST       (0x1 <<  7) // (TWI) Software Reset
  1236. // -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register --------
  1237. #define AT91C_TWI_IADRSZ      (0x3 <<  8) // (TWI) Internal Device Address Size
  1238. #define  AT91C_TWI_IADRSZ_NO                   (0x0 <<  8) // (TWI) No internal device address
  1239. #define  AT91C_TWI_IADRSZ_1_BYTE               (0x1 <<  8) // (TWI) One-byte internal device address
  1240. #define  AT91C_TWI_IADRSZ_2_BYTE               (0x2 <<  8) // (TWI) Two-byte internal device address
  1241. #define  AT91C_TWI_IADRSZ_3_BYTE               (0x3 <<  8) // (TWI) Three-byte internal device address
  1242. #define AT91C_TWI_MREAD       (0x1 << 12) // (TWI) Master Read Direction
  1243. #define AT91C_TWI_DADR        (0x7F << 16) // (TWI) Device Address
  1244. // -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register --------
  1245. #define AT91C_TWI_CLDIV       (0xFF <<  0) // (TWI) Clock Low Divider
  1246. #define AT91C_TWI_CHDIV       (0xFF <<  8) // (TWI) Clock High Divider
  1247. #define AT91C_TWI_CKDIV       (0x7 << 16) // (TWI) Clock Divider
  1248. // -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register --------
  1249. #define AT91C_TWI_TXCOMP      (0x1 <<  0) // (TWI) Transmission Completed
  1250. #define AT91C_TWI_RXRDY       (0x1 <<  1) // (TWI) Receive holding register ReaDY
  1251. #define AT91C_TWI_TXRDY       (0x1 <<  2) // (TWI) Transmit holding register ReaDY
  1252. #define AT91C_TWI_OVRE        (0x1 <<  6) // (TWI) Overrun Error
  1253. #define AT91C_TWI_UNRE        (0x1 <<  7) // (TWI) Underrun Error
  1254. #define AT91C_TWI_NACK        (0x1 <<  8) // (TWI) Not Acknowledged
  1255. #define AT91C_TWI_ENDRX       (0x1 << 12) // (TWI)
  1256. #define AT91C_TWI_ENDTX       (0x1 << 13) // (TWI)
  1257. #define AT91C_TWI_RXBUFF      (0x1 << 14) // (TWI)
  1258. #define AT91C_TWI_TXBUFE      (0x1 << 15) // (TWI)
  1259. // -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register --------
  1260. // -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register --------
  1261. // -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register --------
  1262. // *****************************************************************************
  1263. //              SOFTWARE API DEFINITION  FOR PWMC Channel Interface
  1264. // *****************************************************************************
  1265. #ifndef __ASSEMBLY__
  1266. typedef struct _AT91S_PWMC_CH {
  1267. AT91_REG  PWMC_CMR;  // Channel Mode Register
  1268. AT91_REG  PWMC_CDTYR;  // Channel Duty Cycle Register
  1269. AT91_REG  PWMC_CPRDR;  // Channel Period Register
  1270. AT91_REG  PWMC_CCNTR;  // Channel Counter Register
  1271. AT91_REG  PWMC_CUPDR;  // Channel Update Register
  1272. AT91_REG  PWMC_Reserved[3];  // Reserved
  1273. } AT91S_PWMC_CH, *AT91PS_PWMC_CH;
  1274. #else
  1275. #define PWMC_CMR        (AT91_CAST(AT91_REG *)  0x00000000) // (PWMC_CMR) Channel Mode Register
  1276. #define PWMC_CDTYR      (AT91_CAST(AT91_REG *)  0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register
  1277. #define PWMC_CPRDR      (AT91_CAST(AT91_REG *)  0x00000008) // (PWMC_CPRDR) Channel Period Register
  1278. #define PWMC_CCNTR      (AT91_CAST(AT91_REG *)  0x0000000C) // (PWMC_CCNTR) Channel Counter Register
  1279. #define PWMC_CUPDR      (AT91_CAST(AT91_REG *)  0x00000010) // (PWMC_CUPDR) Channel Update Register
  1280. #define Reserved        (AT91_CAST(AT91_REG *)  0x00000014) // (Reserved) Reserved
  1281. #endif
  1282. // -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register --------
  1283. #define AT91C_PWMC_CPRE       (0xF <<  0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx
  1284. #define  AT91C_PWMC_CPRE_MCK                  (0x0) // (PWMC_CH)
  1285. #define  AT91C_PWMC_CPRE_MCKA                 (0xB) // (PWMC_CH)
  1286. #define  AT91C_PWMC_CPRE_MCKB                 (0xC) // (PWMC_CH)
  1287. #define AT91C_PWMC_CALG       (0x1 <<  8) // (PWMC_CH) Channel Alignment
  1288. #define AT91C_PWMC_CPOL       (0x1 <<  9) // (PWMC_CH) Channel Polarity
  1289. #define AT91C_PWMC_CPD        (0x1 << 10) // (PWMC_CH) Channel Update Period
  1290. // -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register --------
  1291. #define AT91C_PWMC_CDTY       (0x0 <<  0) // (PWMC_CH) Channel Duty Cycle
  1292. // -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register --------
  1293. #define AT91C_PWMC_CPRD       (0x0 <<  0) // (PWMC_CH) Channel Period
  1294. // -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register --------
  1295. #define AT91C_PWMC_CCNT       (0x0 <<  0) // (PWMC_CH) Channel Counter
  1296. // -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register --------
  1297. #define AT91C_PWMC_CUPD       (0x0 <<  0) // (PWMC_CH) Channel Update
  1298. // *****************************************************************************
  1299. //              SOFTWARE API DEFINITION  FOR Pulse Width Modulation Controller Interface
  1300. // *****************************************************************************
  1301. #ifndef __ASSEMBLY__
  1302. typedef struct _AT91S_PWMC {
  1303. AT91_REG  PWMC_MR;  // PWMC Mode Register
  1304. AT91_REG  PWMC_ENA;  // PWMC Enable Register
  1305. AT91_REG  PWMC_DIS;  // PWMC Disable Register
  1306. AT91_REG  PWMC_SR;  // PWMC Status Register
  1307. AT91_REG  PWMC_IER;  // PWMC Interrupt Enable Register
  1308. AT91_REG  PWMC_IDR;  // PWMC Interrupt Disable Register
  1309. AT91_REG  PWMC_IMR;  // PWMC Interrupt Mask Register
  1310. AT91_REG  PWMC_ISR;  // PWMC Interrupt Status Register
  1311. AT91_REG  Reserved0[55];  //
  1312. AT91_REG  PWMC_VR;  // PWMC Version Register
  1313. AT91_REG  Reserved1[64];  //
  1314. AT91S_PWMC_CH  PWMC_CH[4];  // PWMC Channel
  1315. } AT91S_PWMC, *AT91PS_PWMC;
  1316. #else
  1317. #define PWMC_MR         (AT91_CAST(AT91_REG *)  0x00000000) // (PWMC_MR) PWMC Mode Register
  1318. #define PWMC_ENA        (AT91_CAST(AT91_REG *)  0x00000004) // (PWMC_ENA) PWMC Enable Register
  1319. #define PWMC_DIS        (AT91_CAST(AT91_REG *)  0x00000008) // (PWMC_DIS) PWMC Disable Register
  1320. #define PWMC_SR         (AT91_CAST(AT91_REG *)  0x0000000C) // (PWMC_SR) PWMC Status Register
  1321. #define PWMC_IER        (AT91_CAST(AT91_REG *)  0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register
  1322. #define PWMC_IDR        (AT91_CAST(AT91_REG *)  0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register
  1323. #define PWMC_IMR        (AT91_CAST(AT91_REG *)  0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register
  1324. #define PWMC_ISR        (AT91_CAST(AT91_REG *)  0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register
  1325. #define PWMC_VR         (AT91_CAST(AT91_REG *)  0x000000FC) // (PWMC_VR) PWMC Version Register
  1326. #endif
  1327. // -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register --------
  1328. #define AT91C_PWMC_DIVA       (0xFF <<  0) // (PWMC) CLKA divide factor.
  1329. #define AT91C_PWMC_PREA       (0xF <<  8) // (PWMC) Divider Input Clock Prescaler A
  1330. #define  AT91C_PWMC_PREA_MCK                  (0x0 <<  8) // (PWMC)
  1331. #define AT91C_PWMC_DIVB       (0xFF << 16) // (PWMC) CLKB divide factor.
  1332. #define AT91C_PWMC_PREB       (0xF << 24) // (PWMC) Divider Input Clock Prescaler B
  1333. #define  AT91C_PWMC_PREB_MCK                  (0x0 << 24) // (PWMC)
  1334. // -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register --------
  1335. #define AT91C_PWMC_CHID0      (0x1 <<  0) // (PWMC) Channel ID 0
  1336. #define AT91C_PWMC_CHID1      (0x1 <<  1) // (PWMC) Channel ID 1
  1337. #define AT91C_PWMC_CHID2      (0x1 <<  2) // (PWMC) Channel ID 2
  1338. #define AT91C_PWMC_CHID3      (0x1 <<  3) // (PWMC) Channel ID 3
  1339. // -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register --------
  1340. // -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register --------
  1341. // -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register --------
  1342. // -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register --------
  1343. // -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register --------
  1344. // -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register --------
  1345. // *****************************************************************************
  1346. //              SOFTWARE API DEFINITION  FOR USB Device Interface
  1347. // *****************************************************************************
  1348. #ifndef __ASSEMBLY__
  1349. typedef struct _AT91S_UDP {
  1350. AT91_REG  UDP_NUM;  // Frame Number Register
  1351. AT91_REG  UDP_GLBSTATE;  // Global State Register
  1352. AT91_REG  UDP_FADDR;  // Function Address Register
  1353. AT91_REG  Reserved0[1];  //
  1354. AT91_REG  UDP_IER;  // Interrupt Enable Register
  1355. AT91_REG  UDP_IDR;  // Interrupt Disable Register
  1356. AT91_REG  UDP_IMR;  // Interrupt Mask Register
  1357. AT91_REG  UDP_ISR;  // Interrupt Status Register
  1358. AT91_REG  UDP_ICR;  // Interrupt Clear Register
  1359. AT91_REG  Reserved1[1];  //
  1360. AT91_REG  UDP_RSTEP;  // Reset Endpoint Register
  1361. AT91_REG  Reserved2[1];  //
  1362. AT91_REG  UDP_CSR[6];  // Endpoint Control and Status Register
  1363. AT91_REG  Reserved3[2];  //
  1364. AT91_REG  UDP_FDR[6];  // Endpoint FIFO Data Register
  1365. AT91_REG  Reserved4[3];  //
  1366. AT91_REG  UDP_TXVC;  // Transceiver Control Register
  1367. } AT91S_UDP, *AT91PS_UDP;
  1368. #else
  1369. #define UDP_FRM_NUM     (AT91_CAST(AT91_REG *)  0x00000000) // (UDP_FRM_NUM) Frame Number Register
  1370. #define UDP_GLBSTATE    (AT91_CAST(AT91_REG *)  0x00000004) // (UDP_GLBSTATE) Global State Register
  1371. #define UDP_FADDR       (AT91_CAST(AT91_REG *)  0x00000008) // (UDP_FADDR) Function Address Register
  1372. #define UDP_IER         (AT91_CAST(AT91_REG *)  0x00000010) // (UDP_IER) Interrupt Enable Register
  1373. #define UDP_IDR         (AT91_CAST(AT91_REG *)  0x00000014) // (UDP_IDR) Interrupt Disable Register
  1374. #define UDP_IMR         (AT91_CAST(AT91_REG *)  0x00000018) // (UDP_IMR) Interrupt Mask Register
  1375. #define UDP_ISR         (AT91_CAST(AT91_REG *)  0x0000001C) // (UDP_ISR) Interrupt Status Register
  1376. #define UDP_ICR         (AT91_CAST(AT91_REG *)  0x00000020) // (UDP_ICR) Interrupt Clear Register
  1377. #define UDP_RSTEP       (AT91_CAST(AT91_REG *)  0x00000028) // (UDP_RSTEP) Reset Endpoint Register
  1378. #define UDP_CSR         (AT91_CAST(AT91_REG *)  0x00000030) // (UDP_CSR) Endpoint Control and Status Register
  1379. #define UDP_FDR         (AT91_CAST(AT91_REG *)  0x00000050) // (UDP_FDR) Endpoint FIFO Data Register
  1380. #define UDP_TXVC        (AT91_CAST(AT91_REG *)  0x00000074) // (UDP_TXVC) Transceiver Control Register
  1381. #endif
  1382. // -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register --------
  1383. #define AT91C_UDP_FRM_NUM     (0x7FF <<  0) // (UDP) Frame Number as Defined in the Packet Field Formats
  1384. #define AT91C_UDP_FRM_ERR     (0x1 << 16) // (UDP) Frame Error
  1385. #define AT91C_UDP_FRM_OK      (0x1 << 17) // (UDP) Frame OK
  1386. // -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register --------
  1387. #define AT91C_UDP_FADDEN      (0x1 <<  0) // (UDP) Function Address Enable
  1388. #define AT91C_UDP_CONFG       (0x1 <<  1) // (UDP) Configured
  1389. #define AT91C_UDP_ESR         (0x1 <<  2) // (UDP) Enable Send Resume
  1390. #define AT91C_UDP_RSMINPR     (0x1 <<  3) // (UDP) A Resume Has Been Sent to the Host
  1391. #define AT91C_UDP_RMWUPE      (0x1 <<  4) // (UDP) Remote Wake Up Enable
  1392. // -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register --------
  1393. #define AT91C_UDP_FADD        (0xFF <<  0) // (UDP) Function Address Value
  1394. #define AT91C_UDP_FEN         (0x1 <<  8) // (UDP) Function Enable
  1395. // -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register --------
  1396. #define AT91C_UDP_EPINT0      (0x1 <<  0) // (UDP) Endpoint 0 Interrupt
  1397. #define AT91C_UDP_EPINT1      (0x1 <<  1) // (UDP) Endpoint 0 Interrupt
  1398. #define AT91C_UDP_EPINT2      (0x1 <<  2) // (UDP) Endpoint 2 Interrupt
  1399. #define AT91C_UDP_EPINT3      (0x1 <<  3) // (UDP) Endpoint 3 Interrupt
  1400. #define AT91C_UDP_EPINT4      (0x1 <<  4) // (UDP) Endpoint 4 Interrupt
  1401. #define AT91C_UDP_EPINT5      (0x1 <<  5) // (UDP) Endpoint 5 Interrupt
  1402. #define AT91C_UDP_RXSUSP      (0x1 <<  8) // (UDP) USB Suspend Interrupt
  1403. #define AT91C_UDP_RXRSM       (0x1 <<  9) // (UDP) USB Resume Interrupt
  1404. #define AT91C_UDP_EXTRSM      (0x1 << 10) // (UDP) USB External Resume Interrupt
  1405. #define AT91C_UDP_SOFINT      (0x1 << 11) // (UDP) USB Start Of frame Interrupt
  1406. #define AT91C_UDP_WAKEUP      (0x1 << 13) // (UDP) USB Resume Interrupt
  1407. // -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register --------
  1408. // -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register --------
  1409. // -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register --------
  1410. #define AT91C_UDP_ENDBUSRES   (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt
  1411. // -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register --------
  1412. // -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register --------
  1413. #define AT91C_UDP_EP0         (0x1 <<  0) // (UDP) Reset Endpoint 0
  1414. #define AT91C_UDP_EP1         (0x1 <<  1) // (UDP) Reset Endpoint 1
  1415. #define AT91C_UDP_EP2         (0x1 <<  2) // (UDP) Reset Endpoint 2
  1416. #define AT91C_UDP_EP3         (0x1 <<  3) // (UDP) Reset Endpoint 3
  1417. #define AT91C_UDP_EP4         (0x1 <<  4) // (UDP) Reset Endpoint 4
  1418. #define AT91C_UDP_EP5         (0x1 <<  5) // (UDP) Reset Endpoint 5
  1419. // -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register --------
  1420. #define AT91C_UDP_TXCOMP      (0x1 <<  0) // (UDP) Generates an IN packet with data previously written in the DPR
  1421. #define AT91C_UDP_RX_DATA_BK0 (0x1 <<  1) // (UDP) Receive Data Bank 0
  1422. #define AT91C_UDP_RXSETUP     (0x1 <<  2) // (UDP) Sends STALL to the Host (Control endpoints)
  1423. #define AT91C_UDP_ISOERROR    (0x1 <<  3) // (UDP) Isochronous error (Isochronous endpoints)
  1424. #define AT91C_UDP_STALLSENT   (0x1 <<  3) // (UDP) Stall sent (Control, bulk, interrupt endpoints)
  1425. #define AT91C_UDP_TXPKTRDY    (0x1 <<  4) // (UDP) Transmit Packet Ready
  1426. #define AT91C_UDP_FORCESTALL  (0x1 <<  5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints).
  1427. #define AT91C_UDP_RX_DATA_BK1 (0x1 <<  6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes).
  1428. #define AT91C_UDP_DIR         (0x1 <<  7) // (UDP) Transfer Direction
  1429. #define AT91C_UDP_EPTYPE      (0x7 <<  8) // (UDP) Endpoint type
  1430. #define  AT91C_UDP_EPTYPE_CTRL                 (0x0 <<  8) // (UDP) Control
  1431. #define  AT91C_UDP_EPTYPE_ISO_OUT              (0x1 <<  8) // (UDP) Isochronous OUT
  1432. #define  AT91C_UDP_EPTYPE_BULK_OUT             (0x2 <<  8) // (UDP) Bulk OUT
  1433. #define  AT91C_UDP_EPTYPE_INT_OUT              (0x3 <<  8) // (UDP) Interrupt OUT
  1434. #define  AT91C_UDP_EPTYPE_ISO_IN               (0x5 <<  8) // (UDP) Isochronous IN
  1435. #define  AT91C_UDP_EPTYPE_BULK_IN              (0x6 <<  8) // (UDP) Bulk IN
  1436. #define  AT91C_UDP_EPTYPE_INT_IN               (0x7 <<  8) // (UDP) Interrupt IN
  1437. #define AT91C_UDP_DTGLE       (0x1 << 11) // (UDP) Data Toggle
  1438. #define AT91C_UDP_EPEDS       (0x1 << 15) // (UDP) Endpoint Enable Disable
  1439. #define AT91C_UDP_RXBYTECNT   (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO
  1440. // -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register --------
  1441. #define AT91C_UDP_TXVDIS      (0x1 <<  8) // (UDP)
  1442. // *****************************************************************************
  1443. //              SOFTWARE API DEFINITION  FOR Timer Counter Channel Interface
  1444. // *****************************************************************************
  1445. #ifndef __ASSEMBLY__
  1446. typedef struct _AT91S_TC {
  1447. AT91_REG  TC_CCR;  // Channel Control Register
  1448. AT91_REG  TC_CMR;  // Channel Mode Register (Capture Mode / Waveform Mode)