毕业论文_基于ARM9的BOOTLOADER启动设计.doc_第1页
毕业论文_基于ARM9的BOOTLOADER启动设计.doc_第2页
毕业论文_基于ARM9的BOOTLOADER启动设计.doc_第3页
毕业论文_基于ARM9的BOOTLOADER启动设计.doc_第4页
毕业论文_基于ARM9的BOOTLOADER启动设计.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长治学院 课程设计报告 课程名称:课程名称: 嵌入式系统原理与应用技术嵌入式系统原理与应用技术 设计题目设计题目: bootloader 程序设计 系系 别:别: 计算机系 专专 业:业: 计算机科学与技术 组组 别:别: 第 7 组(韩伟伟、王富涌) 学生姓名学生姓名: : 韩伟伟 学学 号号: 08407106 起止日期起止日期: 2011 年 12 月 15 日 - 2011 年 12 月 22 日 指导教师指导教师: 刘丽丽 目录 第一章 概述.1 1.1 课程设计名称 1 1.2 课程设计目的 1 1.3 要求 1 第二章 背景分析.1 2.1 bootloader的概念1 2.2 bootloader的主要任务与典型结构框架1 第三章 bootloader 串口驱动程序的设计 2 4.1 uart 寄存器简介2 4.2 uart 串口工作原理5 4.3 uart 驱动程序详细设计5 第四章 总结.9 参考文献.10 1 第一章 概述 1.1 课程设计名称 bootloader 程序设计 1.2 课程设计目的 串口驱动和网口驱动程序的设计,可以通过串口或网口接收数据或文件, 并且可以写到 flash 中 1.3 要求 编写 bootloader 程序 uart.h uart.c 串口驱动测试程序 main.c 第二章 背景分析 2.1 bootloader 的概念 简单地说,bootloader 就是在操作系统内核运行之前运行的一段小程序。 通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统 的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确 的环境。 2.2 bootloader 的主要任务与典型结构框架 从操作系统的角度看,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.1 uart 寄存器简介 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 位,该位长度可由编程人员指定。 通信双方约定好帧格式后,指定同一波特率,以保证双方数据传输的同步。 3 uart 串口驱动需要设置的寄存器及其具体特性如表 4-1表 4-8 所示: 表 3-1 uart0 串行控制寄存器(ulcon0) 寄存器名地址是否读写描述复位默认值 ulcon00x50000000r/w串口 0 串行控制寄存器0x00 ulcon0位描述初始值 保留70 红外模式6选择串口 0 是否使用红外模式: 0 = 正常通信模式 1 = 红外通信模式 0 校验模式5:3设置串口 0 在数据接收和发送时采用的校验方式: 0xx = 无校验 100 = 奇校验 101 = 偶校验 110 = 强制校验/检测是否为 1 111 = 强制校验/检测是否为 0 000 停止位2设置串口 0 停止位数: 0 = 每个数据帧一个停止位 1 = 每个数据帧二个停止位 0 数据位1:0设置串口 0 数据位数: 00 = 5 个数据位 01 = 6 个数据位 10 = 7 个数据位 11 = 8 个数据位 00 表 3-2 uart0 串口控制寄存器(ucon0) 寄存器名地址是否读写描述复位默认值 ucon00x50000004r/w串口 0 控制寄存器0x00 ucon0位描述初始值 fclk 分频因 子 15:12当 uart0 选择 fclk 作为时钟源时,设置其 fclk 的分频因子 uart0 工作时钟频率 = fclk/fclk 分频因子 + 6 0000 uart 时钟源 选择 11:10选择 uart0 的工作时钟 pclk,uextclk,fclk/n: 00,10 = pclk 01 = uextclk 11 = fclk/n 00 发送数据中 断产生类型 9设置 uart0 中断请求类型,在非 fifo 传输模 式下,一旦发送数据缓冲区为空,立即产生中 断信号,在 fifo 传输模式下达到发送数据触发 条件时立即产生中断信号: 0 = 脉冲触发 1 = 电平触发 0 接收数据中 断产生类型 8设置 uart0 中断请求类型,在非 fifo 传输模 式下,一旦接收到数据,立即产生中断信号, 在 fifo 传输模式下达到接收数据触发条件时立 即产生中断信号: 0 = 脉冲触发 1 = 电平触发 0 接收数据超 时 7设置当接收数据时,如果数据超时,是否产生 接收中断: 0 = 不开启超时中断 1 = 开启超时中断 0 4 接收数据错 误中断 6设置当接收数据时,如果产生异常,如传输中 止,帧错误,校验错误时,是否产生接收中断: 0 = 不产生错误状态中断 1 = 产生错误状态中断 0 回送模式5设置该位时 uart 会进入回送模式,该模式仅 用于测试 0 = 正常模式 1 = 回送模式 0 发送终止信 号 4设置该位时,uart 会发送一个帧长度的终止 信号,发送完毕后,该位自动恢复为 0 0 = 正常传输 1 = 发送终止信号 0 发送模式3:2设置采用哪个方式执行数据写入发送缓冲区 00 = 无效 01 = 中断请求或查询模式 10 = dma0 请求 00 接收模式1:0设置采用哪个方式执行数据写入接收缓冲区 00 = 无效 01 = 中断请求或查询模式 10 = dma0 请求 0 表 3-3 uart fifo 控制寄存器(ufcon0) 寄存器名地址是否读写描述复位默认值 ufcon00x50000008r/w串口 0 fifo 控制寄存器0x00 ufcon0位描述初始值 发送数据 触发级别 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 = 不启用 fifo 1 = 启用 fifo0 表 3-4 uart modem 控制寄存器(umcon0) 寄存器名地址是否读写描述复位默 认值 umcon00x5000000cr/w串口 0 modem 控制寄存器0x00 umcon0位描述初始值 保留7:5必须全部置 00 afc 自动 流控 40 = 不开启流控 1 = 开启流控0 保留3:1必须全部置 0000 5 请求发送0如果启用 afc,该位无效,s3c2440a 会自动控制 nrts,如果不启用 afc,nrts 必须由软件控制 0 = 高电平激活 nrts 1 = 低电平激活 nrts 0 表 3-5 uart 发送/接收状态寄存器(utrstat0) 寄存器名地址是否读写描述复位默认 值 utrstat00x50000010r/w串口 0 发送/接收状态寄存器0x06 utrstat0位描述初始值 发送器为 空 2当发送缓存寄存器中没有数据要发送且发送移位寄 存器为空时,自动置 1 0 = 非空 1 = 发送器为空 1 发送缓存 寄存器为 空 1当发送缓存寄存器为空时,自动置 1 0 = 发送缓存寄存器非空 1 = 发送缓存寄存器为空 1 接收缓存 寄存器为 空 0当接收缓存寄存器有数据到达是,自动置 1 0 = 接收缓存寄存器为空 1 = 缓存寄存器接收数据 0 表 3-6 uart 发送缓存寄存器(utxh0) 寄存器名地址是否读写描述复位默认值 utxh00x50000020(l) 0x50000023(b ) w串口 0 发送缓存寄存器 表 3-7 uart 接收缓存寄存器(urxh0) 寄存器名地址是否读写描述复位默认值 urxh00x50000024(l) 0x50000027(b ) r串口 0 接收缓存寄存器 表 3-8 uart 比特率除数寄存器(ubrdiv0) 寄存器名地址是否读写描述复位默认值 ubrdiv00x5000002 8 r/w串口 0 比特率除数寄存器0x00 ubrdiv0位描述初始值 比特率除数15:0设置比特率除数(大于 0)使用外部输 入时可以置 0 3.2 uart 串口工作原理 每个 uart 包含一个波特率产生器、发送器、接收器和一个控制单元。 波特率发生器的时钟可以由 pclk 或 uextclk 提供。发送器和接收器包 含 64 字节的 fifo 缓冲寄存器和数据移位器。发送时,数据被写入 fifo,然后 拷贝到发送移位器中(1 字节大小),接下来数据通过发送数据引脚(txdn)被发送。 6 接收时,接收到的数据从接收数据引脚(rxdn)移入,然后从移位器(1 字节大小) 拷贝到 fifo 中。 3.3 uart 驱动程序详细设计 uart 驱动程序设计到的函数主要有初始化函数、串口发送字节函数、串 口发送字符串函数、串口接收字节函数 新建 uart.h 头文件,编写代码如下: #ifndef _uart_h #define _uart_h /串口寄存器宏定义 #define rulcon0 (*(volatile unsigned long *)0x50000000) #define rucon0 (*(volatile unsigned long *)0x50000004) #define rufcon0 (*(volatile unsigned long *)0x50000008) #define rumcon0 (*(volatile unsigned long *)0x5000000c) #define rutrstat0 (*(volatile unsigned long *)0x50000010) #define rutxh0 (*(volatile unsigned long *)0x50000020) #define rurxh0 (*(volatile unsigned long *)0x50000024) #define rubrdiv0 (*(volatile unsigned long *)0x50000028) #define rgphcon (*(volatile unsigned long *)0x56000070) #define rgphdat (*(volatile unsigned long *)0x56000074) #define rgphup (*(volatile unsigned long *)0x56000078) extern int uart_select(uint8 no); extern void uart_init(void); extern void uart_sendbyte(uint8 data); extern void uart_sendstr(char const *str); extern int uart_getkey(void); #endif 新建 uart.c 文件,用于具体实现上述函数,代码如下: #include “config.h“ /串口初始化函数 7 void uart_init(void) int i; rgphup = rgphup | (0x032); rgphcon = (rgphcon rufcon0 = 0x00; / 禁止 fifo 功能 rumcon0 = 0x00; / afc(流控制)禁能 rulcon0 = 0x03; / 禁止 irda,无奇偶校验,1 位停止位,8 位数据 位 rucon0 = 0x245; / 使用 pclk 来生成波特率,发送中断为电平触发 模式,接收中断为边沿触发模式,禁止接收超时中断,使能接收错误中断, 正常工作模式,中断或查询方式(非 dma) rubrdiv0=(int)(pclk/16.0/uart_bps + 0.5) -1; / 串口波特率设置 for(i=0;i100;i+); /串口发送字节函数 void uart_sendbyte(uint8 data) int i; while(!(rutrstat0 / 等待发送器为空 for(i=0; i10; i+); rutxh0 = data;/ 发送数据 /串口发送字符串函数 void uart_sendstr(char const *str) while(*str != 0) if(*str = n) uart_sendbyte(r); 8 uart_sendbyte(*str+);/ 发送数据 /串口接收字节函数 int uart_getkey(void) int i; while(!(rutrstat0 for(i=0; i10; i+); return(rurxh0); 编写 main.c,内容如下: int main(void) char cmd20; uint8 rece256; memset(cmd,0,20); uart_select(0); uart_init(); clk_init(); delayns(10); uart_sendstr(“串口初始化完成!rn“); uart_sendstr(“时钟初始化完成!rn“); while(1) memset(cmd,0,20); uart_receive(cmd); /uart_sendstr(cmd); if(memcmp(cmd,“exit“,4) = 0) break; 9 uart_sendstr(“rngood bye!rn“); return 0; 第四章 总结 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题, 锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着 科

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论