⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at91.h

📁 avr上的RTOS
💻 H
📖 第 1 页 / 共 3 页
字号:
#define TC_BCR          (TC_BASE + 0xC0)        /*!< \brief Block control register address. */#define TC_SYNC                 0x00000001      /*!< \brief Synchronisation trigger *//*@}*//*! \name Timer Counter Block Mode Register *//*@{*/#define TC_BMR          (TC_BASE + 0xC4)        /*!< \brief Block mode register address. */#define TC_TC0XC0S              0x00000003      /*!< \brief External clock signal 0 selection mask. */#define TC_TCLK0XC0             0x00000000      /*!< \brief Selects TCLK0. */#define TC_NONEXC0              0x00000001      /*!< \brief None selected. */#define TC_TIOA1XC0             0x00000002      /*!< \brief Selects TIOA1. */#define TC_TIOA2XC0             0x00000003      /*!< \brief Selects TIOA2. */#define TC_TC1XC1S              0x0000000C      /*!< \brief External clock signal 1 selection mask. */#define TC_TCLK1XC1             0x00000000      /*!< \brief Selects TCLK1. */#define TC_NONEXC1              0x00000004      /*!< \brief None selected. */#define TC_TIOA0XC1             0x00000008      /*!< \brief Selects TIOA0. */#define TC_TIOA2XC1             0x0000000C      /*!< \brief Selects TIOA2. */#define TC_TC2XC2S              0x00000030      /*!< \brief External clock signal 2 selection mask. */#define TC_TCLK2XC2             0x00000000      /*!< \brief Selects TCLK2. */#define TC_NONEXC2              0x00000010      /*!< \brief None selected. */#define TC_TIOA0XC2             0x00000020      /*!< \brief Selects TIOA0. */#define TC_TIOA1XC2             0x00000030      /*!< \brief Selects TIOA1. *//*@}*//*@} xgNutArchArmAt91Tc *//*! * \addtogroup xgNutArchArmAt91Pio *//*@{*/#define PIO_BASE    0xFFFF0000  /*!< \brief PIO base address. */#define PIO_PER     (PIO_BASE + 0x00)   /*!< \brief PIO enable register. */#define PIO_PDR     (PIO_BASE + 0x04)   /*!< \brief PIO disable register. */#define PIO_PSR     (PIO_BASE + 0x08)   /*!< \brief PIO status register. */#define PIO_OER     (PIO_BASE + 0x10)   /*!< \brief Output enable register. */#define PIO_ODR     (PIO_BASE + 0x14)   /*!< \brief Output disable register. */#define PIO_OSR     (PIO_BASE + 0x18)   /*!< \brief Output status register. */#define PIO_IFER    (PIO_BASE + 0x20)   /*!< \brief Input filter enable register. */#define PIO_IFDR    (PIO_BASE + 0x24)   /*!< \brief Input filter disable register. */#define PIO_IFSR    (PIO_BASE + 0x28)   /*!< \brief Input filter status register. */#define PIO_SODR    (PIO_BASE + 0x30)   /*!< \brief Set output data register. */#define PIO_CODR    (PIO_BASE + 0x34)   /*!< \brief Clear output data register. */#define PIO_ODSR    (PIO_BASE + 0x38)   /*!< \brief Output data status register. */#define PIO_PDSR    (PIO_BASE + 0x3C)   /*!< \brief Pin data status register. */#define PIO_IER     (PIO_BASE + 0x40)   /*!< \brief Interrupt enable register. */#define PIO_IDR     (PIO_BASE + 0x44)   /*!< \brief Interrupt disable register. */#define PIO_IMR     (PIO_BASE + 0x48)   /*!< \brief Interrupt mask register. */#define PIO_ISR     (PIO_BASE + 0x4C)   /*!< \brief Interrupt status register. *//*@} xgNutArchArmAt91Pio *//*! * \addtogroup xgNutArchArmAt91Ps *//*@{*/#define PS_BASE     0xFFFF4000  /*!< \brief PS base address. *//*! * \name PS Control Register *//*@{*//*! \brief Register address. * * This register allows to stop the CPU clock. The clock is automatically * enabled after reset and by any interrupt. */#define PS_CR       (PS_BASE + 0x00)/*@}*//*! * \name Peripheral Clock Control Registers *//*@{*/#define PS_PCER     (PS_BASE + 0x04)    /*!< \brief Peripheral clock enable register address. */#define PS_PCDR     (PS_BASE + 0x08)    /*!< \brief Peripheral clock disable register address. */#define PS_PCSR     (PS_BASE + 0x0C)    /*!< \brief Peripheral clock status register address. *//*@}*//*@} xgNutArchArmAt91Ps *//*! * \addtogroup xgNutArchArmAt91Wd *//*@{*/#define WD_BASE     0xFFFF8000  /*!< \brief Watch Dog register base address. *//*! \name Watch Dog Overflow Mode Register *//*@{*/#define WD_OMR          (WD_BASE + 0x00)        /*!< \brief Overflow mode register address. */#define WD_WDEN                 0x00000001      /*!< \brief Watch Dog enable. */#define WD_RSTEN                0x00000002      /*!< \brief Internal reset enable. */#define WD_IRQEN                0x00000004      /*!< \brief Interrupt enable. */#define WD_EXTEN                0x00000008      /*!< \brief External signal enable. */#define WD_OKEY                 0x00002340      /*!< \brief Overflow mode register access key. *//*@}*//*! \name Watch Dog Clock Register *//*@{*/#define WD_CMR          (WD_BASE + 0x04)        /*!< \brief Clock mode register address. */#define WD_WDCLKS               0x00000003      /*!< \brief Clock selection mask. */#define WD_WDCLKS_MCK8          0x00000000      /*!< \brief Selects MCK/8. */#define WD_WDCLKS_MCK32         0x00000001      /*!< \brief Selects MCK/32. */#define WD_WDCLKS_MCK128        0x00000002      /*!< \brief Selects MCK/128. */#define WD_WDCLKS_MCK1024       0x00000003      /*!< \brief Selects MCK/1024. */#define WD_HPCV                 0x0000003C      /*!< \brief High preload counter value. */#define WD_CKEY                 (0x06E<<7)      /*!< \brief Clock register access key. *//*@}*//*! \name Watch Dog Control Register *//*@{*/#define WD_CR           (WD_BASE + 0x08)        /*!< \brief Control register address. */#define WD_RSTKEY               0x0000C071      /*!< \brief Watch Dog restart key. *//*@}*//*! \name Watch Dog Status Register *//*@{*/#define WD_SR           (WD_BASE + 0x0C)        /*!< \brief Status register address. */#define WD_WDOVF                0x00000001      /*!< \brief Watch Dog overflow status. *//*@}*//*@} xgNutArchArmAt91Wd *//*! * \addtogroup xgNutArchArmAt91Aic *//*@{*/#define AIC_BASE    0xFFFFF000  /*!< AIC base address. *//*! \name Interrupt Source Mode Registers *//*@{*//*! \brief Source mode register array. */#define AIC_SMR(i)  (AIC_BASE + i * 4)/*! \brief Priority mask.  * * Priority levels can be between 0 (lowest) and 7 (highest). */#define AIC_PRIOR                       0x00000007/*! \brief Interrupt source type mask.  * * Internal interrupts can level sensitive or edge triggered. * * External interrupts can triggered on positive or negative levels or  * on rising or falling edges. */#define AIC_SRCTYPE                     0x00000060#define AIC_SRCTYPE_INT_LEVEL_SENSITIVE 0x00000000      /*!< \brief Internal level sensitive. */#define AIC_SRCTYPE_INT_EDGE_TRIGGERED  0x00000020      /*!< \brief Internal edge triggered. */#define AIC_SRCTYPE_EXT_LOW_LEVEL       0x00000000      /*!< \brief External low level. */#define AIC_SRCTYPE_EXT_NEGATIVE_EDGE   0x00000020      /*!< \brief External falling edge. */#define AIC_SRCTYPE_EXT_HIGH_LEVEL      0x00000040      /*!< \brief External high level. */#define AIC_SRCTYPE_EXT_POSITIVE_EDGE   0x00000060      /*!< \brief External rising edge. *//*@}*//*! \name Interrupt Source Vector Registers *//*@{*//*! \brief Source vector register array.  * * Stores the addresses of the corresponding interrupt handlers. */#define AIC_SVR(i)  (AIC_BASE + 0x80 + i * 4)/*@}*//*! \name Interrupt Vector Register *//*@{*/#define AIC_IVR     (AIC_BASE + 0x100)  /*!< \brief IRQ vector register address. *//*@}*//*! \name Fast Interrupt Vector Register *//*@{*/#define AIC_FVR     (AIC_BASE + 0x104)  /*!< \brief FIQ vector register address. *//*@}*//*! \name Interrupt Status Register *//*@{*/#define AIC_ISR     (AIC_BASE + 0x108)  /*!< \brief Interrupt status register address. */#define AIC_IRQID               0x0000001F      /*!< \brief Current interrupt identifier mask. *//*@}*//*! \name Interrupt Pending Register *//*@{*/#define AIC_IPR     (AIC_BASE + 0x10C)  /*!< \brief Interrupt pending register address. *//*@}*//*! \name Interrupt Mask Register *//*@{*/#define AIC_IMR     (AIC_BASE + 0x110)  /*!< \brief Interrupt mask register address. *//*@}*//*! \name Interrupt Core Status Register *//*@{*/#define AIC_CISR    (AIC_BASE + 0x114)  /*!< \brief Core interrupt status register address. */#define AIC_NFIQ                0x00000001      /*!< \brief Core FIQ Status */#define AIC_NIRQ                0x00000002      /*!< \brief Core IRQ Status *//*@}*//*! \name Interrupt Enable Command Register *//*@{*/#define AIC_IECR    (AIC_BASE + 0x120)  /*!< \brief Interrupt enable command register address. *//*@}*//*! \name Interrupt Disable Command Register *//*@{*/#define AIC_IDCR    (AIC_BASE + 0x124)  /*!< \brief Interrupt disable command register address. *//*@}*//*! \name Interrupt Clear Command Register *//*@{*/#define AIC_ICCR    (AIC_BASE + 0x128)  /*!< \brief Interrupt clear command register address. *//*@}*//*! \name Interrupt Set Command Register *//*@{*/#define AIC_ISCR    (AIC_BASE + 0x12C)  /*!< \brief Interrupt set command register address. *//*@}*//*! \name End Of Interrupt Command Register *//*@{*/#define AIC_EOICR   (AIC_BASE + 0x130)  /*!< \brief End of interrupt command register address. *//*@}*//*! \name Spurious Interrupt Vector Register *//*@{*/#define AIC_SPU     (AIC_BASE + 0x134)  /*!< \brief Spurious vector register address. *//*@}*//*! * \brief Interrupt entry. */#define IRQ_ENTRY() \    asm volatile("sub   lr, lr,#4"          "\n\t"  /* Adjust LR */ \                 "stmfd sp!,{r0-r12,lr}"    "\n\t"  /* Save registers on IRQ stack. */ \                 "mrs   r1, spsr"           "\n\t"  /* Save SPSR */ \                 "stmfd sp!,{r1}"           "\n\t")     /* *//*! * \brief Interrupt exit. */#define IRQ_EXIT() \    asm volatile("ldmfd sp!, {r1}"          "\n\t"  /* Restore SPSR */ \                 "msr   spsr_c, r1"         "\n\t"  /* */ \                 "ldr   r0, =0xFFFFF000"    "\n\t"  /* End of interrupt. */ \                 "str   r0, [r0, #0x130]"   "\n\t"  /* */ \                 "ldmfd sp!, {r0-r12, pc}^" "\n\t")     /* Restore registers and return. *//*@} xgNutArchArmAt91Aic *//*! \addtogroup xgNutArchArmAt91 *//*@{*//*! \name Peripheral Identifiers and Interrupts *//*@{*/#define FIQ_ID      0           /*!< \brief Fast interrupt ID. */#define SWIRQ_ID    1           /*!< \brief Software interrupt ID. */#define US0_ID      2           /*!< \brief USART 0 ID. */#define US1_ID      3           /*!< \brief USART 1 ID. */#define TC0_ID      4           /*!< \brief Timer 0 ID. */#define TC1_ID      5           /*!< \brief Timer 1 ID. */#define TC2_ID      6           /*!< \brief Timer 2 ID. */#define WDI_ID      7           /*!< \brief Watchdog interrupt ID. */#define PIO_ID      8           /*!< \brief Parallel I/O controller ID. */#define IRQ0_ID     16          /*!< \brief External interrupt 0 ID. */#define IRQ1_ID     17          /*!< \brief External interrupt 1 ID. */#define IRQ2_ID     18          /*!< \brief External interrupt 2 ID. *//*@}*//*@} xgNutArchArmAt91 */#endif                          /* _ARCH_ARM_AT91_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -