实验实现功能:TQ2440开发板LED1-LED4从右向左循环点亮。下面是main.c程序
-------------------------------------------------------------------------------------------------------------------
#include "2440addr.h"
#define LED1_ON (rGPBDAT &=~(1<<5))
#define LED1_OFF (rGPBDAT |=(1<<5) )
#define LED2_ON (rGPBDAT &=~(1<<6))
#define LED2_OFF (rGPBDAT |=(1<<6))
#define LED3_ON (rGPBDAT &=~(1<<7))
#define LED3_OFF (rGPBDAT |=(1<<7))
#define LED4_ON (rGPBDAT &=~(1<<8))
#define LED4_OFF (rGPBDAT |=(1<<8))
void Delay(void)
{
int i,j;
for(i=0;i<1000000;i++)
for(j=0;j<1000;j++);
}
int main()
{
rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16)); //对GPBCON[10:17]清零
rGPBCON |=((1<<10)|(1<<12)|(1<<14)|(1<<16)); //设置GPB5~8为输出
rGPBUP &=~((1<<5)|(1<<6)|(1<<7)|(1<<8)); //设置GPB5~8的上拉功能
rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8); //关闭LED
while(1)
{
LED1_ON;Delay();LED1_OFF;
LED2_ON;Delay();LED2_OFF;
LED3_ON;Delay();LED3_OFF;
LED4_ON;Delay();LED4_OFF;
}
return 0;
}
-------------------------------------------------------------------------------------------------------------------
#include "2440addr.h" ,里面主要是TQ公司写的一些关于S3C2440寄存器的地址映射的定义,可以省去我们自己定义寄存器地址。
上图是天嵌公司底板原理图,关于4个LED的设计,很简单,只要是nLED x(1-4)连接的IO设置为输出,上拉,且为低电平的时候,对应的LED就点亮了。这里,对应TQ公司核心板所接的GPIO口为,GPB5~GPB8。所以我们要设置的寄存器有三种,分别是GPBCON、GPBUP、GPBDAT;它们的功能分别是,设置输入或输出,设置是否上拉,设置输出是1还是0,当然它们还有复用功能的作用,这里未涉及,故不详述。