8003|9

20

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

菜鸟再次问GPIO编程问题 [复制链接]

菜鸟终于有时间看代码了,又来问题了,请高手指点,感谢!
问题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)
此帖出自NXP MCU论坛

最新回复

我也是菜鸟,呵呵,我也研究下帮你  详情 回复 发表于 2010-7-16 10:26
点赞 关注
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
这种方式更好啊,结构清晰。至于对应,它的结构体的名字非常清楚,可以一一对应。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
原帖由 zhaojun_xf 于 2010-7-13 15:38 发表 这种方式更好啊,结构清晰。至于对应,它的结构体的名字非常清楚,可以一一对应。

LPC11XX.H中的定义是和寄存器的定义严格一致的(核对过大小和顺序),结构很清晰,问题是DATA是类型LPC_GPIO_TypeDef中union中的一个struct的成员(有点绕),按C语言语法是不能直接引用的吧?
此帖出自NXP MCU论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

4
 
彻底被淹没了。。。
此帖出自NXP MCU论坛
 
 
 

回复

6366

帖子

4914

TA的资源

版主

5
 
呵呵,这种用法很不错,标准C语言支持这样的用法
此帖出自NXP MCU论坛
 
 
 

回复

3186

帖子

0

TA的资源

五彩晶圆(中级)

6
 

soso来Q,让我回此问题

不好意思不顶一下,
此帖出自NXP MCU论坛
 
 
 

回复

107

帖子

0

TA的资源

一粒金砂(高级)

7
 

这个是很清晰的 !!

感觉应用的很好 , 思路清晰的那种!!LPC_AHB_BASE  LPC_GPIO0_BASE  定义的很直观, 语法问题,或者结构问题 就谈不好。 
此帖出自NXP MCU论坛
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(高级)

8
 
结构体和指针是C的精化所在,是符合C语言规范的
此帖出自NXP MCU论坛
 
 
 

回复

148

帖子

0

TA的资源

一粒金砂(高级)

9
 
我也是菜鸟,呵呵,我也研究下帮你
此帖出自NXP MCU论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

10
 
按C语言语法,应该是类似A->B->C->D这个样子吧?
当然,如果不咬文嚼字、仅考虑语法问题,从地址的角度上看是OK的。
另一个问题,是否编译器解决?
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表