基于CMSIS-CORE操作的闪灯程序 前面的代码已经表明,基于MCU寄存器的应用程序其大量代码是寄存器地址的定义,为了减少用户的代码量,ARM公司已经要求各个厂商把这部分代码写成统一的接口格式给用户使用,这就是CMSIS-CORE的目标,如在mbed cmsis目录下的LPC17XX.h文件中,你可以找到以下相关代码: typedef struct { union { __IO uint32_t FIODIR; …… }; uint32_t RESERVED0[3]; union { __IO uint32_t FIOMASK; …… }; union { __IO uint32_t FIOPIN; …… }; union { __IO uint32_t FIOSET; …… }; union { __O uint32_t FIOCLR; …… }; } LPC_GPIO_TypeDef; …… #define LPC_GPIO0_BASE (LPC_GPIO_BASE + 0x00000) #define LPC_GPIO1_BASE (LPC_GPIO_BASE + 0x00020) #define LPC_GPIO2_BASE (LPC_GPIO_BASE + 0x00040) #define LPC_GPIO3_BASE (LPC_GPIO_BASE + 0x00060) #define LPC_GPIO4_BASE (LPC_GPIO_BASE + 0x00080) …… #define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE ) #define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE ) #define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE ) #define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE ) #define LPC_GPIO4 ((LPC_GPIO_TypeDef *) LPC_GPIO4_BASE ) 这样一来,我们就可以基于CMSIS-CORE使用以下代码来完成我们的功能了。 int main() { unsigned int mask_pin18 = 1 << 18; while (true) { LPC_GPIO1->FIOSET |= mask_pin18; wait(0.5); LPC_GPIO1->FIOCLR |= mask_pin18; wait(0.5); } }
|