Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160828
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-27 15:17
文章分类

全部博文(20)

文章存档

2016年(1)

2015年(19)

我的朋友

分类: 嵌入式

2015-04-05 22:49:10


    ARM启动时会从FLASH 0地址加载一定长度代码到内存中,然后从内存 0x0000 0000 地址开始执行代码,在三星公司的s5pv210中,由于IROM的存在已为用户作了一定的初始化,如关开门狗等行为,免去用户许多麻烦。由于IROM代码从0地址开始(即BL0段)所以用户所写代码不可放在(BL0)中(放在BL0中上电程序运行不正常,但复位以后可能会正常运行)。根据用户手册,用户代码应指定在BL1中运行,即0xD0200010。

点亮LED代码如下:


  1. .text
  2. .global _start
  3. _start:
  4.         LDR R0,=0xE0200280    @将0xE0200280存入R0寄存器
  5.         LDR R1,=0x1111        @将0x1111存入R1寄存器

  6.         STR R1,[R0]            @将R1的值写入R0地址中

  7.         LDR R0,=0xE0200284
  8.         LDR R1,=0xEDB7BDEF
  9.         STR R1,[R0]
  10. LOOP:                            @循环函数
  11.         BL DELAY
  12.         MOV R1,R1,ROR #4        @循环右移,每次移4位
  13.         STR R1,[R0]
  14.         BL LOOP

  15. DELAY:                           @延时函数
  16.         MOV R5,#0x400000
  17. DELAY1:
  18.         SUBS R5,R5,#1            @影响标志位减
  19.         BNE DELAY1
  20.         MOV PC,LR      


0xE0200280
LED所接CPU引脚的模式配置寄存器地址,每4位控制1个引脚的工作模式,其中0001为输出模式,0000为输入模式。0x1111即二进制的0001 0001 0001 0001将对应的4个连续引脚设为输出模式。

0xE0200284
为LED所接CPU引脚的数据寄存器,此寄存器一共8位,分别控制CPU的8个对应引脚的输出电平高低(输出模式)对应位写1为输出高电平、写0为输出低电平(GND),本程序只用到4个引脚,其低4位。


此程序实现四个LED循环闪烁的效果

MakeFile:

点击(此处)折叠或打开

  1. led.bin:led.S
  2.         arm-linux-gcc -c -o led.o led.S

  3.         arm-linux-ld -Ttext 0xD0200010 led.o -o led_elf

  4.         arm-linux-objcopy -O binary led_elf led.bin
  5. clean:
  6.         rm -f *.o *.bin led_elf






阅读(2862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~