专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 单片机

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

发布时间:2010-06-14 15:01:48 文章来源:www.iduyao.cn 采编人员:星星草
这是一段简单的实例代码,注释说明了功能。但是还是不懂,请高手讲解一下

/* 以下定义是将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
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: