第一个裸奔程序——跑马灯

 经过前段时间的准备,现在终于开始正式写ARM程序了。本着先易后难的原则,先写无操作系统的ARM裸奔程序,以便熟悉s3c2440的内部结构,此后再编写有操作系统的程序。

    第一个程序就从最最简单的点亮开发板上的四个LED开始,使这四个并排摆放的LED从一端向另一端依次被点亮,从而呈现出跑马灯的效果。四个LED连接到了B口的5到8引脚,输出低电平时被点亮,下面就是程序代码:

 

//定义三个寄存器

#define rGPBCON    (*(volatile unsigned *)0x56000010) //Port B control

#define rGPBDAT    (*(volatile unsigned *)0x56000014) //Port B data

#define rGPBUP     (*(volatile unsigned *)0x56000018)  //Pull-up control B

 

void delay(int);//延时函数

 

void Main(void)

{

    int light;

    int i;

    rGPBCON = 0x015550;//定义PB5~PB8为输出

    rGPBUP  = 0x7ff;//使PB上拉功能失效

    light = 0x10;

    light = light<<1;

    rGPBDAT = ~light;//第一个LED被点亮

    delay(500000);//延时一段时间

    //主程序死循环

    while(1)

    {

           //从一端向另一端

           for (i=0;i<3;i++)

           {

                  light = light<<1;

                  rGPBDAT = ~light;

                  delay(500000);

           }

           //返回

           for (i=0;i<3;i++)

           {

                  light = light>>1;

                  rGPBDAT = ~light;

                  delay(500000);

           }

    }

}

//延时函数

void delay(int a)

{

       int k;

       for(k=0;k<a;k++)

              ;

}

 

 

    程序很简单,其中Main函数是在2440启动代码执行完后开始被执行。由于该程序没有用到MMU_SetAsyncBusMode、MMU_SetFastBusMode和RdNF2SDRAM,所以为了正确编译该程序,只需把启动代码中相关的地方注释掉即可。

 

    在这里,把ADS的相关配置介绍一下,这些内容是比较重要的。下面是需要修改的内容:

在Target Settings中的Post-linker中选择ARM fromELF,因为我们需要把ELF文件格式转化为下载到flash中所必须的二进制文件。

在Language Settings中的所有语言的Target下的Architecture or Processor,选择ARM920T,因为s3c2440是ARM920T内核。

在ARM Linker中的Output中的RO Base填写0x30000000,因为在开发板上SDRAM是从0x30000000地址开始。在Layout中的Object/Symbol中填写2440init.o,它是启动文件的目标文件,在Section中填写Init,它是在启动文件中我们所定义的入口代码段的名称。

在ARM fromELF中的Output format选择Plain binary,并在Output file name中填写任意以bin为后缀的输出文件名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值