自己参照tiny6410的demo改了个最简单的LED裸机程序,只想熟悉一下裸机开发流程。编译没问题,用DNW下载也OK,但是就是LED没反应呢...谁帮我看一下吧,谢谢各位大侠了~
用的RVDS2.2,文件有两个,一个startup.s,一个main.c。代码如下:
-------------------------------------------------------------------------------------------------------------
startup.s :
IMPORT _main ; C entrypoint for Steppingstone loader.
AREA |C$$code|, CODE, READONLY
global Start
Start
b _main
;; DCB "ABCDabcd"
END
-------------------------------------------------------------------------------------------------------------
main.c :
#define rGPKCON0 (*(volatile unsigned *)(0x7F008800))
#define rGPKDAT (*(volatile unsigned *)(
0x7F008804))
//此地址为GPKCON1的地址,此处应该为 0x7F008808#define rGPKPUD (*(volatile unsigned *)(
0x7F008808))
//此地址为GPKDAT的地址,此处应该为 0x7F00880Cstatic void Delay(int time)
{
volatile unsigned int i,j;
for(i = 0; i < 20000000; i++)
for(j = 0; j<time; j++);
}
void GPIO_Init(void)
{
rGPKCON0 = (rGPKCON0 & ~(0xffffU<<16))|(0x1111U<<16);
rGPKPUD = 0x00;
rGPKDAT = (rGPKDAT & ~(0xffU << 8))|(0x00U<<8);
}
void LedTest(void)
{
volatile unsigned i;
while(1)
{
for(i = 4; i < 8; i++)
{
rGPKDAT = ~(1 << i);
Delay(10);
}
}
}
void _main(void)
{
GPIO_Init();
LedTest();
}
-------------------------------------------------------------------------------------------------------------
RVDS里面的Debug Settings里面,在默认的基础上,Language Settings里面的两个子菜单里,改了处理器型号为ARM1176JZF-S,
然后Linker里面,设置了RO Base = 0X50000000,Image entry point 为Start
最后的命令框里的配置结果为:armlink --no_locals --no_scanlib --no_debug --ro_base=0x50000000 --first=Start --entry=Start --info=totals
编译生成.bin文件,无Error,无Warning,通过DNW下载,下载过程正常,超级终端显示程序开始运行了,但是LED就是没有反应。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
都没人帮我...
不过还好,自己多看看,突然才想起来,GPK的CON参数是8字节的,而不是4个字节的,结论就是自己马虎大意了,犯2了...
终于把自己想弄的第一个裸机调通了...
不过还是不太清楚RO Base的设置原理,希望有人能简单跟我讲一下,拜谢之~
[ 此帖被冰の水若寒在2012-05-08 23:45重新编辑 ]