AT91SAM7X128.h
上传用户:xukun0987
上传日期:2022-07-16
资源大小:216k
文件大小:208k
- // ----------------------------------------------------------------------------
- // ATMEL Microcontroller Software Support - ROUSSET -
- // ----------------------------------------------------------------------------
- // Copyright (c) 2006, Atmel Corporation
- //
- // All rights reserved.
- //
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions are met:
- //
- // - Redistributions of source code must retain the above copyright notice,
- // this list of conditions and the disclaimer below.
- //
- // Atmel's name may not be used to endorse or promote products derived from
- // this software without specific prior written permission.
- //
- // DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
- // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- // DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
- // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- // ----------------------------------------------------------------------------
- // File Name : AT91SAM7X128.h
- // Object : AT91SAM7X128 definitions
- // Generated : AT91 SW Application Group 07/07/2008 (16:15:23)
- //
- // CVS Reference : /AT91SAM7X128.pl/1.19/Wed Aug 30 14:09:08 2006//
- // CVS Reference : /SYS_SAM7X.pl/1.3/Wed Feb 2 15:48:15 2005//
- // CVS Reference : /MC_SAM7X.pl/1.2/Fri May 20 14:22:29 2005//
- // CVS Reference : /PMC_SAM7X.pl/1.4/Tue Feb 8 14:00:19 2005//
- // CVS Reference : /RSTC_SAM7X.pl/1.2/Wed Jul 13 15:25:17 2005//
- // CVS Reference : /UDP_6ept.pl/1.1/Wed Aug 30 10:56:49 2006//
- // CVS Reference : /PWM_SAM7X.pl/1.1/Tue May 10 12:38:54 2005//
- // CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:21:42 2005//
- // CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:29:42 2005//
- // CVS Reference : /RTTC_6081A.pl/1.2/Thu Nov 4 13:57:22 2004//
- // CVS Reference : /PITC_6079A.pl/1.2/Thu Nov 4 13:56:22 2004//
- // CVS Reference : /WDTC_6080A.pl/1.3/Thu Nov 4 13:58:52 2004//
- // CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:40:38 2005//
- // CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 09:02:11 2005//
- // CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:54:41 2005//
- // CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:23:02 2005//
- // CVS Reference : /US_6089C.pl/1.1/Mon Jan 31 13:56:02 2005//
- // CVS Reference : /SSC_6078B.pl/1.2/Wed Apr 16 08:28:18 2008//
- // CVS Reference : /TWI_6061A.pl/1.2/Fri Oct 27 11:40:48 2006//
- // CVS Reference : /TC_6082A.pl/1.7/Wed Mar 9 16:31:51 2005//
- // CVS Reference : /CAN_6019B.pl/1.1/Mon Jan 31 13:54:30 2005//
- // CVS Reference : /EMACB_6119A.pl/1.6/Wed Jul 13 15:25:00 2005//
- // CVS Reference : /ADC_6051C.pl/1.1/Mon Jan 31 13:12:40 2005//
- // ----------------------------------------------------------------------------
- #ifndef AT91SAM7X128_H
- #define AT91SAM7X128_H
- #ifndef __ASSEMBLY__
- typedef volatile unsigned int AT91_REG;// Hardware register definition
- #define AT91_CAST(a) (a)
- #else
- #define AT91_CAST(a)
- #endif
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR System Peripherals
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_SYS {
- AT91_REG AIC_SMR[32]; // Source Mode Register
- AT91_REG AIC_SVR[32]; // Source Vector Register
- AT91_REG AIC_IVR; // IRQ Vector Register
- AT91_REG AIC_FVR; // FIQ Vector Register
- AT91_REG AIC_ISR; // Interrupt Status Register
- AT91_REG AIC_IPR; // Interrupt Pending Register
- AT91_REG AIC_IMR; // Interrupt Mask Register
- AT91_REG AIC_CISR; // Core Interrupt Status Register
- AT91_REG Reserved0[2]; //
- AT91_REG AIC_IECR; // Interrupt Enable Command Register
- AT91_REG AIC_IDCR; // Interrupt Disable Command Register
- AT91_REG AIC_ICCR; // Interrupt Clear Command Register
- AT91_REG AIC_ISCR; // Interrupt Set Command Register
- AT91_REG AIC_EOICR; // End of Interrupt Command Register
- AT91_REG AIC_SPU; // Spurious Vector Register
- AT91_REG AIC_DCR; // Debug Control Register (Protect)
- AT91_REG Reserved1[1]; //
- AT91_REG AIC_FFER; // Fast Forcing Enable Register
- AT91_REG AIC_FFDR; // Fast Forcing Disable Register
- AT91_REG AIC_FFSR; // Fast Forcing Status Register
- AT91_REG Reserved2[45]; //
- AT91_REG DBGU_CR; // Control Register
- AT91_REG DBGU_MR; // Mode Register
- AT91_REG DBGU_IER; // Interrupt Enable Register
- AT91_REG DBGU_IDR; // Interrupt Disable Register
- AT91_REG DBGU_IMR; // Interrupt Mask Register
- AT91_REG DBGU_CSR; // Channel Status Register
- AT91_REG DBGU_RHR; // Receiver Holding Register
- AT91_REG DBGU_THR; // Transmitter Holding Register
- AT91_REG DBGU_BRGR; // Baud Rate Generator Register
- AT91_REG Reserved3[7]; //
- AT91_REG DBGU_CIDR; // Chip ID Register
- AT91_REG DBGU_EXID; // Chip ID Extension Register
- AT91_REG DBGU_FNTR; // Force NTRST Register
- AT91_REG Reserved4[45]; //
- AT91_REG DBGU_RPR; // Receive Pointer Register
- AT91_REG DBGU_RCR; // Receive Counter Register
- AT91_REG DBGU_TPR; // Transmit Pointer Register
- AT91_REG DBGU_TCR; // Transmit Counter Register
- AT91_REG DBGU_RNPR; // Receive Next Pointer Register
- AT91_REG DBGU_RNCR; // Receive Next Counter Register
- AT91_REG DBGU_TNPR; // Transmit Next Pointer Register
- AT91_REG DBGU_TNCR; // Transmit Next Counter Register
- AT91_REG DBGU_PTCR; // PDC Transfer Control Register
- AT91_REG DBGU_PTSR; // PDC Transfer Status Register
- AT91_REG Reserved5[54]; //
- AT91_REG PIOA_PER; // PIO Enable Register
- AT91_REG PIOA_PDR; // PIO Disable Register
- AT91_REG PIOA_PSR; // PIO Status Register
- AT91_REG Reserved6[1]; //
- AT91_REG PIOA_OER; // Output Enable Register
- AT91_REG PIOA_ODR; // Output Disable Registerr
- AT91_REG PIOA_OSR; // Output Status Register
- AT91_REG Reserved7[1]; //
- AT91_REG PIOA_IFER; // Input Filter Enable Register
- AT91_REG PIOA_IFDR; // Input Filter Disable Register
- AT91_REG PIOA_IFSR; // Input Filter Status Register
- AT91_REG Reserved8[1]; //
- AT91_REG PIOA_SODR; // Set Output Data Register
- AT91_REG PIOA_CODR; // Clear Output Data Register
- AT91_REG PIOA_ODSR; // Output Data Status Register
- AT91_REG PIOA_PDSR; // Pin Data Status Register
- AT91_REG PIOA_IER; // Interrupt Enable Register
- AT91_REG PIOA_IDR; // Interrupt Disable Register
- AT91_REG PIOA_IMR; // Interrupt Mask Register
- AT91_REG PIOA_ISR; // Interrupt Status Register
- AT91_REG PIOA_MDER; // Multi-driver Enable Register
- AT91_REG PIOA_MDDR; // Multi-driver Disable Register
- AT91_REG PIOA_MDSR; // Multi-driver Status Register
- AT91_REG Reserved9[1]; //
- AT91_REG PIOA_PPUDR; // Pull-up Disable Register
- AT91_REG PIOA_PPUER; // Pull-up Enable Register
- AT91_REG PIOA_PPUSR; // Pull-up Status Register
- AT91_REG Reserved10[1]; //
- AT91_REG PIOA_ASR; // Select A Register
- AT91_REG PIOA_BSR; // Select B Register
- AT91_REG PIOA_ABSR; // AB Select Status Register
- AT91_REG Reserved11[9]; //
- AT91_REG PIOA_OWER; // Output Write Enable Register
- AT91_REG PIOA_OWDR; // Output Write Disable Register
- AT91_REG PIOA_OWSR; // Output Write Status Register
- AT91_REG Reserved12[85]; //
- AT91_REG PIOB_PER; // PIO Enable Register
- AT91_REG PIOB_PDR; // PIO Disable Register
- AT91_REG PIOB_PSR; // PIO Status Register
- AT91_REG Reserved13[1]; //
- AT91_REG PIOB_OER; // Output Enable Register
- AT91_REG PIOB_ODR; // Output Disable Registerr
- AT91_REG PIOB_OSR; // Output Status Register
- AT91_REG Reserved14[1]; //
- AT91_REG PIOB_IFER; // Input Filter Enable Register
- AT91_REG PIOB_IFDR; // Input Filter Disable Register
- AT91_REG PIOB_IFSR; // Input Filter Status Register
- AT91_REG Reserved15[1]; //
- AT91_REG PIOB_SODR; // Set Output Data Register
- AT91_REG PIOB_CODR; // Clear Output Data Register
- AT91_REG PIOB_ODSR; // Output Data Status Register
- AT91_REG PIOB_PDSR; // Pin Data Status Register
- AT91_REG PIOB_IER; // Interrupt Enable Register
- AT91_REG PIOB_IDR; // Interrupt Disable Register
- AT91_REG PIOB_IMR; // Interrupt Mask Register
- AT91_REG PIOB_ISR; // Interrupt Status Register
- AT91_REG PIOB_MDER; // Multi-driver Enable Register
- AT91_REG PIOB_MDDR; // Multi-driver Disable Register
- AT91_REG PIOB_MDSR; // Multi-driver Status Register
- AT91_REG Reserved16[1]; //
- AT91_REG PIOB_PPUDR; // Pull-up Disable Register
- AT91_REG PIOB_PPUER; // Pull-up Enable Register
- AT91_REG PIOB_PPUSR; // Pull-up Status Register
- AT91_REG Reserved17[1]; //
- AT91_REG PIOB_ASR; // Select A Register
- AT91_REG PIOB_BSR; // Select B Register
- AT91_REG PIOB_ABSR; // AB Select Status Register
- AT91_REG Reserved18[9]; //
- AT91_REG PIOB_OWER; // Output Write Enable Register
- AT91_REG PIOB_OWDR; // Output Write Disable Register
- AT91_REG PIOB_OWSR; // Output Write Status Register
- AT91_REG Reserved19[341]; //
- AT91_REG PMC_SCER; // System Clock Enable Register
- AT91_REG PMC_SCDR; // System Clock Disable Register
- AT91_REG PMC_SCSR; // System Clock Status Register
- AT91_REG Reserved20[1]; //
- AT91_REG PMC_PCER; // Peripheral Clock Enable Register
- AT91_REG PMC_PCDR; // Peripheral Clock Disable Register
- AT91_REG PMC_PCSR; // Peripheral Clock Status Register
- AT91_REG Reserved21[1]; //
- AT91_REG PMC_MOR; // Main Oscillator Register
- AT91_REG PMC_MCFR; // Main Clock Frequency Register
- AT91_REG Reserved22[1]; //
- AT91_REG PMC_PLLR; // PLL Register
- AT91_REG PMC_MCKR; // Master Clock Register
- AT91_REG Reserved23[3]; //
- AT91_REG PMC_PCKR[4]; // Programmable Clock Register
- AT91_REG Reserved24[4]; //
- AT91_REG PMC_IER; // Interrupt Enable Register
- AT91_REG PMC_IDR; // Interrupt Disable Register
- AT91_REG PMC_SR; // Status Register
- AT91_REG PMC_IMR; // Interrupt Mask Register
- AT91_REG Reserved25[36]; //
- AT91_REG RSTC_RCR; // Reset Control Register
- AT91_REG RSTC_RSR; // Reset Status Register
- AT91_REG RSTC_RMR; // Reset Mode Register
- AT91_REG Reserved26[5]; //
- AT91_REG RTTC_RTMR; // Real-time Mode Register
- AT91_REG RTTC_RTAR; // Real-time Alarm Register
- AT91_REG RTTC_RTVR; // Real-time Value Register
- AT91_REG RTTC_RTSR; // Real-time Status Register
- AT91_REG PITC_PIMR; // Period Interval Mode Register
- AT91_REG PITC_PISR; // Period Interval Status Register
- AT91_REG PITC_PIVR; // Period Interval Value Register
- AT91_REG PITC_PIIR; // Period Interval Image Register
- AT91_REG WDTC_WDCR; // Watchdog Control Register
- AT91_REG WDTC_WDMR; // Watchdog Mode Register
- AT91_REG WDTC_WDSR; // Watchdog Status Register
- AT91_REG Reserved27[5]; //
- AT91_REG VREG_MR; // Voltage Regulator Mode Register
- } AT91S_SYS, *AT91PS_SYS;
- #else
- #endif
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Advanced Interrupt Controller
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_AIC {
- AT91_REG AIC_SMR[32]; // Source Mode Register
- AT91_REG AIC_SVR[32]; // Source Vector Register
- AT91_REG AIC_IVR; // IRQ Vector Register
- AT91_REG AIC_FVR; // FIQ Vector Register
- AT91_REG AIC_ISR; // Interrupt Status Register
- AT91_REG AIC_IPR; // Interrupt Pending Register
- AT91_REG AIC_IMR; // Interrupt Mask Register
- AT91_REG AIC_CISR; // Core Interrupt Status Register
- AT91_REG Reserved0[2]; //
- AT91_REG AIC_IECR; // Interrupt Enable Command Register
- AT91_REG AIC_IDCR; // Interrupt Disable Command Register
- AT91_REG AIC_ICCR; // Interrupt Clear Command Register
- AT91_REG AIC_ISCR; // Interrupt Set Command Register
- AT91_REG AIC_EOICR; // End of Interrupt Command Register
- AT91_REG AIC_SPU; // Spurious Vector Register
- AT91_REG AIC_DCR; // Debug Control Register (Protect)
- AT91_REG Reserved1[1]; //
- AT91_REG AIC_FFER; // Fast Forcing Enable Register
- AT91_REG AIC_FFDR; // Fast Forcing Disable Register
- AT91_REG AIC_FFSR; // Fast Forcing Status Register
- } AT91S_AIC, *AT91PS_AIC;
- #else
- #define AIC_SMR (AT91_CAST(AT91_REG *) 0x00000000) // (AIC_SMR) Source Mode Register
- #define AIC_SVR (AT91_CAST(AT91_REG *) 0x00000080) // (AIC_SVR) Source Vector Register
- #define AIC_IVR (AT91_CAST(AT91_REG *) 0x00000100) // (AIC_IVR) IRQ Vector Register
- #define AIC_FVR (AT91_CAST(AT91_REG *) 0x00000104) // (AIC_FVR) FIQ Vector Register
- #define AIC_ISR (AT91_CAST(AT91_REG *) 0x00000108) // (AIC_ISR) Interrupt Status Register
- #define AIC_IPR (AT91_CAST(AT91_REG *) 0x0000010C) // (AIC_IPR) Interrupt Pending Register
- #define AIC_IMR (AT91_CAST(AT91_REG *) 0x00000110) // (AIC_IMR) Interrupt Mask Register
- #define AIC_CISR (AT91_CAST(AT91_REG *) 0x00000114) // (AIC_CISR) Core Interrupt Status Register
- #define AIC_IECR (AT91_CAST(AT91_REG *) 0x00000120) // (AIC_IECR) Interrupt Enable Command Register
- #define AIC_IDCR (AT91_CAST(AT91_REG *) 0x00000124) // (AIC_IDCR) Interrupt Disable Command Register
- #define AIC_ICCR (AT91_CAST(AT91_REG *) 0x00000128) // (AIC_ICCR) Interrupt Clear Command Register
- #define AIC_ISCR (AT91_CAST(AT91_REG *) 0x0000012C) // (AIC_ISCR) Interrupt Set Command Register
- #define AIC_EOICR (AT91_CAST(AT91_REG *) 0x00000130) // (AIC_EOICR) End of Interrupt Command Register
- #define AIC_SPU (AT91_CAST(AT91_REG *) 0x00000134) // (AIC_SPU) Spurious Vector Register
- #define AIC_DCR (AT91_CAST(AT91_REG *) 0x00000138) // (AIC_DCR) Debug Control Register (Protect)
- #define AIC_FFER (AT91_CAST(AT91_REG *) 0x00000140) // (AIC_FFER) Fast Forcing Enable Register
- #define AIC_FFDR (AT91_CAST(AT91_REG *) 0x00000144) // (AIC_FFDR) Fast Forcing Disable Register
- #define AIC_FFSR (AT91_CAST(AT91_REG *) 0x00000148) // (AIC_FFSR) Fast Forcing Status Register
- #endif
- // -------- AIC_SMR : (AIC Offset: 0x0) Control Register --------
- #define AT91C_AIC_PRIOR (0x7 << 0) // (AIC) Priority Level
- #define AT91C_AIC_PRIOR_LOWEST (0x0) // (AIC) Lowest priority level
- #define AT91C_AIC_PRIOR_HIGHEST (0x7) // (AIC) Highest priority level
- #define AT91C_AIC_SRCTYPE (0x3 << 5) // (AIC) Interrupt Source Type
- #define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL (0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive
- #define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL (0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive
- #define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE (0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered
- #define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE (0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered
- #define AT91C_AIC_SRCTYPE_HIGH_LEVEL (0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive
- #define AT91C_AIC_SRCTYPE_POSITIVE_EDGE (0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered
- // -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register --------
- #define AT91C_AIC_NFIQ (0x1 << 0) // (AIC) NFIQ Status
- #define AT91C_AIC_NIRQ (0x1 << 1) // (AIC) NIRQ Status
- // -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) --------
- #define AT91C_AIC_DCR_PROT (0x1 << 0) // (AIC) Protection Mode
- #define AT91C_AIC_DCR_GMSK (0x1 << 1) // (AIC) General Mask
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Peripheral DMA Controller
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_PDC {
- AT91_REG PDC_RPR; // Receive Pointer Register
- AT91_REG PDC_RCR; // Receive Counter Register
- AT91_REG PDC_TPR; // Transmit Pointer Register
- AT91_REG PDC_TCR; // Transmit Counter Register
- AT91_REG PDC_RNPR; // Receive Next Pointer Register
- AT91_REG PDC_RNCR; // Receive Next Counter Register
- AT91_REG PDC_TNPR; // Transmit Next Pointer Register
- AT91_REG PDC_TNCR; // Transmit Next Counter Register
- AT91_REG PDC_PTCR; // PDC Transfer Control Register
- AT91_REG PDC_PTSR; // PDC Transfer Status Register
- } AT91S_PDC, *AT91PS_PDC;
- #else
- #define PDC_RPR (AT91_CAST(AT91_REG *) 0x00000000) // (PDC_RPR) Receive Pointer Register
- #define PDC_RCR (AT91_CAST(AT91_REG *) 0x00000004) // (PDC_RCR) Receive Counter Register
- #define PDC_TPR (AT91_CAST(AT91_REG *) 0x00000008) // (PDC_TPR) Transmit Pointer Register
- #define PDC_TCR (AT91_CAST(AT91_REG *) 0x0000000C) // (PDC_TCR) Transmit Counter Register
- #define PDC_RNPR (AT91_CAST(AT91_REG *) 0x00000010) // (PDC_RNPR) Receive Next Pointer Register
- #define PDC_RNCR (AT91_CAST(AT91_REG *) 0x00000014) // (PDC_RNCR) Receive Next Counter Register
- #define PDC_TNPR (AT91_CAST(AT91_REG *) 0x00000018) // (PDC_TNPR) Transmit Next Pointer Register
- #define PDC_TNCR (AT91_CAST(AT91_REG *) 0x0000001C) // (PDC_TNCR) Transmit Next Counter Register
- #define PDC_PTCR (AT91_CAST(AT91_REG *) 0x00000020) // (PDC_PTCR) PDC Transfer Control Register
- #define PDC_PTSR (AT91_CAST(AT91_REG *) 0x00000024) // (PDC_PTSR) PDC Transfer Status Register
- #endif
- // -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register --------
- #define AT91C_PDC_RXTEN (0x1 << 0) // (PDC) Receiver Transfer Enable
- #define AT91C_PDC_RXTDIS (0x1 << 1) // (PDC) Receiver Transfer Disable
- #define AT91C_PDC_TXTEN (0x1 << 8) // (PDC) Transmitter Transfer Enable
- #define AT91C_PDC_TXTDIS (0x1 << 9) // (PDC) Transmitter Transfer Disable
- // -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register --------
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Debug Unit
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_DBGU {
- AT91_REG DBGU_CR; // Control Register
- AT91_REG DBGU_MR; // Mode Register
- AT91_REG DBGU_IER; // Interrupt Enable Register
- AT91_REG DBGU_IDR; // Interrupt Disable Register
- AT91_REG DBGU_IMR; // Interrupt Mask Register
- AT91_REG DBGU_CSR; // Channel Status Register
- AT91_REG DBGU_RHR; // Receiver Holding Register
- AT91_REG DBGU_THR; // Transmitter Holding Register
- AT91_REG DBGU_BRGR; // Baud Rate Generator Register
- AT91_REG Reserved0[7]; //
- AT91_REG DBGU_CIDR; // Chip ID Register
- AT91_REG DBGU_EXID; // Chip ID Extension Register
- AT91_REG DBGU_FNTR; // Force NTRST Register
- AT91_REG Reserved1[45]; //
- AT91_REG DBGU_RPR; // Receive Pointer Register
- AT91_REG DBGU_RCR; // Receive Counter Register
- AT91_REG DBGU_TPR; // Transmit Pointer Register
- AT91_REG DBGU_TCR; // Transmit Counter Register
- AT91_REG DBGU_RNPR; // Receive Next Pointer Register
- AT91_REG DBGU_RNCR; // Receive Next Counter Register
- AT91_REG DBGU_TNPR; // Transmit Next Pointer Register
- AT91_REG DBGU_TNCR; // Transmit Next Counter Register
- AT91_REG DBGU_PTCR; // PDC Transfer Control Register
- AT91_REG DBGU_PTSR; // PDC Transfer Status Register
- } AT91S_DBGU, *AT91PS_DBGU;
- #else
- #define DBGU_CR (AT91_CAST(AT91_REG *) 0x00000000) // (DBGU_CR) Control Register
- #define DBGU_MR (AT91_CAST(AT91_REG *) 0x00000004) // (DBGU_MR) Mode Register
- #define DBGU_IER (AT91_CAST(AT91_REG *) 0x00000008) // (DBGU_IER) Interrupt Enable Register
- #define DBGU_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (DBGU_IDR) Interrupt Disable Register
- #define DBGU_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (DBGU_IMR) Interrupt Mask Register
- #define DBGU_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (DBGU_CSR) Channel Status Register
- #define DBGU_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (DBGU_RHR) Receiver Holding Register
- #define DBGU_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (DBGU_THR) Transmitter Holding Register
- #define DBGU_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (DBGU_BRGR) Baud Rate Generator Register
- #define DBGU_CIDR (AT91_CAST(AT91_REG *) 0x00000040) // (DBGU_CIDR) Chip ID Register
- #define DBGU_EXID (AT91_CAST(AT91_REG *) 0x00000044) // (DBGU_EXID) Chip ID Extension Register
- #define DBGU_FNTR (AT91_CAST(AT91_REG *) 0x00000048) // (DBGU_FNTR) Force NTRST Register
- #endif
- // -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register --------
- #define AT91C_US_RSTRX (0x1 << 2) // (DBGU) Reset Receiver
- #define AT91C_US_RSTTX (0x1 << 3) // (DBGU) Reset Transmitter
- #define AT91C_US_RXEN (0x1 << 4) // (DBGU) Receiver Enable
- #define AT91C_US_RXDIS (0x1 << 5) // (DBGU) Receiver Disable
- #define AT91C_US_TXEN (0x1 << 6) // (DBGU) Transmitter Enable
- #define AT91C_US_TXDIS (0x1 << 7) // (DBGU) Transmitter Disable
- #define AT91C_US_RSTSTA (0x1 << 8) // (DBGU) Reset Status Bits
- // -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register --------
- #define AT91C_US_PAR (0x7 << 9) // (DBGU) Parity type
- #define AT91C_US_PAR_EVEN (0x0 << 9) // (DBGU) Even Parity
- #define AT91C_US_PAR_ODD (0x1 << 9) // (DBGU) Odd Parity
- #define AT91C_US_PAR_SPACE (0x2 << 9) // (DBGU) Parity forced to 0 (Space)
- #define AT91C_US_PAR_MARK (0x3 << 9) // (DBGU) Parity forced to 1 (Mark)
- #define AT91C_US_PAR_NONE (0x4 << 9) // (DBGU) No Parity
- #define AT91C_US_PAR_MULTI_DROP (0x6 << 9) // (DBGU) Multi-drop mode
- #define AT91C_US_CHMODE (0x3 << 14) // (DBGU) Channel Mode
- #define AT91C_US_CHMODE_NORMAL (0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART.
- #define AT91C_US_CHMODE_AUTO (0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin.
- #define AT91C_US_CHMODE_LOCAL (0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal.
- #define AT91C_US_CHMODE_REMOTE (0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin.
- // -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register --------
- #define AT91C_US_RXRDY (0x1 << 0) // (DBGU) RXRDY Interrupt
- #define AT91C_US_TXRDY (0x1 << 1) // (DBGU) TXRDY Interrupt
- #define AT91C_US_ENDRX (0x1 << 3) // (DBGU) End of Receive Transfer Interrupt
- #define AT91C_US_ENDTX (0x1 << 4) // (DBGU) End of Transmit Interrupt
- #define AT91C_US_OVRE (0x1 << 5) // (DBGU) Overrun Interrupt
- #define AT91C_US_FRAME (0x1 << 6) // (DBGU) Framing Error Interrupt
- #define AT91C_US_PARE (0x1 << 7) // (DBGU) Parity Error Interrupt
- #define AT91C_US_TXEMPTY (0x1 << 9) // (DBGU) TXEMPTY Interrupt
- #define AT91C_US_TXBUFE (0x1 << 11) // (DBGU) TXBUFE Interrupt
- #define AT91C_US_RXBUFF (0x1 << 12) // (DBGU) RXBUFF Interrupt
- #define AT91C_US_COMM_TX (0x1 << 30) // (DBGU) COMM_TX Interrupt
- #define AT91C_US_COMM_RX (0x1 << 31) // (DBGU) COMM_RX Interrupt
- // -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register --------
- // -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register --------
- // -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register --------
- // -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register --------
- #define AT91C_US_FORCE_NTRST (0x1 << 0) // (DBGU) Force NTRST in JTAG
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Parallel Input Output Controler
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_PIO {
- AT91_REG PIO_PER; // PIO Enable Register
- AT91_REG PIO_PDR; // PIO Disable Register
- AT91_REG PIO_PSR; // PIO Status Register
- AT91_REG Reserved0[1]; //
- AT91_REG PIO_OER; // Output Enable Register
- AT91_REG PIO_ODR; // Output Disable Registerr
- AT91_REG PIO_OSR; // Output Status Register
- AT91_REG Reserved1[1]; //
- AT91_REG PIO_IFER; // Input Filter Enable Register
- AT91_REG PIO_IFDR; // Input Filter Disable Register
- AT91_REG PIO_IFSR; // Input Filter Status Register
- AT91_REG Reserved2[1]; //
- AT91_REG PIO_SODR; // Set Output Data Register
- AT91_REG PIO_CODR; // Clear Output Data Register
- AT91_REG PIO_ODSR; // Output Data Status Register
- AT91_REG PIO_PDSR; // Pin Data Status Register
- AT91_REG PIO_IER; // Interrupt Enable Register
- AT91_REG PIO_IDR; // Interrupt Disable Register
- AT91_REG PIO_IMR; // Interrupt Mask Register
- AT91_REG PIO_ISR; // Interrupt Status Register
- AT91_REG PIO_MDER; // Multi-driver Enable Register
- AT91_REG PIO_MDDR; // Multi-driver Disable Register
- AT91_REG PIO_MDSR; // Multi-driver Status Register
- AT91_REG Reserved3[1]; //
- AT91_REG PIO_PPUDR; // Pull-up Disable Register
- AT91_REG PIO_PPUER; // Pull-up Enable Register
- AT91_REG PIO_PPUSR; // Pull-up Status Register
- AT91_REG Reserved4[1]; //
- AT91_REG PIO_ASR; // Select A Register
- AT91_REG PIO_BSR; // Select B Register
- AT91_REG PIO_ABSR; // AB Select Status Register
- AT91_REG Reserved5[9]; //
- AT91_REG PIO_OWER; // Output Write Enable Register
- AT91_REG PIO_OWDR; // Output Write Disable Register
- AT91_REG PIO_OWSR; // Output Write Status Register
- } AT91S_PIO, *AT91PS_PIO;
- #else
- #define PIO_PER (AT91_CAST(AT91_REG *) 0x00000000) // (PIO_PER) PIO Enable Register
- #define PIO_PDR (AT91_CAST(AT91_REG *) 0x00000004) // (PIO_PDR) PIO Disable Register
- #define PIO_PSR (AT91_CAST(AT91_REG *) 0x00000008) // (PIO_PSR) PIO Status Register
- #define PIO_OER (AT91_CAST(AT91_REG *) 0x00000010) // (PIO_OER) Output Enable Register
- #define PIO_ODR (AT91_CAST(AT91_REG *) 0x00000014) // (PIO_ODR) Output Disable Registerr
- #define PIO_OSR (AT91_CAST(AT91_REG *) 0x00000018) // (PIO_OSR) Output Status Register
- #define PIO_IFER (AT91_CAST(AT91_REG *) 0x00000020) // (PIO_IFER) Input Filter Enable Register
- #define PIO_IFDR (AT91_CAST(AT91_REG *) 0x00000024) // (PIO_IFDR) Input Filter Disable Register
- #define PIO_IFSR (AT91_CAST(AT91_REG *) 0x00000028) // (PIO_IFSR) Input Filter Status Register
- #define PIO_SODR (AT91_CAST(AT91_REG *) 0x00000030) // (PIO_SODR) Set Output Data Register
- #define PIO_CODR (AT91_CAST(AT91_REG *) 0x00000034) // (PIO_CODR) Clear Output Data Register
- #define PIO_ODSR (AT91_CAST(AT91_REG *) 0x00000038) // (PIO_ODSR) Output Data Status Register
- #define PIO_PDSR (AT91_CAST(AT91_REG *) 0x0000003C) // (PIO_PDSR) Pin Data Status Register
- #define PIO_IER (AT91_CAST(AT91_REG *) 0x00000040) // (PIO_IER) Interrupt Enable Register
- #define PIO_IDR (AT91_CAST(AT91_REG *) 0x00000044) // (PIO_IDR) Interrupt Disable Register
- #define PIO_IMR (AT91_CAST(AT91_REG *) 0x00000048) // (PIO_IMR) Interrupt Mask Register
- #define PIO_ISR (AT91_CAST(AT91_REG *) 0x0000004C) // (PIO_ISR) Interrupt Status Register
- #define PIO_MDER (AT91_CAST(AT91_REG *) 0x00000050) // (PIO_MDER) Multi-driver Enable Register
- #define PIO_MDDR (AT91_CAST(AT91_REG *) 0x00000054) // (PIO_MDDR) Multi-driver Disable Register
- #define PIO_MDSR (AT91_CAST(AT91_REG *) 0x00000058) // (PIO_MDSR) Multi-driver Status Register
- #define PIO_PPUDR (AT91_CAST(AT91_REG *) 0x00000060) // (PIO_PPUDR) Pull-up Disable Register
- #define PIO_PPUER (AT91_CAST(AT91_REG *) 0x00000064) // (PIO_PPUER) Pull-up Enable Register
- #define PIO_PPUSR (AT91_CAST(AT91_REG *) 0x00000068) // (PIO_PPUSR) Pull-up Status Register
- #define PIO_ASR (AT91_CAST(AT91_REG *) 0x00000070) // (PIO_ASR) Select A Register
- #define PIO_BSR (AT91_CAST(AT91_REG *) 0x00000074) // (PIO_BSR) Select B Register
- #define PIO_ABSR (AT91_CAST(AT91_REG *) 0x00000078) // (PIO_ABSR) AB Select Status Register
- #define PIO_OWER (AT91_CAST(AT91_REG *) 0x000000A0) // (PIO_OWER) Output Write Enable Register
- #define PIO_OWDR (AT91_CAST(AT91_REG *) 0x000000A4) // (PIO_OWDR) Output Write Disable Register
- #define PIO_OWSR (AT91_CAST(AT91_REG *) 0x000000A8) // (PIO_OWSR) Output Write Status Register
- #endif
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Clock Generator Controler
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_CKGR {
- AT91_REG CKGR_MOR; // Main Oscillator Register
- AT91_REG CKGR_MCFR; // Main Clock Frequency Register
- AT91_REG Reserved0[1]; //
- AT91_REG CKGR_PLLR; // PLL Register
- } AT91S_CKGR, *AT91PS_CKGR;
- #else
- #define CKGR_MOR (AT91_CAST(AT91_REG *) 0x00000000) // (CKGR_MOR) Main Oscillator Register
- #define CKGR_MCFR (AT91_CAST(AT91_REG *) 0x00000004) // (CKGR_MCFR) Main Clock Frequency Register
- #define CKGR_PLLR (AT91_CAST(AT91_REG *) 0x0000000C) // (CKGR_PLLR) PLL Register
- #endif
- // -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register --------
- #define AT91C_CKGR_MOSCEN (0x1 << 0) // (CKGR) Main Oscillator Enable
- #define AT91C_CKGR_OSCBYPASS (0x1 << 1) // (CKGR) Main Oscillator Bypass
- #define AT91C_CKGR_OSCOUNT (0xFF << 8) // (CKGR) Main Oscillator Start-up Time
- // -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register --------
- #define AT91C_CKGR_MAINF (0xFFFF << 0) // (CKGR) Main Clock Frequency
- #define AT91C_CKGR_MAINRDY (0x1 << 16) // (CKGR) Main Clock Ready
- // -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register --------
- #define AT91C_CKGR_DIV (0xFF << 0) // (CKGR) Divider Selected
- #define AT91C_CKGR_DIV_0 (0x0) // (CKGR) Divider output is 0
- #define AT91C_CKGR_DIV_BYPASS (0x1) // (CKGR) Divider is bypassed
- #define AT91C_CKGR_PLLCOUNT (0x3F << 8) // (CKGR) PLL Counter
- #define AT91C_CKGR_OUT (0x3 << 14) // (CKGR) PLL Output Frequency Range
- #define AT91C_CKGR_OUT_0 (0x0 << 14) // (CKGR) Please refer to the PLL datasheet
- #define AT91C_CKGR_OUT_1 (0x1 << 14) // (CKGR) Please refer to the PLL datasheet
- #define AT91C_CKGR_OUT_2 (0x2 << 14) // (CKGR) Please refer to the PLL datasheet
- #define AT91C_CKGR_OUT_3 (0x3 << 14) // (CKGR) Please refer to the PLL datasheet
- #define AT91C_CKGR_MUL (0x7FF << 16) // (CKGR) PLL Multiplier
- #define AT91C_CKGR_USBDIV (0x3 << 28) // (CKGR) Divider for USB Clocks
- #define AT91C_CKGR_USBDIV_0 (0x0 << 28) // (CKGR) Divider output is PLL clock output
- #define AT91C_CKGR_USBDIV_1 (0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2
- #define AT91C_CKGR_USBDIV_2 (0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Power Management Controler
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_PMC {
- AT91_REG PMC_SCER; // System Clock Enable Register
- AT91_REG PMC_SCDR; // System Clock Disable Register
- AT91_REG PMC_SCSR; // System Clock Status Register
- AT91_REG Reserved0[1]; //
- AT91_REG PMC_PCER; // Peripheral Clock Enable Register
- AT91_REG PMC_PCDR; // Peripheral Clock Disable Register
- AT91_REG PMC_PCSR; // Peripheral Clock Status Register
- AT91_REG Reserved1[1]; //
- AT91_REG PMC_MOR; // Main Oscillator Register
- AT91_REG PMC_MCFR; // Main Clock Frequency Register
- AT91_REG Reserved2[1]; //
- AT91_REG PMC_PLLR; // PLL Register
- AT91_REG PMC_MCKR; // Master Clock Register
- AT91_REG Reserved3[3]; //
- AT91_REG PMC_PCKR[4]; // Programmable Clock Register
- AT91_REG Reserved4[4]; //
- AT91_REG PMC_IER; // Interrupt Enable Register
- AT91_REG PMC_IDR; // Interrupt Disable Register
- AT91_REG PMC_SR; // Status Register
- AT91_REG PMC_IMR; // Interrupt Mask Register
- } AT91S_PMC, *AT91PS_PMC;
- #else
- #define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register
- #define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register
- #define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register
- #define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register
- #define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register
- #define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register
- #define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register
- #define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register
- #define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register
- #define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register
- #define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register
- #define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register
- #endif
- // -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register --------
- #define AT91C_PMC_PCK (0x1 << 0) // (PMC) Processor Clock
- #define AT91C_PMC_UDP (0x1 << 7) // (PMC) USB Device Port Clock
- #define AT91C_PMC_PCK0 (0x1 << 8) // (PMC) Programmable Clock Output
- #define AT91C_PMC_PCK1 (0x1 << 9) // (PMC) Programmable Clock Output
- #define AT91C_PMC_PCK2 (0x1 << 10) // (PMC) Programmable Clock Output
- #define AT91C_PMC_PCK3 (0x1 << 11) // (PMC) Programmable Clock Output
- // -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register --------
- // -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register --------
- // -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register --------
- // -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register --------
- // -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register --------
- // -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register --------
- #define AT91C_PMC_CSS (0x3 << 0) // (PMC) Programmable Clock Selection
- #define AT91C_PMC_CSS_SLOW_CLK (0x0) // (PMC) Slow Clock is selected
- #define AT91C_PMC_CSS_MAIN_CLK (0x1) // (PMC) Main Clock is selected
- #define AT91C_PMC_CSS_PLL_CLK (0x3) // (PMC) Clock from PLL is selected
- #define AT91C_PMC_PRES (0x7 << 2) // (PMC) Programmable Clock Prescaler
- #define AT91C_PMC_PRES_CLK (0x0 << 2) // (PMC) Selected clock
- #define AT91C_PMC_PRES_CLK_2 (0x1 << 2) // (PMC) Selected clock divided by 2
- #define AT91C_PMC_PRES_CLK_4 (0x2 << 2) // (PMC) Selected clock divided by 4
- #define AT91C_PMC_PRES_CLK_8 (0x3 << 2) // (PMC) Selected clock divided by 8
- #define AT91C_PMC_PRES_CLK_16 (0x4 << 2) // (PMC) Selected clock divided by 16
- #define AT91C_PMC_PRES_CLK_32 (0x5 << 2) // (PMC) Selected clock divided by 32
- #define AT91C_PMC_PRES_CLK_64 (0x6 << 2) // (PMC) Selected clock divided by 64
- // -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register --------
- // -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register --------
- #define AT91C_PMC_MOSCS (0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask
- #define AT91C_PMC_LOCK (0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask
- #define AT91C_PMC_MCKRDY (0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask
- #define AT91C_PMC_PCK0RDY (0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask
- #define AT91C_PMC_PCK1RDY (0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask
- #define AT91C_PMC_PCK2RDY (0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask
- #define AT91C_PMC_PCK3RDY (0x1 << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask
- // -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register --------
- // -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register --------
- // -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register --------
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Reset Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_RSTC {
- AT91_REG RSTC_RCR; // Reset Control Register
- AT91_REG RSTC_RSR; // Reset Status Register
- AT91_REG RSTC_RMR; // Reset Mode Register
- } AT91S_RSTC, *AT91PS_RSTC;
- #else
- #define RSTC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (RSTC_RCR) Reset Control Register
- #define RSTC_RSR (AT91_CAST(AT91_REG *) 0x00000004) // (RSTC_RSR) Reset Status Register
- #define RSTC_RMR (AT91_CAST(AT91_REG *) 0x00000008) // (RSTC_RMR) Reset Mode Register
- #endif
- // -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register --------
- #define AT91C_RSTC_PROCRST (0x1 << 0) // (RSTC) Processor Reset
- #define AT91C_RSTC_PERRST (0x1 << 2) // (RSTC) Peripheral Reset
- #define AT91C_RSTC_EXTRST (0x1 << 3) // (RSTC) External Reset
- #define AT91C_RSTC_KEY (0xFF << 24) // (RSTC) Password
- // -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register --------
- #define AT91C_RSTC_URSTS (0x1 << 0) // (RSTC) User Reset Status
- #define AT91C_RSTC_BODSTS (0x1 << 1) // (RSTC) Brownout Detection Status
- #define AT91C_RSTC_RSTTYP (0x7 << 8) // (RSTC) Reset Type
- #define AT91C_RSTC_RSTTYP_POWERUP (0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising.
- #define AT91C_RSTC_RSTTYP_WAKEUP (0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising.
- #define AT91C_RSTC_RSTTYP_WATCHDOG (0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured.
- #define AT91C_RSTC_RSTTYP_SOFTWARE (0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software.
- #define AT91C_RSTC_RSTTYP_USER (0x4 << 8) // (RSTC) User Reset. NRST pin detected low.
- #define AT91C_RSTC_RSTTYP_BROWNOUT (0x5 << 8) // (RSTC) Brownout Reset occured.
- #define AT91C_RSTC_NRSTL (0x1 << 16) // (RSTC) NRST pin level
- #define AT91C_RSTC_SRCMP (0x1 << 17) // (RSTC) Software Reset Command in Progress.
- // -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register --------
- #define AT91C_RSTC_URSTEN (0x1 << 0) // (RSTC) User Reset Enable
- #define AT91C_RSTC_URSTIEN (0x1 << 4) // (RSTC) User Reset Interrupt Enable
- #define AT91C_RSTC_ERSTL (0xF << 8) // (RSTC) User Reset Length
- #define AT91C_RSTC_BODIEN (0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_RTTC {
- AT91_REG RTTC_RTMR; // Real-time Mode Register
- AT91_REG RTTC_RTAR; // Real-time Alarm Register
- AT91_REG RTTC_RTVR; // Real-time Value Register
- AT91_REG RTTC_RTSR; // Real-time Status Register
- } AT91S_RTTC, *AT91PS_RTTC;
- #else
- #define RTTC_RTMR (AT91_CAST(AT91_REG *) 0x00000000) // (RTTC_RTMR) Real-time Mode Register
- #define RTTC_RTAR (AT91_CAST(AT91_REG *) 0x00000004) // (RTTC_RTAR) Real-time Alarm Register
- #define RTTC_RTVR (AT91_CAST(AT91_REG *) 0x00000008) // (RTTC_RTVR) Real-time Value Register
- #define RTTC_RTSR (AT91_CAST(AT91_REG *) 0x0000000C) // (RTTC_RTSR) Real-time Status Register
- #endif
- // -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register --------
- #define AT91C_RTTC_RTPRES (0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value
- #define AT91C_RTTC_ALMIEN (0x1 << 16) // (RTTC) Alarm Interrupt Enable
- #define AT91C_RTTC_RTTINCIEN (0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable
- #define AT91C_RTTC_RTTRST (0x1 << 18) // (RTTC) Real Time Timer Restart
- // -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register --------
- #define AT91C_RTTC_ALMV (0x0 << 0) // (RTTC) Alarm Value
- // -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register --------
- #define AT91C_RTTC_CRTV (0x0 << 0) // (RTTC) Current Real-time Value
- // -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register --------
- #define AT91C_RTTC_ALMS (0x1 << 0) // (RTTC) Real-time Alarm Status
- #define AT91C_RTTC_RTTINC (0x1 << 1) // (RTTC) Real-time Timer Increment
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_PITC {
- AT91_REG PITC_PIMR; // Period Interval Mode Register
- AT91_REG PITC_PISR; // Period Interval Status Register
- AT91_REG PITC_PIVR; // Period Interval Value Register
- AT91_REG PITC_PIIR; // Period Interval Image Register
- } AT91S_PITC, *AT91PS_PITC;
- #else
- #define PITC_PIMR (AT91_CAST(AT91_REG *) 0x00000000) // (PITC_PIMR) Period Interval Mode Register
- #define PITC_PISR (AT91_CAST(AT91_REG *) 0x00000004) // (PITC_PISR) Period Interval Status Register
- #define PITC_PIVR (AT91_CAST(AT91_REG *) 0x00000008) // (PITC_PIVR) Period Interval Value Register
- #define PITC_PIIR (AT91_CAST(AT91_REG *) 0x0000000C) // (PITC_PIIR) Period Interval Image Register
- #endif
- // -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register --------
- #define AT91C_PITC_PIV (0xFFFFF << 0) // (PITC) Periodic Interval Value
- #define AT91C_PITC_PITEN (0x1 << 24) // (PITC) Periodic Interval Timer Enabled
- #define AT91C_PITC_PITIEN (0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable
- // -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register --------
- #define AT91C_PITC_PITS (0x1 << 0) // (PITC) Periodic Interval Timer Status
- // -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register --------
- #define AT91C_PITC_CPIV (0xFFFFF << 0) // (PITC) Current Periodic Interval Value
- #define AT91C_PITC_PICNT (0xFFF << 20) // (PITC) Periodic Interval Counter
- // -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register --------
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_WDTC {
- AT91_REG WDTC_WDCR; // Watchdog Control Register
- AT91_REG WDTC_WDMR; // Watchdog Mode Register
- AT91_REG WDTC_WDSR; // Watchdog Status Register
- } AT91S_WDTC, *AT91PS_WDTC;
- #else
- #define WDTC_WDCR (AT91_CAST(AT91_REG *) 0x00000000) // (WDTC_WDCR) Watchdog Control Register
- #define WDTC_WDMR (AT91_CAST(AT91_REG *) 0x00000004) // (WDTC_WDMR) Watchdog Mode Register
- #define WDTC_WDSR (AT91_CAST(AT91_REG *) 0x00000008) // (WDTC_WDSR) Watchdog Status Register
- #endif
- // -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register --------
- #define AT91C_WDTC_WDRSTT (0x1 << 0) // (WDTC) Watchdog Restart
- #define AT91C_WDTC_KEY (0xFF << 24) // (WDTC) Watchdog KEY Password
- // -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register --------
- #define AT91C_WDTC_WDV (0xFFF << 0) // (WDTC) Watchdog Timer Restart
- #define AT91C_WDTC_WDFIEN (0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable
- #define AT91C_WDTC_WDRSTEN (0x1 << 13) // (WDTC) Watchdog Reset Enable
- #define AT91C_WDTC_WDRPROC (0x1 << 14) // (WDTC) Watchdog Timer Restart
- #define AT91C_WDTC_WDDIS (0x1 << 15) // (WDTC) Watchdog Disable
- #define AT91C_WDTC_WDD (0xFFF << 16) // (WDTC) Watchdog Delta Value
- #define AT91C_WDTC_WDDBGHLT (0x1 << 28) // (WDTC) Watchdog Debug Halt
- #define AT91C_WDTC_WDIDLEHLT (0x1 << 29) // (WDTC) Watchdog Idle Halt
- // -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register --------
- #define AT91C_WDTC_WDUNF (0x1 << 0) // (WDTC) Watchdog Underflow
- #define AT91C_WDTC_WDERR (0x1 << 1) // (WDTC) Watchdog Error
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_VREG {
- AT91_REG VREG_MR; // Voltage Regulator Mode Register
- } AT91S_VREG, *AT91PS_VREG;
- #else
- #define VREG_MR (AT91_CAST(AT91_REG *) 0x00000000) // (VREG_MR) Voltage Regulator Mode Register
- #endif
- // -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register --------
- #define AT91C_VREG_PSTDBY (0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Memory Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_MC {
- AT91_REG MC_RCR; // MC Remap Control Register
- AT91_REG MC_ASR; // MC Abort Status Register
- AT91_REG MC_AASR; // MC Abort Address Status Register
- AT91_REG Reserved0[21]; //
- AT91_REG MC_FMR; // MC Flash Mode Register
- AT91_REG MC_FCR; // MC Flash Command Register
- AT91_REG MC_FSR; // MC Flash Status Register
- } AT91S_MC, *AT91PS_MC;
- #else
- #define MC_RCR (AT91_CAST(AT91_REG *) 0x00000000) // (MC_RCR) MC Remap Control Register
- #define MC_ASR (AT91_CAST(AT91_REG *) 0x00000004) // (MC_ASR) MC Abort Status Register
- #define MC_AASR (AT91_CAST(AT91_REG *) 0x00000008) // (MC_AASR) MC Abort Address Status Register
- #define MC_FMR (AT91_CAST(AT91_REG *) 0x00000060) // (MC_FMR) MC Flash Mode Register
- #define MC_FCR (AT91_CAST(AT91_REG *) 0x00000064) // (MC_FCR) MC Flash Command Register
- #define MC_FSR (AT91_CAST(AT91_REG *) 0x00000068) // (MC_FSR) MC Flash Status Register
- #endif
- // -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register --------
- #define AT91C_MC_RCB (0x1 << 0) // (MC) Remap Command Bit
- // -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register --------
- #define AT91C_MC_UNDADD (0x1 << 0) // (MC) Undefined Addess Abort Status
- #define AT91C_MC_MISADD (0x1 << 1) // (MC) Misaligned Addess Abort Status
- #define AT91C_MC_ABTSZ (0x3 << 8) // (MC) Abort Size Status
- #define AT91C_MC_ABTSZ_BYTE (0x0 << 8) // (MC) Byte
- #define AT91C_MC_ABTSZ_HWORD (0x1 << 8) // (MC) Half-word
- #define AT91C_MC_ABTSZ_WORD (0x2 << 8) // (MC) Word
- #define AT91C_MC_ABTTYP (0x3 << 10) // (MC) Abort Type Status
- #define AT91C_MC_ABTTYP_DATAR (0x0 << 10) // (MC) Data Read
- #define AT91C_MC_ABTTYP_DATAW (0x1 << 10) // (MC) Data Write
- #define AT91C_MC_ABTTYP_FETCH (0x2 << 10) // (MC) Code Fetch
- #define AT91C_MC_MST0 (0x1 << 16) // (MC) Master 0 Abort Source
- #define AT91C_MC_MST1 (0x1 << 17) // (MC) Master 1 Abort Source
- #define AT91C_MC_SVMST0 (0x1 << 24) // (MC) Saved Master 0 Abort Source
- #define AT91C_MC_SVMST1 (0x1 << 25) // (MC) Saved Master 1 Abort Source
- // -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register --------
- #define AT91C_MC_FRDY (0x1 << 0) // (MC) Flash Ready
- #define AT91C_MC_LOCKE (0x1 << 2) // (MC) Lock Error
- #define AT91C_MC_PROGE (0x1 << 3) // (MC) Programming Error
- #define AT91C_MC_NEBP (0x1 << 7) // (MC) No Erase Before Programming
- #define AT91C_MC_FWS (0x3 << 8) // (MC) Flash Wait State
- #define AT91C_MC_FWS_0FWS (0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations
- #define AT91C_MC_FWS_1FWS (0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations
- #define AT91C_MC_FWS_2FWS (0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations
- #define AT91C_MC_FWS_3FWS (0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations
- #define AT91C_MC_FMCN (0xFF << 16) // (MC) Flash Microsecond Cycle Number
- // -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register --------
- #define AT91C_MC_FCMD (0xF << 0) // (MC) Flash Command
- #define AT91C_MC_FCMD_START_PROG (0x1) // (MC) Starts the programming of th epage specified by PAGEN.
- #define AT91C_MC_FCMD_LOCK (0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN.
- #define AT91C_MC_FCMD_PROG_AND_LOCK (0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed.
- #define AT91C_MC_FCMD_UNLOCK (0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN.
- #define AT91C_MC_FCMD_ERASE_ALL (0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled.
- #define AT91C_MC_FCMD_SET_GP_NVM (0xB) // (MC) Set General Purpose NVM bits.
- #define AT91C_MC_FCMD_CLR_GP_NVM (0xD) // (MC) Clear General Purpose NVM bits.
- #define AT91C_MC_FCMD_SET_SECURITY (0xF) // (MC) Set Security Bit.
- #define AT91C_MC_PAGEN (0x3FF << 8) // (MC) Page Number
- #define AT91C_MC_KEY (0xFF << 24) // (MC) Writing Protect Key
- // -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register --------
- #define AT91C_MC_SECURITY (0x1 << 4) // (MC) Security Bit Status
- #define AT91C_MC_GPNVM0 (0x1 << 8) // (MC) Sector 0 Lock Status
- #define AT91C_MC_GPNVM1 (0x1 << 9) // (MC) Sector 1 Lock Status
- #define AT91C_MC_GPNVM2 (0x1 << 10) // (MC) Sector 2 Lock Status
- #define AT91C_MC_GPNVM3 (0x1 << 11) // (MC) Sector 3 Lock Status
- #define AT91C_MC_GPNVM4 (0x1 << 12) // (MC) Sector 4 Lock Status
- #define AT91C_MC_GPNVM5 (0x1 << 13) // (MC) Sector 5 Lock Status
- #define AT91C_MC_GPNVM6 (0x1 << 14) // (MC) Sector 6 Lock Status
- #define AT91C_MC_GPNVM7 (0x1 << 15) // (MC) Sector 7 Lock Status
- #define AT91C_MC_LOCKS0 (0x1 << 16) // (MC) Sector 0 Lock Status
- #define AT91C_MC_LOCKS1 (0x1 << 17) // (MC) Sector 1 Lock Status
- #define AT91C_MC_LOCKS2 (0x1 << 18) // (MC) Sector 2 Lock Status
- #define AT91C_MC_LOCKS3 (0x1 << 19) // (MC) Sector 3 Lock Status
- #define AT91C_MC_LOCKS4 (0x1 << 20) // (MC) Sector 4 Lock Status
- #define AT91C_MC_LOCKS5 (0x1 << 21) // (MC) Sector 5 Lock Status
- #define AT91C_MC_LOCKS6 (0x1 << 22) // (MC) Sector 6 Lock Status
- #define AT91C_MC_LOCKS7 (0x1 << 23) // (MC) Sector 7 Lock Status
- #define AT91C_MC_LOCKS8 (0x1 << 24) // (MC) Sector 8 Lock Status
- #define AT91C_MC_LOCKS9 (0x1 << 25) // (MC) Sector 9 Lock Status
- #define AT91C_MC_LOCKS10 (0x1 << 26) // (MC) Sector 10 Lock Status
- #define AT91C_MC_LOCKS11 (0x1 << 27) // (MC) Sector 11 Lock Status
- #define AT91C_MC_LOCKS12 (0x1 << 28) // (MC) Sector 12 Lock Status
- #define AT91C_MC_LOCKS13 (0x1 << 29) // (MC) Sector 13 Lock Status
- #define AT91C_MC_LOCKS14 (0x1 << 30) // (MC) Sector 14 Lock Status
- #define AT91C_MC_LOCKS15 (0x1 << 31) // (MC) Sector 15 Lock Status
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Serial Parallel Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_SPI {
- AT91_REG SPI_CR; // Control Register
- AT91_REG SPI_MR; // Mode Register
- AT91_REG SPI_RDR; // Receive Data Register
- AT91_REG SPI_TDR; // Transmit Data Register
- AT91_REG SPI_SR; // Status Register
- AT91_REG SPI_IER; // Interrupt Enable Register
- AT91_REG SPI_IDR; // Interrupt Disable Register
- AT91_REG SPI_IMR; // Interrupt Mask Register
- AT91_REG Reserved0[4]; //
- AT91_REG SPI_CSR[4]; // Chip Select Register
- AT91_REG Reserved1[48]; //
- AT91_REG SPI_RPR; // Receive Pointer Register
- AT91_REG SPI_RCR; // Receive Counter Register
- AT91_REG SPI_TPR; // Transmit Pointer Register
- AT91_REG SPI_TCR; // Transmit Counter Register
- AT91_REG SPI_RNPR; // Receive Next Pointer Register
- AT91_REG SPI_RNCR; // Receive Next Counter Register
- AT91_REG SPI_TNPR; // Transmit Next Pointer Register
- AT91_REG SPI_TNCR; // Transmit Next Counter Register
- AT91_REG SPI_PTCR; // PDC Transfer Control Register
- AT91_REG SPI_PTSR; // PDC Transfer Status Register
- } AT91S_SPI, *AT91PS_SPI;
- #else
- #define SPI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SPI_CR) Control Register
- #define SPI_MR (AT91_CAST(AT91_REG *) 0x00000004) // (SPI_MR) Mode Register
- #define SPI_RDR (AT91_CAST(AT91_REG *) 0x00000008) // (SPI_RDR) Receive Data Register
- #define SPI_TDR (AT91_CAST(AT91_REG *) 0x0000000C) // (SPI_TDR) Transmit Data Register
- #define SPI_SR (AT91_CAST(AT91_REG *) 0x00000010) // (SPI_SR) Status Register
- #define SPI_IER (AT91_CAST(AT91_REG *) 0x00000014) // (SPI_IER) Interrupt Enable Register
- #define SPI_IDR (AT91_CAST(AT91_REG *) 0x00000018) // (SPI_IDR) Interrupt Disable Register
- #define SPI_IMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SPI_IMR) Interrupt Mask Register
- #define SPI_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (SPI_CSR) Chip Select Register
- #endif
- // -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register --------
- #define AT91C_SPI_SPIEN (0x1 << 0) // (SPI) SPI Enable
- #define AT91C_SPI_SPIDIS (0x1 << 1) // (SPI) SPI Disable
- #define AT91C_SPI_SWRST (0x1 << 7) // (SPI) SPI Software reset
- #define AT91C_SPI_LASTXFER (0x1 << 24) // (SPI) SPI Last Transfer
- // -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register --------
- #define AT91C_SPI_MSTR (0x1 << 0) // (SPI) Master/Slave Mode
- #define AT91C_SPI_PS (0x1 << 1) // (SPI) Peripheral Select
- #define AT91C_SPI_PS_FIXED (0x0 << 1) // (SPI) Fixed Peripheral Select
- #define AT91C_SPI_PS_VARIABLE (0x1 << 1) // (SPI) Variable Peripheral Select
- #define AT91C_SPI_PCSDEC (0x1 << 2) // (SPI) Chip Select Decode
- #define AT91C_SPI_FDIV (0x1 << 3) // (SPI) Clock Selection
- #define AT91C_SPI_MODFDIS (0x1 << 4) // (SPI) Mode Fault Detection
- #define AT91C_SPI_LLB (0x1 << 7) // (SPI) Clock Selection
- #define AT91C_SPI_PCS (0xF << 16) // (SPI) Peripheral Chip Select
- #define AT91C_SPI_DLYBCS (0xFF << 24) // (SPI) Delay Between Chip Selects
- // -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register --------
- #define AT91C_SPI_RD (0xFFFF << 0) // (SPI) Receive Data
- #define AT91C_SPI_RPCS (0xF << 16) // (SPI) Peripheral Chip Select Status
- // -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register --------
- #define AT91C_SPI_TD (0xFFFF << 0) // (SPI) Transmit Data
- #define AT91C_SPI_TPCS (0xF << 16) // (SPI) Peripheral Chip Select Status
- // -------- SPI_SR : (SPI Offset: 0x10) Status Register --------
- #define AT91C_SPI_RDRF (0x1 << 0) // (SPI) Receive Data Register Full
- #define AT91C_SPI_TDRE (0x1 << 1) // (SPI) Transmit Data Register Empty
- #define AT91C_SPI_MODF (0x1 << 2) // (SPI) Mode Fault Error
- #define AT91C_SPI_OVRES (0x1 << 3) // (SPI) Overrun Error Status
- #define AT91C_SPI_ENDRX (0x1 << 4) // (SPI) End of Receiver Transfer
- #define AT91C_SPI_ENDTX (0x1 << 5) // (SPI) End of Receiver Transfer
- #define AT91C_SPI_RXBUFF (0x1 << 6) // (SPI) RXBUFF Interrupt
- #define AT91C_SPI_TXBUFE (0x1 << 7) // (SPI) TXBUFE Interrupt
- #define AT91C_SPI_NSSR (0x1 << 8) // (SPI) NSSR Interrupt
- #define AT91C_SPI_TXEMPTY (0x1 << 9) // (SPI) TXEMPTY Interrupt
- #define AT91C_SPI_SPIENS (0x1 << 16) // (SPI) Enable Status
- // -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register --------
- // -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register --------
- // -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register --------
- // -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register --------
- #define AT91C_SPI_CPOL (0x1 << 0) // (SPI) Clock Polarity
- #define AT91C_SPI_NCPHA (0x1 << 1) // (SPI) Clock Phase
- #define AT91C_SPI_CSAAT (0x1 << 3) // (SPI) Chip Select Active After Transfer
- #define AT91C_SPI_BITS (0xF << 4) // (SPI) Bits Per Transfer
- #define AT91C_SPI_BITS_8 (0x0 << 4) // (SPI) 8 Bits Per transfer
- #define AT91C_SPI_BITS_9 (0x1 << 4) // (SPI) 9 Bits Per transfer
- #define AT91C_SPI_BITS_10 (0x2 << 4) // (SPI) 10 Bits Per transfer
- #define AT91C_SPI_BITS_11 (0x3 << 4) // (SPI) 11 Bits Per transfer
- #define AT91C_SPI_BITS_12 (0x4 << 4) // (SPI) 12 Bits Per transfer
- #define AT91C_SPI_BITS_13 (0x5 << 4) // (SPI) 13 Bits Per transfer
- #define AT91C_SPI_BITS_14 (0x6 << 4) // (SPI) 14 Bits Per transfer
- #define AT91C_SPI_BITS_15 (0x7 << 4) // (SPI) 15 Bits Per transfer
- #define AT91C_SPI_BITS_16 (0x8 << 4) // (SPI) 16 Bits Per transfer
- #define AT91C_SPI_SCBR (0xFF << 8) // (SPI) Serial Clock Baud Rate
- #define AT91C_SPI_DLYBS (0xFF << 16) // (SPI) Delay Before SPCK
- #define AT91C_SPI_DLYBCT (0xFF << 24) // (SPI) Delay Between Consecutive Transfers
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Usart
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_USART {
- AT91_REG US_CR; // Control Register
- AT91_REG US_MR; // Mode Register
- AT91_REG US_IER; // Interrupt Enable Register
- AT91_REG US_IDR; // Interrupt Disable Register
- AT91_REG US_IMR; // Interrupt Mask Register
- AT91_REG US_CSR; // Channel Status Register
- AT91_REG US_RHR; // Receiver Holding Register
- AT91_REG US_THR; // Transmitter Holding Register
- AT91_REG US_BRGR; // Baud Rate Generator Register
- AT91_REG US_RTOR; // Receiver Time-out Register
- AT91_REG US_TTGR; // Transmitter Time-guard Register
- AT91_REG Reserved0[5]; //
- AT91_REG US_FIDI; // FI_DI_Ratio Register
- AT91_REG US_NER; // Nb Errors Register
- AT91_REG Reserved1[1]; //
- AT91_REG US_IF; // IRDA_FILTER Register
- AT91_REG Reserved2[44]; //
- AT91_REG US_RPR; // Receive Pointer Register
- AT91_REG US_RCR; // Receive Counter Register
- AT91_REG US_TPR; // Transmit Pointer Register
- AT91_REG US_TCR; // Transmit Counter Register
- AT91_REG US_RNPR; // Receive Next Pointer Register
- AT91_REG US_RNCR; // Receive Next Counter Register
- AT91_REG US_TNPR; // Transmit Next Pointer Register
- AT91_REG US_TNCR; // Transmit Next Counter Register
- AT91_REG US_PTCR; // PDC Transfer Control Register
- AT91_REG US_PTSR; // PDC Transfer Status Register
- } AT91S_USART, *AT91PS_USART;
- #else
- #define US_CR (AT91_CAST(AT91_REG *) 0x00000000) // (US_CR) Control Register
- #define US_MR (AT91_CAST(AT91_REG *) 0x00000004) // (US_MR) Mode Register
- #define US_IER (AT91_CAST(AT91_REG *) 0x00000008) // (US_IER) Interrupt Enable Register
- #define US_IDR (AT91_CAST(AT91_REG *) 0x0000000C) // (US_IDR) Interrupt Disable Register
- #define US_IMR (AT91_CAST(AT91_REG *) 0x00000010) // (US_IMR) Interrupt Mask Register
- #define US_CSR (AT91_CAST(AT91_REG *) 0x00000014) // (US_CSR) Channel Status Register
- #define US_RHR (AT91_CAST(AT91_REG *) 0x00000018) // (US_RHR) Receiver Holding Register
- #define US_THR (AT91_CAST(AT91_REG *) 0x0000001C) // (US_THR) Transmitter Holding Register
- #define US_BRGR (AT91_CAST(AT91_REG *) 0x00000020) // (US_BRGR) Baud Rate Generator Register
- #define US_RTOR (AT91_CAST(AT91_REG *) 0x00000024) // (US_RTOR) Receiver Time-out Register
- #define US_TTGR (AT91_CAST(AT91_REG *) 0x00000028) // (US_TTGR) Transmitter Time-guard Register
- #define US_FIDI (AT91_CAST(AT91_REG *) 0x00000040) // (US_FIDI) FI_DI_Ratio Register
- #define US_NER (AT91_CAST(AT91_REG *) 0x00000044) // (US_NER) Nb Errors Register
- #define US_IF (AT91_CAST(AT91_REG *) 0x0000004C) // (US_IF) IRDA_FILTER Register
- #endif
- // -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register --------
- #define AT91C_US_STTBRK (0x1 << 9) // (USART) Start Break
- #define AT91C_US_STPBRK (0x1 << 10) // (USART) Stop Break
- #define AT91C_US_STTTO (0x1 << 11) // (USART) Start Time-out
- #define AT91C_US_SENDA (0x1 << 12) // (USART) Send Address
- #define AT91C_US_RSTIT (0x1 << 13) // (USART) Reset Iterations
- #define AT91C_US_RSTNACK (0x1 << 14) // (USART) Reset Non Acknowledge
- #define AT91C_US_RETTO (0x1 << 15) // (USART) Rearm Time-out
- #define AT91C_US_DTREN (0x1 << 16) // (USART) Data Terminal ready Enable
- #define AT91C_US_DTRDIS (0x1 << 17) // (USART) Data Terminal ready Disable
- #define AT91C_US_RTSEN (0x1 << 18) // (USART) Request to Send enable
- #define AT91C_US_RTSDIS (0x1 << 19) // (USART) Request to Send Disable
- // -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register --------
- #define AT91C_US_USMODE (0xF << 0) // (USART) Usart mode
- #define AT91C_US_USMODE_NORMAL (0x0) // (USART) Normal
- #define AT91C_US_USMODE_RS485 (0x1) // (USART) RS485
- #define AT91C_US_USMODE_HWHSH (0x2) // (USART) Hardware Handshaking
- #define AT91C_US_USMODE_MODEM (0x3) // (USART) Modem
- #define AT91C_US_USMODE_ISO7816_0 (0x4) // (USART) ISO7816 protocol: T = 0
- #define AT91C_US_USMODE_ISO7816_1 (0x6) // (USART) ISO7816 protocol: T = 1
- #define AT91C_US_USMODE_IRDA (0x8) // (USART) IrDA
- #define AT91C_US_USMODE_SWHSH (0xC) // (USART) Software Handshaking
- #define AT91C_US_CLKS (0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock
- #define AT91C_US_CLKS_CLOCK (0x0 << 4) // (USART) Clock
- #define AT91C_US_CLKS_FDIV1 (0x1 << 4) // (USART) fdiv1
- #define AT91C_US_CLKS_SLOW (0x2 << 4) // (USART) slow_clock (ARM)
- #define AT91C_US_CLKS_EXT (0x3 << 4) // (USART) External (SCK)
- #define AT91C_US_CHRL (0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock
- #define AT91C_US_CHRL_5_BITS (0x0 << 6) // (USART) Character Length: 5 bits
- #define AT91C_US_CHRL_6_BITS (0x1 << 6) // (USART) Character Length: 6 bits
- #define AT91C_US_CHRL_7_BITS (0x2 << 6) // (USART) Character Length: 7 bits
- #define AT91C_US_CHRL_8_BITS (0x3 << 6) // (USART) Character Length: 8 bits
- #define AT91C_US_SYNC (0x1 << 8) // (USART) Synchronous Mode Select
- #define AT91C_US_NBSTOP (0x3 << 12) // (USART) Number of Stop bits
- #define AT91C_US_NBSTOP_1_BIT (0x0 << 12) // (USART) 1 stop bit
- #define AT91C_US_NBSTOP_15_BIT (0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits
- #define AT91C_US_NBSTOP_2_BIT (0x2 << 12) // (USART) 2 stop bits
- #define AT91C_US_MSBF (0x1 << 16) // (USART) Bit Order
- #define AT91C_US_MODE9 (0x1 << 17) // (USART) 9-bit Character length
- #define AT91C_US_CKLO (0x1 << 18) // (USART) Clock Output Select
- #define AT91C_US_OVER (0x1 << 19) // (USART) Over Sampling Mode
- #define AT91C_US_INACK (0x1 << 20) // (USART) Inhibit Non Acknowledge
- #define AT91C_US_DSNACK (0x1 << 21) // (USART) Disable Successive NACK
- #define AT91C_US_MAX_ITER (0x1 << 24) // (USART) Number of Repetitions
- #define AT91C_US_FILTER (0x1 << 28) // (USART) Receive Line Filter
- // -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register --------
- #define AT91C_US_RXBRK (0x1 << 2) // (USART) Break Received/End of Break
- #define AT91C_US_TIMEOUT (0x1 << 8) // (USART) Receiver Time-out
- #define AT91C_US_ITERATION (0x1 << 10) // (USART) Max number of Repetitions Reached
- #define AT91C_US_NACK (0x1 << 13) // (USART) Non Acknowledge
- #define AT91C_US_RIIC (0x1 << 16) // (USART) Ring INdicator Input Change Flag
- #define AT91C_US_DSRIC (0x1 << 17) // (USART) Data Set Ready Input Change Flag
- #define AT91C_US_DCDIC (0x1 << 18) // (USART) Data Carrier Flag
- #define AT91C_US_CTSIC (0x1 << 19) // (USART) Clear To Send Input Change Flag
- // -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register --------
- // -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register --------
- // -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register --------
- #define AT91C_US_RI (0x1 << 20) // (USART) Image of RI Input
- #define AT91C_US_DSR (0x1 << 21) // (USART) Image of DSR Input
- #define AT91C_US_DCD (0x1 << 22) // (USART) Image of DCD Input
- #define AT91C_US_CTS (0x1 << 23) // (USART) Image of CTS Input
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_SSC {
- AT91_REG SSC_CR; // Control Register
- AT91_REG SSC_CMR; // Clock Mode Register
- AT91_REG Reserved0[2]; //
- AT91_REG SSC_RCMR; // Receive Clock ModeRegister
- AT91_REG SSC_RFMR; // Receive Frame Mode Register
- AT91_REG SSC_TCMR; // Transmit Clock Mode Register
- AT91_REG SSC_TFMR; // Transmit Frame Mode Register
- AT91_REG SSC_RHR; // Receive Holding Register
- AT91_REG SSC_THR; // Transmit Holding Register
- AT91_REG Reserved1[2]; //
- AT91_REG SSC_RSHR; // Receive Sync Holding Register
- AT91_REG SSC_TSHR; // Transmit Sync Holding Register
- AT91_REG Reserved2[2]; //
- AT91_REG SSC_SR; // Status Register
- AT91_REG SSC_IER; // Interrupt Enable Register
- AT91_REG SSC_IDR; // Interrupt Disable Register
- AT91_REG SSC_IMR; // Interrupt Mask Register
- AT91_REG Reserved3[44]; //
- AT91_REG SSC_RPR; // Receive Pointer Register
- AT91_REG SSC_RCR; // Receive Counter Register
- AT91_REG SSC_TPR; // Transmit Pointer Register
- AT91_REG SSC_TCR; // Transmit Counter Register
- AT91_REG SSC_RNPR; // Receive Next Pointer Register
- AT91_REG SSC_RNCR; // Receive Next Counter Register
- AT91_REG SSC_TNPR; // Transmit Next Pointer Register
- AT91_REG SSC_TNCR; // Transmit Next Counter Register
- AT91_REG SSC_PTCR; // PDC Transfer Control Register
- AT91_REG SSC_PTSR; // PDC Transfer Status Register
- } AT91S_SSC, *AT91PS_SSC;
- #else
- #define SSC_CR (AT91_CAST(AT91_REG *) 0x00000000) // (SSC_CR) Control Register
- #define SSC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (SSC_CMR) Clock Mode Register
- #define SSC_RCMR (AT91_CAST(AT91_REG *) 0x00000010) // (SSC_RCMR) Receive Clock ModeRegister
- #define SSC_RFMR (AT91_CAST(AT91_REG *) 0x00000014) // (SSC_RFMR) Receive Frame Mode Register
- #define SSC_TCMR (AT91_CAST(AT91_REG *) 0x00000018) // (SSC_TCMR) Transmit Clock Mode Register
- #define SSC_TFMR (AT91_CAST(AT91_REG *) 0x0000001C) // (SSC_TFMR) Transmit Frame Mode Register
- #define SSC_RHR (AT91_CAST(AT91_REG *) 0x00000020) // (SSC_RHR) Receive Holding Register
- #define SSC_THR (AT91_CAST(AT91_REG *) 0x00000024) // (SSC_THR) Transmit Holding Register
- #define SSC_RSHR (AT91_CAST(AT91_REG *) 0x00000030) // (SSC_RSHR) Receive Sync Holding Register
- #define SSC_TSHR (AT91_CAST(AT91_REG *) 0x00000034) // (SSC_TSHR) Transmit Sync Holding Register
- #define SSC_SR (AT91_CAST(AT91_REG *) 0x00000040) // (SSC_SR) Status Register
- #define SSC_IER (AT91_CAST(AT91_REG *) 0x00000044) // (SSC_IER) Interrupt Enable Register
- #define SSC_IDR (AT91_CAST(AT91_REG *) 0x00000048) // (SSC_IDR) Interrupt Disable Register
- #define SSC_IMR (AT91_CAST(AT91_REG *) 0x0000004C) // (SSC_IMR) Interrupt Mask Register
- #endif
- // -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register --------
- #define AT91C_SSC_RXEN (0x1 << 0) // (SSC) Receive Enable
- #define AT91C_SSC_RXDIS (0x1 << 1) // (SSC) Receive Disable
- #define AT91C_SSC_TXEN (0x1 << 8) // (SSC) Transmit Enable
- #define AT91C_SSC_TXDIS (0x1 << 9) // (SSC) Transmit Disable
- #define AT91C_SSC_SWRST (0x1 << 15) // (SSC) Software Reset
- // -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register --------
- #define AT91C_SSC_CKS (0x3 << 0) // (SSC) Receive/Transmit Clock Selection
- #define AT91C_SSC_CKS_DIV (0x0) // (SSC) Divided Clock
- #define AT91C_SSC_CKS_TK (0x1) // (SSC) TK Clock signal
- #define AT91C_SSC_CKS_RK (0x2) // (SSC) RK pin
- #define AT91C_SSC_CKO (0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection
- #define AT91C_SSC_CKO_NONE (0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only
- #define AT91C_SSC_CKO_CONTINOUS (0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output
- #define AT91C_SSC_CKO_DATA_TX (0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output
- #define AT91C_SSC_CKI (0x1 << 5) // (SSC) Receive/Transmit Clock Inversion
- #define AT91C_SSC_CKG (0x3 << 6) // (SSC) Receive/Transmit Clock Gating Selection
- #define AT91C_SSC_CKG_NONE (0x0 << 6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock
- #define AT91C_SSC_CKG_LOW (0x1 << 6) // (SSC) Receive/Transmit Clock enabled only if RF Low
- #define AT91C_SSC_CKG_HIGH (0x2 << 6) // (SSC) Receive/Transmit Clock enabled only if RF High
- #define AT91C_SSC_START (0xF << 8) // (SSC) Receive/Transmit Start Selection
- #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.
- #define AT91C_SSC_START_TX (0x1 << 8) // (SSC) Transmit/Receive start
- #define AT91C_SSC_START_LOW_RF (0x2 << 8) // (SSC) Detection of a low level on RF input
- #define AT91C_SSC_START_HIGH_RF (0x3 << 8) // (SSC) Detection of a high level on RF input
- #define AT91C_SSC_START_FALL_RF (0x4 << 8) // (SSC) Detection of a falling edge on RF input
- #define AT91C_SSC_START_RISE_RF (0x5 << 8) // (SSC) Detection of a rising edge on RF input
- #define AT91C_SSC_START_LEVEL_RF (0x6 << 8) // (SSC) Detection of any level change on RF input
- #define AT91C_SSC_START_EDGE_RF (0x7 << 8) // (SSC) Detection of any edge on RF input
- #define AT91C_SSC_START_0 (0x8 << 8) // (SSC) Compare 0
- #define AT91C_SSC_STOP (0x1 << 12) // (SSC) Receive Stop Selection
- #define AT91C_SSC_STTDLY (0xFF << 16) // (SSC) Receive/Transmit Start Delay
- #define AT91C_SSC_PERIOD (0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection
- // -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register --------
- #define AT91C_SSC_DATLEN (0x1F << 0) // (SSC) Data Length
- #define AT91C_SSC_LOOP (0x1 << 5) // (SSC) Loop Mode
- #define AT91C_SSC_MSBF (0x1 << 7) // (SSC) Most Significant Bit First
- #define AT91C_SSC_DATNB (0xF << 8) // (SSC) Data Number per Frame
- #define AT91C_SSC_FSLEN (0xF << 16) // (SSC) Receive/Transmit Frame Sync length
- #define AT91C_SSC_FSOS (0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection
- #define AT91C_SSC_FSOS_NONE (0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only
- #define AT91C_SSC_FSOS_NEGATIVE (0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse
- #define AT91C_SSC_FSOS_POSITIVE (0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse
- #define AT91C_SSC_FSOS_LOW (0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer
- #define AT91C_SSC_FSOS_HIGH (0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer
- #define AT91C_SSC_FSOS_TOGGLE (0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer
- #define AT91C_SSC_FSEDGE (0x1 << 24) // (SSC) Frame Sync Edge Detection
- // -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register --------
- // -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register --------
- #define AT91C_SSC_DATDEF (0x1 << 5) // (SSC) Data Default Value
- #define AT91C_SSC_FSDEN (0x1 << 23) // (SSC) Frame Sync Data Enable
- // -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register --------
- #define AT91C_SSC_TXRDY (0x1 << 0) // (SSC) Transmit Ready
- #define AT91C_SSC_TXEMPTY (0x1 << 1) // (SSC) Transmit Empty
- #define AT91C_SSC_ENDTX (0x1 << 2) // (SSC) End Of Transmission
- #define AT91C_SSC_TXBUFE (0x1 << 3) // (SSC) Transmit Buffer Empty
- #define AT91C_SSC_RXRDY (0x1 << 4) // (SSC) Receive Ready
- #define AT91C_SSC_OVRUN (0x1 << 5) // (SSC) Receive Overrun
- #define AT91C_SSC_ENDRX (0x1 << 6) // (SSC) End of Reception
- #define AT91C_SSC_RXBUFF (0x1 << 7) // (SSC) Receive Buffer Full
- #define AT91C_SSC_CP0 (0x1 << 8) // (SSC) Compare 0
- #define AT91C_SSC_CP1 (0x1 << 9) // (SSC) Compare 1
- #define AT91C_SSC_TXSYN (0x1 << 10) // (SSC) Transmit Sync
- #define AT91C_SSC_RXSYN (0x1 << 11) // (SSC) Receive Sync
- #define AT91C_SSC_TXENA (0x1 << 16) // (SSC) Transmit Enable
- #define AT91C_SSC_RXENA (0x1 << 17) // (SSC) Receive Enable
- // -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register --------
- // -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register --------
- // -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register --------
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Two-wire Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_TWI {
- AT91_REG TWI_CR; // Control Register
- AT91_REG TWI_MMR; // Master Mode Register
- AT91_REG Reserved0[1]; //
- AT91_REG TWI_IADR; // Internal Address Register
- AT91_REG TWI_CWGR; // Clock Waveform Generator Register
- AT91_REG Reserved1[3]; //
- AT91_REG TWI_SR; // Status Register
- AT91_REG TWI_IER; // Interrupt Enable Register
- AT91_REG TWI_IDR; // Interrupt Disable Register
- AT91_REG TWI_IMR; // Interrupt Mask Register
- AT91_REG TWI_RHR; // Receive Holding Register
- AT91_REG TWI_THR; // Transmit Holding Register
- AT91_REG Reserved2[50]; //
- AT91_REG TWI_RPR; // Receive Pointer Register
- AT91_REG TWI_RCR; // Receive Counter Register
- AT91_REG TWI_TPR; // Transmit Pointer Register
- AT91_REG TWI_TCR; // Transmit Counter Register
- AT91_REG TWI_RNPR; // Receive Next Pointer Register
- AT91_REG TWI_RNCR; // Receive Next Counter Register
- AT91_REG TWI_TNPR; // Transmit Next Pointer Register
- AT91_REG TWI_TNCR; // Transmit Next Counter Register
- AT91_REG TWI_PTCR; // PDC Transfer Control Register
- AT91_REG TWI_PTSR; // PDC Transfer Status Register
- } AT91S_TWI, *AT91PS_TWI;
- #else
- #define TWI_CR (AT91_CAST(AT91_REG *) 0x00000000) // (TWI_CR) Control Register
- #define TWI_MMR (AT91_CAST(AT91_REG *) 0x00000004) // (TWI_MMR) Master Mode Register
- #define TWI_IADR (AT91_CAST(AT91_REG *) 0x0000000C) // (TWI_IADR) Internal Address Register
- #define TWI_CWGR (AT91_CAST(AT91_REG *) 0x00000010) // (TWI_CWGR) Clock Waveform Generator Register
- #define TWI_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TWI_SR) Status Register
- #define TWI_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TWI_IER) Interrupt Enable Register
- #define TWI_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TWI_IDR) Interrupt Disable Register
- #define TWI_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TWI_IMR) Interrupt Mask Register
- #define TWI_RHR (AT91_CAST(AT91_REG *) 0x00000030) // (TWI_RHR) Receive Holding Register
- #define TWI_THR (AT91_CAST(AT91_REG *) 0x00000034) // (TWI_THR) Transmit Holding Register
- #endif
- // -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register --------
- #define AT91C_TWI_START (0x1 << 0) // (TWI) Send a START Condition
- #define AT91C_TWI_STOP (0x1 << 1) // (TWI) Send a STOP Condition
- #define AT91C_TWI_MSEN (0x1 << 2) // (TWI) TWI Master Transfer Enabled
- #define AT91C_TWI_MSDIS (0x1 << 3) // (TWI) TWI Master Transfer Disabled
- #define AT91C_TWI_SWRST (0x1 << 7) // (TWI) Software Reset
- // -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register --------
- #define AT91C_TWI_IADRSZ (0x3 << 8) // (TWI) Internal Device Address Size
- #define AT91C_TWI_IADRSZ_NO (0x0 << 8) // (TWI) No internal device address
- #define AT91C_TWI_IADRSZ_1_BYTE (0x1 << 8) // (TWI) One-byte internal device address
- #define AT91C_TWI_IADRSZ_2_BYTE (0x2 << 8) // (TWI) Two-byte internal device address
- #define AT91C_TWI_IADRSZ_3_BYTE (0x3 << 8) // (TWI) Three-byte internal device address
- #define AT91C_TWI_MREAD (0x1 << 12) // (TWI) Master Read Direction
- #define AT91C_TWI_DADR (0x7F << 16) // (TWI) Device Address
- // -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register --------
- #define AT91C_TWI_CLDIV (0xFF << 0) // (TWI) Clock Low Divider
- #define AT91C_TWI_CHDIV (0xFF << 8) // (TWI) Clock High Divider
- #define AT91C_TWI_CKDIV (0x7 << 16) // (TWI) Clock Divider
- // -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register --------
- #define AT91C_TWI_TXCOMP (0x1 << 0) // (TWI) Transmission Completed
- #define AT91C_TWI_RXRDY (0x1 << 1) // (TWI) Receive holding register ReaDY
- #define AT91C_TWI_TXRDY (0x1 << 2) // (TWI) Transmit holding register ReaDY
- #define AT91C_TWI_OVRE (0x1 << 6) // (TWI) Overrun Error
- #define AT91C_TWI_UNRE (0x1 << 7) // (TWI) Underrun Error
- #define AT91C_TWI_NACK (0x1 << 8) // (TWI) Not Acknowledged
- #define AT91C_TWI_ENDRX (0x1 << 12) // (TWI)
- #define AT91C_TWI_ENDTX (0x1 << 13) // (TWI)
- #define AT91C_TWI_RXBUFF (0x1 << 14) // (TWI)
- #define AT91C_TWI_TXBUFE (0x1 << 15) // (TWI)
- // -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register --------
- // -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register --------
- // -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register --------
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR PWMC Channel Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_PWMC_CH {
- AT91_REG PWMC_CMR; // Channel Mode Register
- AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register
- AT91_REG PWMC_CPRDR; // Channel Period Register
- AT91_REG PWMC_CCNTR; // Channel Counter Register
- AT91_REG PWMC_CUPDR; // Channel Update Register
- AT91_REG PWMC_Reserved[3]; // Reserved
- } AT91S_PWMC_CH, *AT91PS_PWMC_CH;
- #else
- #define PWMC_CMR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_CMR) Channel Mode Register
- #define PWMC_CDTYR (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_CDTYR) Channel Duty Cycle Register
- #define PWMC_CPRDR (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_CPRDR) Channel Period Register
- #define PWMC_CCNTR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_CCNTR) Channel Counter Register
- #define PWMC_CUPDR (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_CUPDR) Channel Update Register
- #define Reserved (AT91_CAST(AT91_REG *) 0x00000014) // (Reserved) Reserved
- #endif
- // -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register --------
- #define AT91C_PWMC_CPRE (0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx
- #define AT91C_PWMC_CPRE_MCK (0x0) // (PWMC_CH)
- #define AT91C_PWMC_CPRE_MCKA (0xB) // (PWMC_CH)
- #define AT91C_PWMC_CPRE_MCKB (0xC) // (PWMC_CH)
- #define AT91C_PWMC_CALG (0x1 << 8) // (PWMC_CH) Channel Alignment
- #define AT91C_PWMC_CPOL (0x1 << 9) // (PWMC_CH) Channel Polarity
- #define AT91C_PWMC_CPD (0x1 << 10) // (PWMC_CH) Channel Update Period
- // -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register --------
- #define AT91C_PWMC_CDTY (0x0 << 0) // (PWMC_CH) Channel Duty Cycle
- // -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register --------
- #define AT91C_PWMC_CPRD (0x0 << 0) // (PWMC_CH) Channel Period
- // -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register --------
- #define AT91C_PWMC_CCNT (0x0 << 0) // (PWMC_CH) Channel Counter
- // -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register --------
- #define AT91C_PWMC_CUPD (0x0 << 0) // (PWMC_CH) Channel Update
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_PWMC {
- AT91_REG PWMC_MR; // PWMC Mode Register
- AT91_REG PWMC_ENA; // PWMC Enable Register
- AT91_REG PWMC_DIS; // PWMC Disable Register
- AT91_REG PWMC_SR; // PWMC Status Register
- AT91_REG PWMC_IER; // PWMC Interrupt Enable Register
- AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register
- AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register
- AT91_REG PWMC_ISR; // PWMC Interrupt Status Register
- AT91_REG Reserved0[55]; //
- AT91_REG PWMC_VR; // PWMC Version Register
- AT91_REG Reserved1[64]; //
- AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel
- } AT91S_PWMC, *AT91PS_PWMC;
- #else
- #define PWMC_MR (AT91_CAST(AT91_REG *) 0x00000000) // (PWMC_MR) PWMC Mode Register
- #define PWMC_ENA (AT91_CAST(AT91_REG *) 0x00000004) // (PWMC_ENA) PWMC Enable Register
- #define PWMC_DIS (AT91_CAST(AT91_REG *) 0x00000008) // (PWMC_DIS) PWMC Disable Register
- #define PWMC_SR (AT91_CAST(AT91_REG *) 0x0000000C) // (PWMC_SR) PWMC Status Register
- #define PWMC_IER (AT91_CAST(AT91_REG *) 0x00000010) // (PWMC_IER) PWMC Interrupt Enable Register
- #define PWMC_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (PWMC_IDR) PWMC Interrupt Disable Register
- #define PWMC_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (PWMC_IMR) PWMC Interrupt Mask Register
- #define PWMC_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (PWMC_ISR) PWMC Interrupt Status Register
- #define PWMC_VR (AT91_CAST(AT91_REG *) 0x000000FC) // (PWMC_VR) PWMC Version Register
- #endif
- // -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register --------
- #define AT91C_PWMC_DIVA (0xFF << 0) // (PWMC) CLKA divide factor.
- #define AT91C_PWMC_PREA (0xF << 8) // (PWMC) Divider Input Clock Prescaler A
- #define AT91C_PWMC_PREA_MCK (0x0 << 8) // (PWMC)
- #define AT91C_PWMC_DIVB (0xFF << 16) // (PWMC) CLKB divide factor.
- #define AT91C_PWMC_PREB (0xF << 24) // (PWMC) Divider Input Clock Prescaler B
- #define AT91C_PWMC_PREB_MCK (0x0 << 24) // (PWMC)
- // -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register --------
- #define AT91C_PWMC_CHID0 (0x1 << 0) // (PWMC) Channel ID 0
- #define AT91C_PWMC_CHID1 (0x1 << 1) // (PWMC) Channel ID 1
- #define AT91C_PWMC_CHID2 (0x1 << 2) // (PWMC) Channel ID 2
- #define AT91C_PWMC_CHID3 (0x1 << 3) // (PWMC) Channel ID 3
- // -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register --------
- // -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register --------
- // -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register --------
- // -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register --------
- // -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register --------
- // -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register --------
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR USB Device Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_UDP {
- AT91_REG UDP_NUM; // Frame Number Register
- AT91_REG UDP_GLBSTATE; // Global State Register
- AT91_REG UDP_FADDR; // Function Address Register
- AT91_REG Reserved0[1]; //
- AT91_REG UDP_IER; // Interrupt Enable Register
- AT91_REG UDP_IDR; // Interrupt Disable Register
- AT91_REG UDP_IMR; // Interrupt Mask Register
- AT91_REG UDP_ISR; // Interrupt Status Register
- AT91_REG UDP_ICR; // Interrupt Clear Register
- AT91_REG Reserved1[1]; //
- AT91_REG UDP_RSTEP; // Reset Endpoint Register
- AT91_REG Reserved2[1]; //
- AT91_REG UDP_CSR[6]; // Endpoint Control and Status Register
- AT91_REG Reserved3[2]; //
- AT91_REG UDP_FDR[6]; // Endpoint FIFO Data Register
- AT91_REG Reserved4[3]; //
- AT91_REG UDP_TXVC; // Transceiver Control Register
- } AT91S_UDP, *AT91PS_UDP;
- #else
- #define UDP_FRM_NUM (AT91_CAST(AT91_REG *) 0x00000000) // (UDP_FRM_NUM) Frame Number Register
- #define UDP_GLBSTATE (AT91_CAST(AT91_REG *) 0x00000004) // (UDP_GLBSTATE) Global State Register
- #define UDP_FADDR (AT91_CAST(AT91_REG *) 0x00000008) // (UDP_FADDR) Function Address Register
- #define UDP_IER (AT91_CAST(AT91_REG *) 0x00000010) // (UDP_IER) Interrupt Enable Register
- #define UDP_IDR (AT91_CAST(AT91_REG *) 0x00000014) // (UDP_IDR) Interrupt Disable Register
- #define UDP_IMR (AT91_CAST(AT91_REG *) 0x00000018) // (UDP_IMR) Interrupt Mask Register
- #define UDP_ISR (AT91_CAST(AT91_REG *) 0x0000001C) // (UDP_ISR) Interrupt Status Register
- #define UDP_ICR (AT91_CAST(AT91_REG *) 0x00000020) // (UDP_ICR) Interrupt Clear Register
- #define UDP_RSTEP (AT91_CAST(AT91_REG *) 0x00000028) // (UDP_RSTEP) Reset Endpoint Register
- #define UDP_CSR (AT91_CAST(AT91_REG *) 0x00000030) // (UDP_CSR) Endpoint Control and Status Register
- #define UDP_FDR (AT91_CAST(AT91_REG *) 0x00000050) // (UDP_FDR) Endpoint FIFO Data Register
- #define UDP_TXVC (AT91_CAST(AT91_REG *) 0x00000074) // (UDP_TXVC) Transceiver Control Register
- #endif
- // -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register --------
- #define AT91C_UDP_FRM_NUM (0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats
- #define AT91C_UDP_FRM_ERR (0x1 << 16) // (UDP) Frame Error
- #define AT91C_UDP_FRM_OK (0x1 << 17) // (UDP) Frame OK
- // -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register --------
- #define AT91C_UDP_FADDEN (0x1 << 0) // (UDP) Function Address Enable
- #define AT91C_UDP_CONFG (0x1 << 1) // (UDP) Configured
- #define AT91C_UDP_ESR (0x1 << 2) // (UDP) Enable Send Resume
- #define AT91C_UDP_RSMINPR (0x1 << 3) // (UDP) A Resume Has Been Sent to the Host
- #define AT91C_UDP_RMWUPE (0x1 << 4) // (UDP) Remote Wake Up Enable
- // -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register --------
- #define AT91C_UDP_FADD (0xFF << 0) // (UDP) Function Address Value
- #define AT91C_UDP_FEN (0x1 << 8) // (UDP) Function Enable
- // -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register --------
- #define AT91C_UDP_EPINT0 (0x1 << 0) // (UDP) Endpoint 0 Interrupt
- #define AT91C_UDP_EPINT1 (0x1 << 1) // (UDP) Endpoint 0 Interrupt
- #define AT91C_UDP_EPINT2 (0x1 << 2) // (UDP) Endpoint 2 Interrupt
- #define AT91C_UDP_EPINT3 (0x1 << 3) // (UDP) Endpoint 3 Interrupt
- #define AT91C_UDP_EPINT4 (0x1 << 4) // (UDP) Endpoint 4 Interrupt
- #define AT91C_UDP_EPINT5 (0x1 << 5) // (UDP) Endpoint 5 Interrupt
- #define AT91C_UDP_RXSUSP (0x1 << 8) // (UDP) USB Suspend Interrupt
- #define AT91C_UDP_RXRSM (0x1 << 9) // (UDP) USB Resume Interrupt
- #define AT91C_UDP_EXTRSM (0x1 << 10) // (UDP) USB External Resume Interrupt
- #define AT91C_UDP_SOFINT (0x1 << 11) // (UDP) USB Start Of frame Interrupt
- #define AT91C_UDP_WAKEUP (0x1 << 13) // (UDP) USB Resume Interrupt
- // -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register --------
- // -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register --------
- // -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register --------
- #define AT91C_UDP_ENDBUSRES (0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt
- // -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register --------
- // -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register --------
- #define AT91C_UDP_EP0 (0x1 << 0) // (UDP) Reset Endpoint 0
- #define AT91C_UDP_EP1 (0x1 << 1) // (UDP) Reset Endpoint 1
- #define AT91C_UDP_EP2 (0x1 << 2) // (UDP) Reset Endpoint 2
- #define AT91C_UDP_EP3 (0x1 << 3) // (UDP) Reset Endpoint 3
- #define AT91C_UDP_EP4 (0x1 << 4) // (UDP) Reset Endpoint 4
- #define AT91C_UDP_EP5 (0x1 << 5) // (UDP) Reset Endpoint 5
- // -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register --------
- #define AT91C_UDP_TXCOMP (0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR
- #define AT91C_UDP_RX_DATA_BK0 (0x1 << 1) // (UDP) Receive Data Bank 0
- #define AT91C_UDP_RXSETUP (0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints)
- #define AT91C_UDP_ISOERROR (0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints)
- #define AT91C_UDP_STALLSENT (0x1 << 3) // (UDP) Stall sent (Control, bulk, interrupt endpoints)
- #define AT91C_UDP_TXPKTRDY (0x1 << 4) // (UDP) Transmit Packet Ready
- #define AT91C_UDP_FORCESTALL (0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints).
- #define AT91C_UDP_RX_DATA_BK1 (0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes).
- #define AT91C_UDP_DIR (0x1 << 7) // (UDP) Transfer Direction
- #define AT91C_UDP_EPTYPE (0x7 << 8) // (UDP) Endpoint type
- #define AT91C_UDP_EPTYPE_CTRL (0x0 << 8) // (UDP) Control
- #define AT91C_UDP_EPTYPE_ISO_OUT (0x1 << 8) // (UDP) Isochronous OUT
- #define AT91C_UDP_EPTYPE_BULK_OUT (0x2 << 8) // (UDP) Bulk OUT
- #define AT91C_UDP_EPTYPE_INT_OUT (0x3 << 8) // (UDP) Interrupt OUT
- #define AT91C_UDP_EPTYPE_ISO_IN (0x5 << 8) // (UDP) Isochronous IN
- #define AT91C_UDP_EPTYPE_BULK_IN (0x6 << 8) // (UDP) Bulk IN
- #define AT91C_UDP_EPTYPE_INT_IN (0x7 << 8) // (UDP) Interrupt IN
- #define AT91C_UDP_DTGLE (0x1 << 11) // (UDP) Data Toggle
- #define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable
- #define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO
- // -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register --------
- #define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP)
- // *****************************************************************************
- // SOFTWARE API DEFINITION FOR Timer Counter Channel Interface
- // *****************************************************************************
- #ifndef __ASSEMBLY__
- typedef struct _AT91S_TC {
- AT91_REG TC_CCR; // Channel Control Register
- AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode)
- AT91_REG Reserved0[2]; //
- AT91_REG TC_CV; // Counter Value
- AT91_REG TC_RA; // Register A
- AT91_REG TC_RB; // Register B
- AT91_REG TC_RC; // Register C
- AT91_REG TC_SR; // Status Register
- AT91_REG TC_IER; // Interrupt Enable Register
- AT91_REG TC_IDR; // Interrupt Disable Register
- AT91_REG TC_IMR; // Interrupt Mask Register
- } AT91S_TC, *AT91PS_TC;
- #else
- #define TC_CCR (AT91_CAST(AT91_REG *) 0x00000000) // (TC_CCR) Channel Control Register
- #define TC_CMR (AT91_CAST(AT91_REG *) 0x00000004) // (TC_CMR) Channel Mode Register (Capture Mode / Waveform Mode)
- #define TC_CV (AT91_CAST(AT91_REG *) 0x00000010) // (TC_CV) Counter Value
- #define TC_RA (AT91_CAST(AT91_REG *) 0x00000014) // (TC_RA) Register A
- #define TC_RB (AT91_CAST(AT91_REG *) 0x00000018) // (TC_RB) Register B
- #define TC_RC (AT91_CAST(AT91_REG *) 0x0000001C) // (TC_RC) Register C
- #define TC_SR (AT91_CAST(AT91_REG *) 0x00000020) // (TC_SR) Status Register
- #define TC_IER (AT91_CAST(AT91_REG *) 0x00000024) // (TC_IER) Interrupt Enable Register
- #define TC_IDR (AT91_CAST(AT91_REG *) 0x00000028) // (TC_IDR) Interrupt Disable Register
- #define TC_IMR (AT91_CAST(AT91_REG *) 0x0000002C) // (TC_IMR) Interrupt Mask Register
- #endif