闪灯程序

第一次接触这种东西,观摩了别人写的一个小程序.

#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);
    }
}
原文地址:https://www.cnblogs.com/dramstadt/p/3256794.html