mini2440第一个裸机程序
mini2440上的LED接口
/* * 功能:实现LED1灯循环亮灭 * LED1--GPB5 * LED2--GPB6 * LED3--GPB7 * LED4--GPB8 */ #define rGPBCON (*(volatile unsigned long *) 0x56000010) #define rGPBDAT (*(volatile unsigned long *) 0x56000014) #define Led1_On 0x1DF #define Led2_On 0x1BF #define Led3_On 0x17F #define Led4_On 0xFF #define LedSide_On 0xDF #define LedMidd_On 0x13F #define DELAY_CNT 0x3000 void Led_Port_Init( void ); void delay( int t ) { while(t>0) t--; } int main( void ) { Led_Port_Init(); while ( 1 ) { #if 0 //循环点亮4盏灯 rGPBDAT = Led1_On; delay( DELAY_CNT ); rGPBDAT = Led2_On; delay( DELAY_CNT ); rGPBDAT = Led3_On; delay( DELAY_CNT ); rGPBDAT = Led4_On; delay( DELAY_CNT ); #endif rGPBDAT = LedSide_On; delay( DELAY_CNT*2 ); rGPBDAT = LedMidd_On; delay( DELAY_CNT*2 ); } } void Led_Port_Init( void ) { /* 设置GPB5,6,7,8为输出端口 */ rGPBCON = 0X15400; }
打开keil uversion4
新建工程
1. 选择CPU为Samsung/S3C2440A,单击OK
2.在上一步单击完OK后,会弹出下图,该图是为了让你选择是不是将Samsung S3C2440的启动代码复制添加的你的工程文档,可以看到工程文档自动添加了S3C2440.s。
3.新建一个文件。选择File/New,新建一个文件。把上面的C代码复制进去。保存为fisrt.c
4.将first.c文件添加到你的工程,对着Source Group1右击,选择“Add Files to Group "Source Group 1"...”
5.target中,选择Asm,define填入__EVAL。
6.target中,选择linker,去除勾选“use memory layout from target diaglog ”
7.target中,utilities中,setting中,选择flash SST39x 160x Flash 2M
8.编译成功后,确保板子是从nor flash启动的,然后点击keil软件的load按钮,就可以看到写入成功。
此时程序已经在运行。
我们拔掉jtag线,重启板子,程序将从nor flash载入,开始运行。
错误解决:
1)first.axf: Error: L6218E: Undefined symbol Image$$ER_ROM1$$RO$$Length (referred from s3c2440.o).
要解决这个问题只需在options的Asm选项卡中Define选项中添加__EVAL宏即可