主题 : 自制6410bootloader实现flash完美启动 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 39770
精华: 1
发帖: 33
金钱: 220 两
威望: 44 点
贡献值: 1 点
综合积分: 86 分
注册时间: 2011-03-12
最后登录: 2014-11-04
楼主  发表于: 2011-04-12 17:43

 自制6410bootloader实现flash完美启动

管理提醒: 本帖被 xoom 执行加亮操作(2011-09-16)
经过几天的搜集资料,加上对u-boot源程序启动流程的理解,整理出一份6410的bootloader,在网上搜了一下没有发现类似的程序,第一个版本的bootloader只能实现从从flash中复制代码到SDRAM然后跳转到SDRAM中去,经过一天的改进,现在可以接受用户输入,有图有真相。为了这个printf函数和scanf函数纠结了一天,gcc4.3.2中格式化字符串函数vsprintf函数不能用,包含了头文件但是编译的时候提示未定义,也不知道怎么回事,所以在网上找了一份源程序改成了6410可以用的,下一步继续改进之,希望可以实现复杂点的功能,大牛请绕行,对于喜欢裸奔的菜鸟来说能自己控制板子是很值得高兴的,而不是按照手册烧linux,android,烧完了想想好像什么都没学到。 没有开编译优化所以编译后的代码比较大,一个简单的输入输出就占了17K代码。 [attachment=2115]  
****************************************************************************************************************************************************************************
第三个本版出来了,新加入了中断的支持,关键代码是开启mmu,将0x00映射到物理内存上去,比较一下u-boot会发现只是稍微的改变了一下映射表,代码如下:
mmu_table:
        .set __base,0x57e
        // 0x00映射到0x57e00000  也就是bootloader的起始地址,这样发生中断就可以跳转到中断向量表。
        .rept 0x02
        FL_SECTION_ENTRY __base,3,0,0,0
        .set __base,__base+1
        .endr

        .set __base,2
        // 1:1 mapping for debugging
        .rept 0xA00-0x02
        FL_SECTION_ENTRY __base,3,0,0,0
        .set __base,__base+1
        .endr

        // access is not allowed.
        .rept 0xC00 - 0xA00
        .word 0x00000000
        .endr

        // 128MB for SDRAM 0xC0000000 -> 0x50000000
        .set __base, 0x500
        .rept 0xC80 - 0xC00
        FL_SECTION_ENTRY __base,3,0,1,1
        .set __base,__base+1
        .endr

        // access is not allowed.
        .rept 0x1000 - 0xc80
        .word 0x00000000
        .endr
借鉴lpc的vic中断编程,写了一个统一的中断函数接口
int install_irq(unsigned char channel,unsigned char num,void (*pFunction)(),unsigned priority);
参数依次是VIC通道号(0或者1),中断通道号(0-31),中断处理函数句柄,中断优先级。


************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
第四个版本出来了,移植上ucos烧到flash完美启动,有图有真相  [attachment=2129]
用arm-linux-gcc编译的,本来想找个gcc下移植的例子,无奈搜了很久都没找到,大部分都是在ads下做的移植(如果有人说都一样,自己随便找个例子做一下就知道区别在哪儿)而且用上了6410的向量中断功能,最开始的时候就想到要用上这个功能从而减少中断延迟时间,但是网上基本都是基于2410或者2440的没有向量中断控制器,lpc系列的有,但是看别人移植的时候说这个功能对移植ucos来说没什么用只说,所以他还是在统一的中断函数中查询是不是时钟中断。我就想试试这样到底能不能成功,毕竟不用软件查询中断肯定要快一点点。初步成功了,现在遇到的问题是时钟频率不能太快,否则就直接死机了,现在稳定的切换速度是30次/秒,而且这个现象没有规律,好像是随机发生一样,还在找原因,初步判断可能是在任务切换的时候发生了时钟中断。但是发生任务切换的时候中断因该是关着的,也许是中间那个指令用得不好,不过现在是能正确的进行任务切换,证明整体框架因该没有错的。明天继续找原因,今天调试了一天有点累。



#######################################################################################################################
#####################################################################################################################
2011年6月18日 00:01:13
ucos+触摸屏+sd+fat+lcd+rtc
[ 此帖被s2010202069在2011-06-18 00:05重新编辑 ]
附件设置隐藏,需要回复后才能看到
级别: 新手上路
UID: 288
精华: 0
发帖: 26
金钱: 145 两
威望: 30 点
贡献值: 0 点
综合积分: 52 分
注册时间: 2008-03-13
最后登录: 2012-11-03
1楼  发表于: 2011-04-12 18:43
kankan
级别: 新手上路
UID: 28365
精华: 0
发帖: 37
金钱: 185 两
威望: 37 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2010-09-09
最后登录: 2018-06-27
2楼  发表于: 2011-04-12 20:53

 回 楼主(s2010202069) 的帖子

look look
级别: 新手上路
UID: 28365
精华: 0
发帖: 37
金钱: 185 两
威望: 37 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2010-09-09
最后登录: 2018-06-27
3楼  发表于: 2011-04-12 20:54
能发一下代码 吗?  新人学习一下。
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8881
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18302 分
注册时间: 2010-01-09
最后登录: 2016-03-18
4楼  发表于: 2011-04-12 21:02
顶起
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 42636
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2011-04-10
最后登录: 2011-04-15
5楼  发表于: 2011-04-12 22:33

 回 楼主(s2010202069) 的帖子

看看
级别: 新手上路
UID: 39770
精华: 1
发帖: 33
金钱: 220 两
威望: 44 点
贡献值: 1 点
综合积分: 86 分
注册时间: 2011-03-12
最后登录: 2014-11-04
6楼  发表于: 2011-04-12 22:59

 回 3楼(flyer) 的帖子

明天发代码,今天电脑在实验室忘记带回来了。
级别: 新手上路
UID: 12068
精华: 0
发帖: 38
金钱: 190 两
威望: 38 点
贡献值: 0 点
综合积分: 76 分
注册时间: 2009-12-28
最后登录: 2016-06-11
7楼  发表于: 2011-04-12 23:11
进来瞧瞧哈
级别: 新手上路
UID: 45894
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2011-05-09
最后登录: 2011-05-15
8楼  发表于: 2011-05-09 08:01
进来瞧瞧哈
级别: 新手上路
UID: 33806
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2010-12-06
最后登录: 2015-02-25
9楼  发表于: 2011-05-14 17:15
恰似很厉害的样子,瞧瞧。。。。
学习学习!