菜鸟终于有时间看代码了,又来问题了,请高手指点,感谢!
问题1: 按照LPC11XX.H的定义,例程里"LPC_GPIO0 -> DATA"的定义是否不符合C语言规范?LPC_GPIO0和DATA域之间貌似还隔着一个结构问题2: 关于GPIO的读写操作,datasheet里有描述,读起来能感觉芯片的这个部分设计的比较巧妙、方便,例程里的代码是如何与datasheet里的方法对应起来的?某个例程的一段代码: LPC_GPIO0 -> DATA &=~(1<<LED2); //开LED
LPC_GPIO1 -> DATA &=~(1<<LED1); //开LED
LPC_GPIO0 -> DATA &=~(1<<BEEP);//关BEEP
LPC11XX.H关于GPIO的定义typedef struct
{
union {
__IO uint32_t MASKED_ACCESS[4096]; /*!< Offset: 0x0000 to 0x3FFC Port data Register for pins PIOn_0 to PIOn_11 (R/W) */
struct {
uint32_t RESERVED0[4095];
__IO uint32_t DATA; /*!< Offset: 0x3FFC Port data Register (R/W) */
};
};
uint32_t RESERVED1[4096];
__IO uint32_t DIR; /*!< Offset: 0x8000 Data direction Register (R/W) */
__IO uint32_t IS; /*!< Offset: 0x8004 Interrupt sense Register (R/W) */
__IO uint32_t IBE; /*!< Offset: 0x8008 Interrupt both edges Register (R/W) */
__IO uint32_t IEV; /*!< Offset: 0x800C Interrupt event Register (R/W) */
__IO uint32_t IE; /*!< Offset: 0x8010 Interrupt mask Register (R/W) */
__IO uint32_t RIS; /*!< Offset: 0x8014 Raw interrupt status Register (R/ ) */
__IO uint32_t MIS; /*!< Offset: 0x8018 Masked interrupt status Register (R/ ) */
__IO uint32_t IC; /*!< Offset: 0x801C Interrupt clear Register (R/W) */
} LPC_GPIO_TypeDef;
#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 )
/* AHB peripherals */
#define LPC_GPIO_BASE (LPC_AHB_BASE + 0x00000)
#define LPC_GPIO0_BASE (LPC_AHB_BASE + 0x00000)
#define LPC_GPIO1_BASE (LPC_AHB_BASE + 0x10000)
#define LPC_GPIO2_BASE (LPC_AHB_BASE + 0x20000)
#define LPC_GPIO3_BASE (LPC_AHB_BASE + 0x30000)
此帖出自
小平头技术问答
LPC11XX.H中的定义是和寄存器的定义严格一致的(核对过大小和顺序),结构很清晰,问题是DATA是类型LPC_GPIO_TypeDef中union中的一个struct的成员(有点绕),按C语言语法是不能直接引用的吧?
一周热门 更多>