基于ARM9的BootLoader启动设计(2)

2019-04-15 15:04

回送模式 5 设置该位时UART会进入回送模式,该模式仅用于测试 0 = 正常模式 1 = 回送模式 设置该位时,UART会发送一个帧长度的终止信号,发送完毕后,该位自动恢复为0 0 = 正常传输 1 = 发送终止信号 设置采用哪个方式执行数据写入发送缓冲区 00 = 无效 01 = 中断请求或查询模式 10 = DMA0请求 接收模式 1:0 设置采用哪个方式执行数据写入接收缓冲区 00 = 无效 01 = 中断请求或查询模式 10 = DMA0请求

表3-3 UART FIFO控制寄存器(UFCON0)

寄存器名 UFCON0 UFCON0 发送数据 触发级别 接收数据 触发级别 保留 发送FIFO重置 接收FIFO重置 启用FIFO 寄存器名 UMCON0 UMCON0 保留 AFC自动流控 保留 请求发送 地址 0x5000000C 位 7:5 4 3:1 0 必须全部置0 0 = 不开启流控 1 = 开启流控 必须全部置0 如果启用AFC,该位无效,S3C2440A会自动控制nRTS,如果不启用AFC,nRTS必须由软件控制 0 = 高电平激活nRTS 1 = 低电平激活nRTS 表3-5 UART 发送/接收状态寄存器(UTRSTAT0) 寄存器名 地址 是否读写 4

0 发送终止信号 发送模式 4 0 3:2 00 0 地址 0x50000008 位 7:6 是否读写 R/W 描述 描述 串口0 FIFO控制寄存器 复位默认值 0x00 初始值 0 设置FIFO发送模式的触发级别: 00 = FIFO为空触发 01 = 16字节触发 10 = 32字节触发 11 = 48字节触发 设置FIFO接收模式的触发级别: 00 = FIFO为空触发 01 = 16字节触发 10 = 32字节触发 11 = 48字节触发 在重置FIFO后自动清除发送缓冲区 0 = 正常模式 1 = 自动清除 在重置FIFO后自动清除接收缓冲区 0 = 正常模式 1 = 自动清除 5:4 00 3 2 1 0 0 0 0 复位默认值 0x00 初始值 0 0 000 0 0 0 = 不启用FIFO 1 = 启用FIFO 表3-4 UART MODEM控制寄存器(UMCON0) 是否读写 R/W 描述 串口0 MODEM控制寄存器 描述 描述 复位默认

值 UTRSTAT0 UTRSTAT0 发送器为空 发送缓存 寄存器为空 接收缓存 寄存器为空 表3-6 UART 发送缓存寄存器(UTXH0)

寄存器名 地址 是否读写 描述 复位默认值 UTXH0 0x50000020(L) W 串口0 发送缓存寄存器 — 0x50000023(B) 表3-7 UART 接收缓存寄存器(URXH0) 寄存器名 URXH0 地址 0x50000024(L) 0x50000027(B) 地址 0x50000028 位 15:0 是否读写 R 描述 串口0 接收缓存寄存器 复位默认值 — 0 0x50000010 位 2 R/W 串口0 发送/接收状态寄存器 描述 当发送缓存寄存器中没有数据要发送且发送移位寄存器为空时,自动置1 0 = 非空 1 = 发送器为空 1 当发送缓存寄存器为空时,自动置1 0 = 发送缓存寄存器非空 1 = 发送缓存寄存器为空 当接收缓存寄存器有数据到达是,自动置1 0 = 接收缓存寄存器为空 1 = 缓存寄存器接收数据 0 1 0x06 初始值 1 表3-8 UART 比特率除数寄存器(UBRDIV0) 寄存器名 UBRDIV0 UBRDIV0 比特率除数 是否读写 R/W 描述 串口0比特率除数寄存器 复位默认值 0x00 初始值 — 描述 设置比特率除数(大于0)使用外部输 入时可以置0 3.2 UART串口工作原理

每个UART包含一个波特率产生器、发送器、接收器和一个控制单元。 波特率发生器的时钟可以由PCLK或UEXTCLK提供。发送器和接收器包含64字节的FIFO缓冲寄存器和数据移位器。发送时,数据被写入FIFO,然后拷贝到发送移位器中(1字节大小),接下来数据通过发送数据引脚(TxDn)被发送。接收时,接收到的数据从接收数据引脚(RxDn)移入,然后从移位器(1字节大小)拷贝到FIFO中。

3.3 UART驱动程序详细设计

UART驱动程序设计到的函数主要有初始化函数、串口发送字节函数、串口

5

发送字符串函数、串口接收字节函数

新建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 \//串口初始化函数 void UART_Init(void) {

int i;

rGPHUP = rGPHUP | (0x03<<2);

rGPHCON = (rGPHCON & (~0x000000F0)) | (0x000000A0);

6

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;i<100;i++); }

//串口发送字节函数

void UART_SendByte(uint8 data) {

int i;

while(!(rUTRSTAT0 & 0x02)); for(i=0; i<10; i++); rUTXH0 = data; }

//串口发送字符串函数

void UART_SendStr(char const *str) {

while(*str != '\\0')

{

if(*str == '\\n') UART_SendByte('\\r');

// 发送数据

// 等待发送器为空

UART_SendByte(*str++); }

//串口接收字节函数 int UART_GetKey(void) {

7

// 发送数据

}

int i;

while(!(rUTRSTAT0 & 0x1)); for(i=0; i<10; i++); return(rURXH0);

}

编写main.c,内容如下: int main(void) {

char cmd[20]; uint8 rece[256]; memset(cmd,'\\0',20); UART_Select(0); UART_Init(); Clk_Init(); DelayNS(10);

UART_SendStr(\串口初始化完成!\\r\\n\UART_SendStr(\时钟初始化完成!\\r\\n\while(1) {

memset(cmd,'\\0',20); }

UART_SendStr(\

return 0;

UART_Receive(cmd); //UART_SendStr(cmd); if(memcmp(cmd,\ break;

}

8


基于ARM9的BootLoader启动设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:异形柱框架结构设计论文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: