1. 环境
操作系统:linux
开发板:mini2440
2. 编写流程
a)LED 电路图
如上图,只要nLED_1~~nLED4 为低电平,那么发光二极管导通,LED亮。
b)电路图中nLED_1~~nLED_4 为网络标号,通过网络标号,找到ARM芯片对应的管脚,如下图
管脚对应如下:
GPB5 nLED_1 LED1 GPB6 nLED_2 LED2 GPB7 nLED_3 LED3 GPB8 nLED_4 LED4
c)查看GPB IO口使用方法:
i)GPBCON、GPBDAT物理地址如下:
ii)GPBCON功能说明:
iii)GPBDAT 说明
(我们只需要设置控制寄存器GPBCON功能为输出,数据寄存器GPBDAT电平为低,就可以点亮LED)
3. 步骤
a)声明指针变量指向控制寄存器GPBCON、数据寄存器GPBDAT:
unsigned long *GPBCON = 0x56000010;
unsigned long *GPBDAT = 0x56000014;
b)设置控制寄存器GPBCON为输出功能:
*GPBCON &= 0xfffc03ff; // f f f 1100 0000 0011 f f 中间为二进制
*GPBCON |= 0x00015400; // f f f 1101 0101 0111 f f
c)设置数据寄存器GPBDAT为低电平,LED亮:
*GPBDAT = 0;
4.源代码
#include <stdio.h>
/* GPB5 -- led1
* GPB6 -- led2
* GPB7 -- led3
* GPB8 -- led4
*
* GPBCON 0x56000010
* GPBDAT 0x56000014
*/
void LED(void)
{
unsigned long *GPBCON = 0x56000010;
unsigned long *GPBDAT = 0x56000014;
// 0000 0001 0101 0100 0000 0000
// 1 5 4 f f
*GPBCON &= 0xfffc03ff;
*GPBCON |= 0x00015400;
*GPBDAT = 0;
int k;
int i;
for(k = 0; k < 16; k++) //LED显示4位16进制数
{
*GPBDAT = ~(k<<5);
for(i = 0; i < 0x100000; i++);
}
}
5. 编译步骤,使用MAKEFILE文件:
MAKEFILE文件内容:
led_test.bin:led_test
arm-linux-objcopy -O binary ./led_test led_test.bin
led_test:led_test.o
arm-linux-ld -Ttext=0x30000000 led_test.o -o led_test
led_test.o:led_test.c
arm-linux-gcc -c led_test.c -o led_test.o
.PHONY:clear copy
clear:
rm -rf led_test.o led_test led_test.bin
copy:
cp led_test.bin /var/lib/tftpboot/
make命令生成led_test.bin下载到开发板内存(SDRAM),运行即可。具体可以查看裸机程序下载到开发板教程,这里不再做详细解说,可以参照以下链接: http://download.csdn.net/detail/familycsd000/5773307