欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

这是一段容易的实例代码,注释说明了功能。但是还是不懂,请高手讲解一下

更新时间: 2014-01-05 03:14:09 责任编辑: Author_N1

 

这是一段简单的实例代码,注释说明了功能。但是还是不懂,请高手讲解一下

/* 以下定义是将PA0管脚所涉及到的IDR输入寄存器的状态值取出来,该寄存器是只读的寄存器 */
/* 通过查看IDR寄存器就可以判断按键是否按下了  */
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n) 
#define KEY15  PAin(15) //定义PA0
 

--参考方法--
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) // addr地址偏移计算,具体做什么用没太看出来
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))  这个是获得add的地址的unsigned long型值
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 上两个函数的组合
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)    获取第n个管脚
#define KEY15  PAin(15)    //定义PA0     定义15管脚为KEY15
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:09
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19865/
本文WWW.DOC100.NET DOC100.NET版权所有。