您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

Armboot在EV40评估板上的移植

时间:2007-1-20栏目:电子通信论文

/*等待US_RHR(接收保持寄存器)收到字符*/character=US_RHR

/*收到字符后,把它赋给某一变量供以后使用*/

以上内容用于cpu$cpu.c中的serial_getc()函数。

3.3 通过串口发送数据

#define US_TXRDY 0x2

while((US_CSR & US_TXRDY)==0){}

/*等待US_THR(发送保持寄存器)送出字符*/

US_THR=character

/*当US_THR为空后,往里写下一个要发送字符*

以上内容用于cpu$cpu.c中的serial_putc()函数。

3.4 计数器的使用

在cpu$cpu.c中,有个udelay(unsigned long usec)函数,作用是延时usec ms。通过使用定时器/计数器TC(Timer/Counter)模块完成该功能。同串口使用制似,也需要初始化一系列的寄存器,然后执行某种触发,使计数器复位,时钟启动;当计数器值到这TC_RC时,会发生RC比较,导致TC_SR(状态寄存器)的CPCS位(0x10)置位。由此可见,适当设置TC_RC寄存器的值,可以产生不同长短的延时;通过判断CPCS位,可作为延时结束的标志。

3.5 设置自动引导命令

Armboot在开始会有几秒的延时,让你选择是否自动引导。如果不自动引导,则可通过console,敲入命令,手工引导。

自动引导采用的命令来源于环境变量。环境变量是由一些以“0”结束的形如“name=value”的字符串所组成的序列,整个序列以两个“0”结束。环境变量存储于结构env_t的data数组中。有3处可以存放环境变量,一是SDRAM,在env_init(&bd)(中完成初始化;二是Flash。这里定义放在第三个扇区,即

#define CFG_ENV_ADDR(PHYS_FLASH_1+0x20000)/*环境变量扇区地址*/

env_t*env=(env_t*)CFG_ENV_ADDR。

三是default_environment。Default_environment是一个定义好的全局数组,作用相当于env_t中的data。

使用getenv(bd_t*bd,uchar *name)从环境变量中条目(形如“name=value”;value可以为空"")查找匹配name的条目;成功返回value对应的地址,失败返回0。

通过源码我们可以看出,这里采用的环境变量是default_environment,而且,name=bootcmd;因此,如果采用自动boot,则会自动执行bootp,bootm。由于笔者并不打算让Armboot自动执行任何命令,所以,将CONFIG_BOOTCO

MMAND置空。

4 Flash编程

到此为止,Armboot基本上可以说能够在板子上运行了。一些和板子无关的命令已经可以运行,比如查看内存md;下载binary文件loadb(使用kermit模式/协议)等等。也有些命令依然还不能运行,它们根据具体的目标板有不同的代码。比如loads、erase等。

这里我们以Flash编程为例,实现erase命令。Loads中也需要调用和Flash有关的函数。以下的编程是针对Fujitsu MBM29LV160TE的。不同的Flash,命令序列和命令地址都可能不同。

4.1 Flash擦除

Flash的擦除是按照扇区来擦除的,扇区的大小由具体的Flash规定。

上一页  [1] [2] [3] [4] [5] [6] 下一页

下页更精彩:1 2 3 4 下一页