菜鸟再次问GPIO编程问题

2019-03-25 20:44发布

菜鸟终于有时间看代码了,又来问题了,请高手指点,感谢!
问题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)
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
yuhua8688
1楼-- · 2019-03-26 18:25
结构体和指针是C的精化所在,是符合C语言规范的
yujiyuan1984
2楼-- · 2019-03-26 18:33
我也是菜鸟,呵呵,我也研究下帮你
evenaye
3楼-- · 2019-03-26 22:23
按C语言语法,应该是类似A->B->C->D这个样子吧?
当然,如果不咬文嚼字、仅考虑语法问题,从地址的角度上看是OK的。
另一个问题,是否编译器解决?

一周热门 更多>