您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 基于ARM9的BootLoader启动设计
长治学院课程设计报告课程名称:嵌入式系统原理与应用技术设计题目:Bootloader程序设计系别:计算机系专业:计算机科学与技术组别:第7组(韩伟伟、王富涌)学生姓名:韩伟伟学号:08407106起止日期:2011年12月15日-2011年12月22日指导教师:刘丽丽目录第一章概述..............................................11.1课程设计名称................................................11.2课程设计目的................................................11.3要求........................................................1第二章背景分析..........................................12.1BOOTLOADER的概念.............................................12.2BOOTLOADER的主要任务与典型结构框架...........................1第三章BOOTLOADER串口驱动程序的设计......................24.1UART寄存器简介..............................................24.2UART串口工作原理............................................54.3UART驱动程序详细设计........................................5第四章总结..............................................9参考文献................................................101第一章概述1.1课程设计名称BootLoader程序设计1.2课程设计目的串口驱动和网口驱动程序的设计,可以通过串口或网口接收数据或文件,并且可以写到flash中1.3要求编写BootLoader程序uart.huart.c串口驱动测试程序main.c第二章背景分析2.1BootLoader的概念简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。2.2BootLoader的主要任务与典型结构框架从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。另外,由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。BootLoader的stage1通常包括一下步骤(以执行的先后顺序):(1)硬件设备初始化。(2)为加载BootLoader的stage2准备RAM空间。2(3)复制BootLoader的stage2到RAM空间中。(4)设置好堆栈。(5)跳转到stage2的C入口点。BootLoader的stage2通常包括一下步骤(以执行的先后顺序):(1)初始化本阶段要使用的硬件设备。(2)检测系统内存映射。(3)将kernel映像和根文件系统映像从Flash上独到RAM空间中。(4)为内核设置启动参数。(5)调用内核。第三章BootLoader串口驱动程序的设计3.1UART寄存器简介S3C2440AUART控制器,提供3个独立的异步串行I/O端口,每个端口都可以在中断模式或DMA模式下工作。UART可以产生中断请求或DMA请求,以便在CPU和UART之间传输数据。在使用系统时钟的情况下,UART可以支持最高115.2Kbps的传输速率。如果外部设备通过UEXTCLK为UART提供时钟,那么UART的传输速率可以更高。每个UART通道包含两个用于接收和发送数据的16字节的FIFO缓冲寄存器。由于UART是串行异步通信方式,因此在UART通信过程中每次只能传输1位(bit),若干位组成一个数据帧(frame),帧是UART通信中最基本单元,它主要包含开始位、数据位、校验位(如果开启了数据校验,要包含校验位)和停止位。UART在通信之前要在发送端和接受端约定好帧的结构,也就是约定好传输数据帧格式。(1)开始位:必须包含在数据帧中,表示一个帧的开始。(2)数据位:可选5、6、7、8位,该长度可由编程人员指定。(3)校验位:如果在开启了数据校验时,该位必须指定。(4)停止位:可选1、2位,该位长度可由编程人员指定。通信双方约定好帧格式后,指定同一波特率,以保证双方数据传输的同步。UART串口驱动需要设置的寄存器及其具体特性如表4-1~表4-8所示:3表3-1UART0串行控制寄存器(ULCON0)寄存器名地址是否读写描述复位默认值ULCON00x50000000R/W串口0串行控制寄存器0x00ULCON0位描述初始值保留70红外模式6选择串口0是否使用红外模式:0=正常通信模式1=红外通信模式0校验模式5:3设置串口0在数据接收和发送时采用的校验方式:0xx=无校验100=奇校验101=偶校验110=强制校验/检测是否为1111=强制校验/检测是否为0000停止位2设置串口0停止位数:0=每个数据帧一个停止位1=每个数据帧二个停止位0数据位1:0设置串口0数据位数:00=5个数据位01=6个数据位10=7个数据位11=8个数据位00表3-2UART0串口控制寄存器(UCON0)寄存器名地址是否读写描述复位默认值UCON00x50000004R/W串口0控制寄存器0x00UCON0位描述初始值FCLK分频因子15:12当UART0选择FCLK作为时钟源时,设置其FCLK的分频因子UART0工作时钟频率=FCLK/FCLK分频因子+60000UART时钟源选择11:10选择UART0的工作时钟PCLK,UEXTCLK,FCLK/n:00,10=PCLK01=UEXTCLK11=FCLK/n00发送数据中断产生类型9设置UART0中断请求类型,在非FIFO传输模式下,一旦发送数据缓冲区为空,立即产生中断信号,在FIFO传输模式下达到发送数据触发条件时立即产生中断信号:0=脉冲触发1=电平触发0接收数据中断产生类型8设置UART0中断请求类型,在非FIFO传输模式下,一旦接收到数据,立即产生中断信号,在FIFO传输模式下达到接收数据触发条件时立即产生中断信号:0=脉冲触发1=电平触发0接收数据超时7设置当接收数据时,如果数据超时,是否产生接收中断:0=不开启超时中断1=开启超时中断0接收数据错误中断6设置当接收数据时,如果产生异常,如传输中止,帧错误,校验错误时,是否产生接收中断:0=不产生错误状态中断1=产生错误状态中断04回送模式5设置该位时UART会进入回送模式,该模式仅用于测试0=正常模式1=回送模式0发送终止信号4设置该位时,UART会发送一个帧长度的终止信号,发送完毕后,该位自动恢复为00=正常传输1=发送终止信号0发送模式3:2设置采用哪个方式执行数据写入发送缓冲区00=无效01=中断请求或查询模式10=DMA0请求00接收模式1:0设置采用哪个方式执行数据写入接收缓冲区00=无效01=中断请求或查询模式10=DMA0请求0表3-3UARTFIFO控制寄存器(UFCON0)寄存器名地址是否读写描述复位默认值UFCON00x50000008R/W串口0FIFO控制寄存器0x00UFCON0位描述初始值发送数据触发级别7:6设置FIFO发送模式的触发级别:00=FIFO为空触发01=16字节触发10=32字节触发11=48字节触发0接收数据触发级别5:4设置FIFO接收模式的触发级别:00=FIFO为空触发01=16字节触发10=32字节触发11=48字节触发00保留30发送FIFO重置2在重置FIFO后自动清除发送缓冲区0=正常模式1=自动清除0接收FIFO重置1在重置FIFO后自动清除接收缓冲区0=正常模式1=自动清除0启用FIFO00=不启用FIFO1=启用FIFO0表3-4UARTMODEM控制寄存器(UMCON0)寄存器名地址是否读写描述复位默认值UMCON00x5000000CR/W串口0MODEM控制寄存器0x00UMCON0位描述初始值保留7:5必须全部置00AFC自动流控40=不开启流控1=开启流控0保留3:1必须全部置0000请求发送0如果启用AFC,该位无效,S3C2440A会自动控制nRTS,如果不启用AFC,nRTS必须由软件控制0=高电平激活nRTS1=低电平激活nRTS0表3-5UART发送/接收状态寄存器(UTRSTAT0)寄存器名地址是否读写描述复位默认5值UTRSTAT00x50000010R/W串口0发送/接收状态寄存器0x06UTRSTAT0位描述初始值发送器为空2当发送缓存寄存器中没有数据要发送且发送移位寄存器为空时,自动置10=非空1=发送器为空1发送缓存寄存器为空1当发送缓存寄存器为空时,自动置10=发送缓存寄存器非空1=发送缓存寄存器为空1接收缓存寄存器为空0当接收缓存寄存器有数据到达是,自动置10=接收缓存寄存器为空1=缓存寄存器接收数据0表3-6UART发送缓存寄存器(UTXH0)寄存器名地址是否读写描述复位默认值UTXH00x50000020(L)0x50000023(B)W串口0发送缓存寄存器—表3-7UART接收缓存寄存器(URXH0)寄存器名地址是否读写描述复位默认值URXH00x50000024(L)0x50000027(B)R串口0接收缓存寄存器—表3-8UART比特率除数寄存器(UBRDIV0)寄存器名地址是否读写描述复位默认值UBRDIV00x50000028R/W串口0比特率除数寄存器0x00UBRDIV0位描述初始值比特率除数15:0设置比特率除数(大于0)使用外部输入时可以置0—3.2UART串口工作原理每个UART包含一个波特率产生器、发送器、接收器和一个控制单元。波特率发生器的时钟可以由PCLK或UEXTCLK提供。发送器和接收器包含64字节的FIFO缓冲寄存器和数据移位器。发送时,数据被写入FIFO,然后拷贝到发送移位器中(1字节大小),接下来数据通过发送数据引脚(TxDn)被发送。接收时,接收到的数据从接收数据引脚(RxDn)移入,然后从移位器(1字节大小)拷贝到FIFO中。3.3UART驱动程序详细设计UART驱动程序设计到的函数主要有初始化函数、串口发送字节函数、串口6发送字符串函数、串口接收字节函数新建uart.h头文件,编写代码如下:#ifndef_UART_H#define_UART_H//串口寄存器宏定义#definerULCON0(*(volatileunsignedlong*)0x50000000)#definerUCON0(*(volatileunsignedlong*)0x50000004)#definerUFCON0(*(volatileunsignedlong*)0x50000008)#definerUMCON0(*(volatileunsignedlong*)0x5000000C)#definerUTRSTAT0(*(volatileunsignedlong*)0x50000010)#definerUTXH0(*(volatileunsignedlong*)0x50000020)#definerURXH0(*(volatileunsignedlong*)0
本文标题:基于ARM9的BootLoader启动设计
链接地址:https://www.777doc.com/doc-2568224 .html