S3C2440裸奔篇之C代码点亮LED

[复制链接]
 楼主| mizhongqin 发表于 2011-9-13 00:07 | 显示全部楼层 |阅读模式
本部分有2个源文件,一个汇编文件,是工程的启动代码,另一个是C文件,是main函数部分。
;================================================
; crt.S
; 功能: 通过它转入C程序
;================================================
IMPORT main ; 声明C函数符号

CODE32
AREA    Init, CODE, READONLY
ENTRY

ldr r0, =0x53000000  ; WATCHDOG寄存器
mov r1, #0x0   
str r1, [r0]    ; 写入0,禁止WATCHDOG,否则CPU会不断重启

ldr sp, =1024*4   ; 设置栈。注意:不能超过4K,因为是在SRAM上运行
       ; NAND FLASH中的代码,在复位后,硬件自动将其复制到内部SRAM
      
bl main    ; 调用C函数
halt_loop
b halt_loop   

END
      
//============C代码部分=====================//
#define GPBCON  (*(volatile unsigned long *)0x56000010)
#define GPBDAT  (*(volatile unsigned long *)0x56000014)
#define GPB5_out  (1<<(5*2))
#define GPB6_out  (1<<(6*2))
#define GPB7_out  (1<<(7*2))
#define GPB8_out  (1<<(8*2))
void  wait(unsigned long dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out;  // 将LED1-4对应的GPB5/6/7/8四个引脚设为输出
while(1)
{
  GPBDAT = 0x00000000;  // 亮
  wait(30000);
  GPBDAT = 0xffffffff;  // 灭
  wait(30000);
}
return 0;
}

本代码用ADS编译完了后用超级终端+DNW烧入NAND FLASH,CPU复位后在内部内存SRAM上运行,因此在设置栈时要注意不要超过了4KB的大小。
在设置ADS的LINKER里面,RO应该设置为0x00000000.
afei9527 发表于 2011-9-13 12:23 | 显示全部楼层
at91rm9200 能这样玩吗
wqqw2044062 发表于 2011-9-16 18:26 | 显示全部楼层
我怎么编译不通过啊
hys0401 发表于 2011-9-16 23:22 | 显示全部楼层
楼上的格式不对,前面要加TAB键的。
prodigals 发表于 2011-9-17 08:13 | 显示全部楼层
虽然没人顶,但我认为LZ好帖,正需要这样的代码参考,可以+个好友,指点交流下吗??
prodigals 发表于 2011-9-17 08:14 | 显示全部楼层
忘记说了  我的QQ475959111
prodigals 发表于 2011-9-17 08:44 | 显示全部楼层
怎么  编译好多错误啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
wsj19850216 发表于 2011-9-17 09:22 | 显示全部楼层
不了解啊   学习
wqqw2044062 发表于 2011-9-17 12:06 | 显示全部楼层
求LZ的QQ。
linas 发表于 2011-9-19 17:04 | 显示全部楼层
受教中。
q631951221 发表于 2011-9-19 19:35 | 显示全部楼层
简捷易懂,很好的代码 谢谢了!
圈圈虫1989 发表于 2011-9-19 23:06 | 显示全部楼层
ARM的汇编语言通用吗?请问
a08715 发表于 2014-7-6 16:13 | 显示全部楼层
此代码是韦东山的。我写了但是没有轮流点亮的现象,只是停留在一盏灯亮的状态,烦恼中
lilychinese 发表于 2014-7-9 17:44 | 显示全部楼层
感觉代码没问题啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

67

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部