注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控博客苑 -- 一起学习嵌入式 -- Armboot在EV40评估板上的移植

中国工控网搜索:

严女士

     学历:大学本科
     职称:工程师
     年龄:35岁
       新闻信息(0/0)
       工作图片(0)
       技术论文(14/0)
       交流论坛(2/0)
       留言信箱(0)
       浏览人次:3593

Armboot在EV40评估板上的移植

发表评论(0)   发布时间:2015年3月27日  

    1 Armboot简介
   
      Armboot是一个bootloader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。它支持多种类型的Flash;允许映像文件经由bootp、dhcp、tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。Armboot源码公开。
   
      2 EV40评估板简介
   
      Micetek祥佑数码科技有限公司配合其Hitool for ARM开发工具推出了基于AT91X40系列微控制器的ARM EV40(简称EV40)评估板。可用来开发、调试和评估以Atmel ARM为硬件基础的嵌入式系统。EV40评估板包括一个AT91X40系列的微控制器AT91M40800以及一些外围器件。
   
      主要的外围部分包括:2个串口、1个复位按钮、3个应用按键、3个LED指示灯、1个7段LED显示器、512KB以太网接口、USB接口、PC104接口、EBI扩展接口、I/O扩展接口、时钟源选择、触摸板接口和LCD接口。
   
      3 Armboot在EV40上的移植
   
      本文的主要目的是使读者尽快地能在EV40上运行Armboot,因此,去掉(或修改)了一些完整版本所具有的代码(比如中断处理),从而加快开发。同时,这里使用Hitool for ARM开发工具,完成代码的修改、编译及调试。
   
      3.1 初始化
   
      Armboot的运行,开始于cpu/$cpu/start.s,完成一系列的初始化后(中间调用board/$board/memsetup.s),调用common/board.c中的函数start_armboot作为C语言程序的入口。如果使用Hitool,并正确地配置startup config(使用初始文件micev40_em.inc)。使用Hitool自动生成的start_up.s代替start.s,把B_main替换为
   
      ldr pc,_start_armboot
   
      startarmboot:.word start_armboot
   
      如果没有micev40_em.inc,则自行创建,内容如下:
   
      long ffe00000 0x01002529 long ffe00014 0x02502021
   
      long ffe00004 0x022028al long ffe00018 0x60000000
   
      long ffe00008 0x03002529 long ffe0001c 0x70000000
   
      long ffe0000c 0x40000000 long ffe00020 0x00000001
   
      long ffe00010 0x02402021 long ffe00024 0x00000006
   
      这部分的作用相当于borad$board.s。用来初始化EBI的各个寄存器。
   
      接下来是串口的初始化。这部分比较重要,作用是实现主机与目标板的通信,从而在超级终端(console)上提供用户接口。
   
      在start_armboot函数中,cpu_init(&bd)、board_init(&bd)可以屏蔽掉;serial_init(&bd)用来初始化串口。初始化过程的一个示例如下(使用USART0)。
   
      ①计算时钟分频数CD,公式为:
   
      异步模式
   
      CD=选择的时钟/16×波特率(结果四舍五入)
   
      同步模式
   
      CD=选择的时候/波特率(CD必须为偶数)
   
      CD将作US_BRGR(波特率发生寄存器)的值。
   
      ②设置PS_PCER(省电模块的外围时钟使能寄存器),它的各位和中断源对应。首先使能外围的时钟:
   
      #define PS_PCER_US0 0x04
   
      PS_PCER=PS_PCER_US0;
   
      ③设置PIO_PDR(PIO禁止寄存器)。此寄存器用于禁止PIO控制器控制单个引脚,而用作外围引脚。浠水一中并行I/O口线中一些为复用口线,可以由PIO控制器控制或作为其它外围引脚。如P13(SCK0,SUART0时钟信号)、P14(TXD0,USART0数据发送端)、P15(RXD0,USART0数据接收端)。
   
      #define PIO_PDR_RXD0 0x8000
   
      #define PIO_PDR_TXD0 0x4000
   
      #define PIO_PDR_TXD0 0x2000
   
      如果使用MCK(主时钟),
   
      PIO_PDR=PIO_PDR_RXD0|PIO_PDR_TXD0;
   
      如果使用SCK(外部时钟),
   
      PIO_PDR=PIO_PDR_RXD0|PIO_PDR_TXD0|PIO_PDR_SCK0。
   
      ④复位接收器和发送器。这是通过设置US_CR(USART控制寄存器)。
   
      #define US_RSTRX 0x0004
   
      #define US_RSTRX 0x0008
   
      #define US_RXDIS 0x0020
   
      #define US_TXDIS 0x0080
   
      US_CR=US_RSTRX|US_RSTTX|US_RXDIS|US_TXDIS
   
      ⑤清除发送和接收计数寄存器。
   
      US_TCR=0
   
      US_RCR=0
   
      ⑥设置波特率产生寄存器US_BRGR。
   
      US_BRGR=CD
   
      ⑦设置USART模式寄存器US_MR。
   
      #define US_CHMODE_NORMAL 0x0000 /*普通模式*/
   
      #define US_NBSTOP_1 0x0000 /*停止位1*/
   
      #define US_PAR_NO 0x800 /*无奇偶校验*/
   
      #define US_CHRL_8 0xC0 /*数据位8*/
   
      #define US_CLKS_MCK 0x00 /*主时钟*/
   
      #define US_ASYNC_MODE(US_CHMODE_NORMAL
   
      +US_NBSTOP_1+US_PAR_NO+US_CHRL_8+US_CLKS_MCK)
   
      US_MR=US_ASYNC_MODE
   
      ⑧设置发送时间确保寄存器US_TTGR
    推荐阅读:http://sns.xinlinks.com/app/blog/info.aspx?bid=193419
 

暂时没有评论

    发表评论

登陆网站发表评论

用户名:

密码:

注册 | 忘了密码

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳