了解了S3C2440启动过程后,开始写第一个裸奔程序。直接修改TQ2440-TEST项目里的main.c文件。把main()函数的主循环改为
while(1)
{
rGPBDAT&=0x7df; //点亮LED1
delay(500000);
rGPBDAT&=0x7bf; //点亮LED2
delay(500000);
rGPBDAT&=0x77f;//点亮LED3
delay(50000);
rGPBDAT&=0x6ff;//点亮LED4
delay(500000);
rGPBDAT|=0x1e0;//全灭
delay(500000);
}
实现流水灯的效果。
这个程序很简单,做这个实验的目的是学会用HJTAG烧录程序进NOR FLASH。对初学者来说,看到自己写的程序在开发板上运行时一件有成就感的事。
开发板设置成NOR FLASH启动,ADS中把RO BASE设置成0X30000000,用AXD仿真,可以看到流水灯效果,如果把RO BASE设置成0,ENTRY POINT设置成0,AXD仿真也可以看到流失灯效果,但是AXD仿真应该没有把程序烧录进NOR FLASH,关掉AXD后重新上电,仍然运行NOR FLASH中以前烧录的程序。强调这一点对ARM熟手来说是比较可笑,我开始用AXD仿真时,一直不确定AXF映像文件是否被下载进了开发板中。现在可以确定没有,要下载必须通过烧录的方式。
AXD仿真调试后,用HFLASH把BIN文件烧录进NOR FLASH,HFC文件选开发板光盘中带的h-flash.hfc,这个配置文件设置了DISMMU,如果按照TQ2440开发板使用说明那样设置,会提示FLASH芯片型号选择错误,不能烧录。RO BASE设置成0X30000000或0生成的BIN文件都可以烧录运行,设置成0X30000000时,应该是先从NOR FLASH启动,然后把程序拷贝进SDRAM运行。设置成0时应该是直接在NOR FLASH里运行。
实际测试发现AXD仿真时的delay(500000)延时时间比烧录进NOR FLASH后的延时时间短。AXD仿真时灯闪的很快,程序烧录进NOR FLASH运行时,灯闪的慢。RO BASE设置成0X30000000时,程序烧录进NOR FLASH运行时流水灯闪烁比RO BASE设置成0时快。
接下来我打算弄清楚RO BASE设置成0X30000000或0时,变量,常量,代码到底是如何存储的。我觉得这才是关键。
文章评论(0条评论)
登录后参与讨论