mini2440之首个C程序点亮LED分析

启动文件+库+文件

启动文件:

硬件的初始化

1.关看门口狗(看门狗就是定时器,系统启动时开启的,开始计时如果3秒没有关闭,则自动重启系统)

2.初始化时钟(2440一上电的为12hz,最大可以达到400hz,所以为了使其更快,就需要设置高一点)

3.初始化SDRAM

软件初始化

4.设置栈(将栈指针指向某块内存)

5.设置main函数的返回地址

6.调用main函数

7.清理工作

(注:mini2440中2步慢点没关系小只是点亮灯而已,3步不用sdram用内置sram所以可以不设)

硬件初始化

.text 

.global _start 

_start: 

@硬件初始化 

            ldr     r0, =0x53000000    @ 0x53000000为看门狗控制寄存器的地址 

            mov     r1, #0x0                 @拉低电平,关闭看门狗计时器 ,禁止WATCHDOG,否则CPU会不断重启 

            str     r1, [r0] 

@软件初始化                   

            ldr     sp, =1024*4             @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K,nand flash中的代码在复位后会移到内部ram中,此ram只有4K 

            bl      main                        @ 调用C程序中的main函数 

halt_loop: 

            b       halt_loop           @循环 

点亮led的c语言程序

#define GPBCON      (*(volatile unsigned long *)0x56000010) 

#define GPBDAT      (*(volatile unsigned long *)0x56000014) 

@(*(volatile unsigned long *)0x56000010):强制转化为unsigned long 类型的指针变量,(*(unsigned long *)0x56000010)为取得0x56000010地址下的内容 

@volatile 用与标识编译器不优化 

int main() 

    GPBCON = 0x00000400;    // 设置GPB5为输出口, 位[11:10]=0b01 

    GPBDAT = 0x00000000;    // GPB5输出0,LED1点亮 

    return 0; 

注设置多个led输出引脚的模式的时候

#define GPB5_OUT (1<<(5*2))//因为设置gpb5的引脚为10和11位,10位为高电平

#define GPB6_OUT (1<<(6*2))

#define GPB7_OUT (1<<(7*2))

#define GPB8_OUT (1<<(8*2))

GPBCON=GPB5_OUT|GPB6_OUT|GPB7_OUT;//设置所有LED对应引脚为输出模式

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6fc7d56a4ca16980fb4b753c1a4cdaad.html