大学生
最后登录1970-1-1
在线时间 小时
注册时间2014-10-14
|
一直学的是火哥的库函数形式,今天看师兄的程序瞬间晕倒,水平还是不够啊,求助!
首先:#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5
#define DCC PEout(4)// PE5
#define ACC PEout(6)// PE11。我跟踪PBout(5):#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出 #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入。然后在跟踪 BIT_ADDR(GPIOB_IDR_Addr,n):
#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 GPIOB_ODR_Addr (GPIOB_BASE+12)。
我理解是他要在输入寄存器IDR和输出寄存器ODR上操作PB5、PE5输入输出数据,理解不了的是PBout(5)中5的数值变化对输出有什么影响啊?寄存器操作形式完全晕了,求指点!
|
|