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宏即可

原文地址:https://www.cnblogs.com/souroot/p/11179307.html