长治学院
课程设计报告
课程名称: 嵌入式系统原理与应用技术
设计题目: 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 课程设计名称
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空间。
1
(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位,该位长度可由编程人员指定。
通信双方约定好帧格式后,指定同一波特率,以保证双方数据传输的同步。 UART串口驱动需要设置的寄存器及其具体特性如表4-1~表4-8所示:
2
表3-1 UART0串行控制寄存器(ULCON0)
寄存器名 ULCON0 ULCON0 保留 红外模式 校验模式 地址 0x50000000 位 7 6 5:3 选择串口0是否使用红外模式: 0 = 正常通信模式 1 = 红外通信模式 设置串口0在数据接收和发送时采用的校验方式: 0xx = 无校验 100 = 奇校验 101 = 偶校验 110 = 强制校验/检测是否为1 111 = 强制校验/检测是否为0 停止位 2 设置串口0停止位数: 0 = 每个数据帧一个停止位 1 = 每个数据帧二个停止位 数据位 1:0 设置串口0数据位数: 00 = 5个数据位 01 = 6个数据位 10 = 7个数据位 11 = 8个数据位 表3-2 UART0串口控制寄存器(UCON0) 寄存器名 UCON0 UCON0 FCLK分频因子 UART时钟源选择 发送数据中断产生类型 地址 0x50000004 位 15:12 是否读写 R/W 描述 串口0控制寄存器 描述 复位默认值 0x00 初始值 0000 00 0 000 是否读写 R/W 描述 描述 串口0串行控制寄存器 复位默认值 0x00 初始值 0 0 当UART0选择FCLK作为时钟源时,设置其FCLK的分频因子 UART0工作时钟频率 = FCLK/FCLK分频因子 + 6 选择UART0的工作时钟PCLK,UEXTCLK,FCLK/n: 00,10 = PCLK 01 = UEXTCLK 11 = FCLK/n 设置UART0中断请求类型,在非FIFO传输模式下,一旦发送数据缓冲区为空,立即产生中断信号,在FIFO传输模式下达到发送数据触发条件时立即产生中断信号: 0 = 脉冲触发 1 = 电平触发 11:10 00 9 0 接收数据中断产生类型 8 设置UART0中断请求类型,在非FIFO传输模式下,一旦接收到数据,立即产生中断信号,在FIFO传输模式下达到接收数据触发条件时立即产生中断信号: 0 = 脉冲触发 1 = 电平触发 0 接收数据超时 接收数据错误中断 7 设置当接收数据时,如果数据超时,是否产生接收中断: 0 = 不开启超时中断 1 = 开启超时中断 设置当接收数据时,如果产生异常,如传输中止,帧错误,校验错误时,是否产生接收中断: 0 = 不产生错误状态中断 1 = 产生错误状态中断 3 0 6 0