s3c2440的UART用法Word格式文档下载.docx

上传人:b****2 文档编号:14360928 上传时间:2022-10-22 格式:DOCX 页数:18 大小:26.26KB
下载 相关 举报
s3c2440的UART用法Word格式文档下载.docx_第1页
第1页 / 共18页
s3c2440的UART用法Word格式文档下载.docx_第2页
第2页 / 共18页
s3c2440的UART用法Word格式文档下载.docx_第3页
第3页 / 共18页
s3c2440的UART用法Word格式文档下载.docx_第4页
第4页 / 共18页
s3c2440的UART用法Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

s3c2440的UART用法Word格式文档下载.docx

《s3c2440的UART用法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《s3c2440的UART用法Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

s3c2440的UART用法Word格式文档下载.docx

另一个很重要的地方就是设置波特率。

s3c2440波特率的时钟源有三个:

PCLK、FCLK/n和UEXTCLK。

时钟源的选择是由UCONn的第10位和第11位来完成的。

波特率的具体计算公式为:

时钟源频率÷

(波特率×

16)-1

这个计算结果很可能是小数,把该小数取最接近的整数,放入寄存器UBRDIVn中就完成了波特率的设置。

如我们选择波特率的时钟源为PCLK,它为50MHz,我们设置的波特率为115.2kHz,通过上式计算的结果为26.13,取整后得到26,那么我们把26放入UBRDIVn中即可。

由于我们没有使用FIFO和MODEM,所以可以不用设置FIFO控制寄存器UFCONn和MODEM控制寄存器UMCONn。

通过以上寄存器的设置,UART就可以正常传输数据。

接收到的数据是放到接收缓存器URXHn中,要发送数据时,是把数据放入发送缓存器UTXHn中。

由于UART是通过字节方式传输数据的,因此要区分是大端模式还是小端模式,也就是说这两个寄存器在这两种模式下,所在的地址是不同。

为了了解当前数据传输的各种状态,还需要一些状态寄存器。

传输状态寄存器UTRSTATn非常有用,它的第0位可以用来判断接受缓存器内是否有可接收的数据,第1位和第2位可以用来判断发送缓存器中是否为空,为空时可以发送数据。

由于在这里我们不进行传输数据时错误的判断,因此错误状态寄存器UERSTATn不需要,FIFO状态寄存器UFSTATn和MODEM状态寄存器UMSTATn在这里也不需要。

我们给出UART通信的两种方法:

查询和中断。

为了验证程序,使用任一款的串行通信软件来实现PC和s3c2440之间的通信即可。

首先给出的是查询程序。

它是在主程序的循环体内不断查询UART端口,当有数据来时,就接收数据,并再通过UART发送该数据。

然后根据所接收数据的不同,分别执行不同的内容,如点亮、熄灭LED,蜂鸣器响、或不响。

在这里,我们每次只完成一个字节的传输。

#definerGPBCON(*(volatileunsigned*)0x56000010)//PortBcontrol

#definerGPBDAT(*(volatileunsigned*)0x56000014)//PortBdata

#definerGPBUP(*(volatileunsigned*)0x56000018)//Pull-upcontrolB

#definerGPHCON(*(volatileunsigned*)0x56000070)//PortHcontrol

#definerGPHUP(*(volatileunsigned*)0x56000078)//Pull-upcontrolH

#definerULCON0(*(volatileunsigned*)0x50000000)//UART0Linecontrol

#definerUCON0(*(volatileunsigned*)0x50000004)//UART0Control

#definerUFCON0(*(volatileunsigned*)0x50000008)//UART0FIFOcontrol

#definerUMCON0(*(volatileunsigned*)0x5000000c)//UART0Modemcontrol

#definerUTRSTAT0(*(volatileunsigned*)0x50000010)//UART0Tx/Rxstatus

#definerUERSTAT0(*(volatileunsigned*)0x50000014)//UART0Rxerrorstatus

#definerUFSTAT0(*(volatileunsigned*)0x50000018)//UART0FIFOstatus

#definerUMSTAT0(*(volatileunsigned*)0x5000001c)//UART0Modemstatus

#definerUBRDIV0(*(volatileunsigned*)0x50000028)//UART0Baudratedivisor

//littleendian

#definerUTXH0(*(volatileunsignedchar*)0x50000020)//UART0TransmissionHold

#definerURXH0(*(volatileunsignedchar*)0x50000024)//UART0Receivebuffer

voidMain(void)

{

charch;

rGPBCON=0x015551;

rGPBUP=0x7ff;

rGPBDAT=0x1e0;

rGPHCON=0x00faaa;

//使用UART0功能

rGPHUP=0x7ff;

rULCON0=0x3;

//设置UART0无奇偶校验,一位停止位,8位数据

rUCON0=0x245;

//PCLK为时钟源,接收和发送数据为查询或中断方式

rUFCON0=0;

//

rUMCON0=0;

rUBRDIV0=26;

//设置波特率,PCLK为50MHz,波特率为115.2kHz

while(!

(rUTRSTAT0&

0x2));

//等待并判断发送缓存是否为空

rUTXH0=0xaa;

//是空,则发送0xAA字节

while

(1)

while(!

0x1));

//等待并判断接收缓存是否准备好

ch=rURXH0;

//接收一个字节数据

rUTXH0=ch;

//发送一个字节数据

switch(ch)//根据所接收数据的不同,执行不同的程序

{

case0x11:

//灭LED

rGPBDAT|=0x1e0;

break;

case0x22:

//亮LED

rGPBDAT&

=0x1f;

case0x33:

//蜂鸣器不响

=0x1e0;

case0x44:

//蜂鸣器响

rGPBDAT|=0x1;

default:

//LED灭,蜂鸣器不响

rGPBDAT=0x1e0;

}

}

下面是UART中断程序,它要比查询复杂一些,因为涉及到了中断处理,并且UART发送数据和接收数据是一个中断源。

主程序循环体内不执行任何程序,都在UART中断程序内执行。

当接收到0x55字节数据时,亮两个LED,当接收到其他数据时,发送该字节,并在发送部分执行亮4个LED程序。

#define_ISR_STARTADDRESS0x33ffff00

#definepISR_UART0(*(unsigned*)(_ISR_STARTADDRESS+0x90))

#defineU32unsignedint

#definerGPBUP(*(volatileunsigned*)0x56000018)//Pull-upcontrolB

//#definerGPHDAT(*(volatileunsigned*)0x56000074)//PortHdata

#definerSRCPND(*(volatileunsigned*)0x4a000000)//Interruptrequeststatus

#definerINTMSK(*(volatileunsigned

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1