主题 : 新手求助:自己写的裸机程序跑不起来 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 62925
精华: 0
发帖: 50
金钱: 255 两
威望: 51 点
贡献值: 0 点
综合积分: 100 分
注册时间: 2012-02-10
最后登录: 2012-10-22
楼主  发表于: 2012-05-08 12:18

 新手求助:自己写的裸机程序跑不起来

自己参照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的地址,此处应该为 0x7F00880C

static 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重新编辑 ]
级别: 新手上路
UID: 65373
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2012-03-17
最后登录: 2012-05-10
1楼  发表于: 2012-05-10 10:17

 回 楼主(冰の水若寒) 的帖子

你好,我是新手,请问用u-boot怎么下载裸机程序啊,呵呵
级别: 侠客
UID: 62925
精华: 0
发帖: 50
金钱: 255 两
威望: 51 点
贡献值: 0 点
综合积分: 100 分
注册时间: 2012-02-10
最后登录: 2012-10-22
2楼  发表于: 2012-05-10 21:51

 回 1楼(dingzhou) 的帖子

你也是6410么?
你按照配套光盘A里面的  03- Tiny6410刷机指南-20111021  的第一章,制作SD卡启动盘,然后看2.4章节,就是把卡插到开发板上,S2拨到SD-BOOT,用串口把开发板和电脑连接起来,再用USB线也连起来;打开超级终端,然后打开开发版电源,超级终端就有显示了,按d进入下载,然后打开DNW,在USB Port里面选第一个,然后在对话框找到你要下载的bin文件,确定就好了。程序没问题的话,超级终端就会显示程序在运行了