arm IO口地址

来源:百度知道 编辑:UC知道 时间:2024/07/03 00:12:53
#define IO0PIN (*((volatile unsigned long *) 0xE0028000))#define IO0SET (*((volatile unsigned long *) 0xE0028004))#define IO0DIR (*((volatile unsigned long *) 0xE0028008))#define IO0CLR (*((volatile unsigned long *) 0xE002800C))
// 发光管接在P0.31引脚
#define LED 0x80000000

int main(void) {
IO0DIR = LED; // 设置发光管引脚为输出方式
IO0SET = LED; // 抬高此引脚电平
IO0CLR = LED; // 拉低此引脚电平
}

以上最后3段代码实在看不懂,那位达人帮我解释下,他不像51那样直接赋值就好了吗,还要先设置输出还是输入阿?拉低拉高怎么这样写的。。。
谢谢阿

ARM对IO操作有三个寄存器,即dir,set,clr。先设置IO的方向即对DIR操作,再如果设置高电平即对set操作,如果设置低电平对CLR操做。你的代码LED是0x800000000就是对其中的一个IO口操作把0x8..换二进制是对应一个IO口的,你的main程序这样正好输出一个先高电平后低电平。