第一次接触这种东西,观摩了别人写的一个小程序.
#define PINSEL0 *(volatile unsigned *)(0xE002C000) #define IOIN *(volatile unsigned *)(0xE0028000) #define IOSET *(volatile unsigned *)(0xE0028004) #define IODIR *(volatile unsigned *)(0xE0028008) #define IOCLR *(volatile unsigned *)(0xE002800C)
定义寄存器,闪灯程序需要将管腿设置为GPIO模式.PINSEL0是状态寄存器,表示各个管腿分别处于什么状态.当处于GPIO模式时,IODIR寄存器表示是输入还是输出.当输出时,IOSET和IOCLR是一对蛋疼的东西,令IOSET=1表示输出1,如果想输出0需要将IOCLR置为1.IOIN表示输入的值.
PINSEL0 &= 0; IODIR |= 0x100;
GPIO对应的标号是00,第一句表示将所有的管腿置为GPIO模式.
在我这块板上灯是接在P0.8上的,所以第二句将IODIR的第8位(最低位为第0位)置为1,表示输出.
void flash(unsigned int fre, unsigned int time) { while (time--) { IOSET = 0x100; //表示在第8位输出为1,灯灭. delay(fre); IOCLR = 0x100; //表示在第8位输出为0,灯亮. delay(fre); } }