ARM9串口UART及编程.ppt

上传人:小飞机 文档编号:6501659 上传时间:2023-11-07 格式:PPT 页数:63 大小:250.99KB
返回 下载 相关 举报
ARM9串口UART及编程.ppt_第1页
第1页 / 共63页
ARM9串口UART及编程.ppt_第2页
第2页 / 共63页
ARM9串口UART及编程.ppt_第3页
第3页 / 共63页
ARM9串口UART及编程.ppt_第4页
第4页 / 共63页
ARM9串口UART及编程.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《ARM9串口UART及编程.ppt》由会员分享,可在线阅读,更多相关《ARM9串口UART及编程.ppt(63页珍藏版)》请在三一办公上搜索。

1、第六章 S3C2410的串口UART及编程,6.1 S3C2410的串口UART概述6.1.1 S3C2410异步串行通信(UART)单元S3C2410 UART单元提供3个独立的异步串行通信接口,皆可工作于查询、中断和DMA模式。使用系统时钟最高波特率达230.4 kb/s,如果使用外部设备提供的时钟,可以达到更高的速率。每一个UART单元包含一个16字节的FIFO(First Input First Output,先进先出移位寄存器),用于数据的接收和发送。S3C2410 UART支持可编程波特率、红外发送/接收(UART2)、1个或2个停止位、5位/6位/7位/8位数据宽度和奇偶校验。,

2、6.1.2 波特率的产生波特率由一个专用的UART波特率分频寄存器(UBRDIVn)控制,UBRDIVn值计算公如下:UBRDIVn=(int)ULK/(波特率 16)1或者 UBRDIVn=(int)PLK/(波特率 16)1式中:时钟选用ULK还是PLK由UART控制寄存器UCONn10的状态决定。如果UCONn10=0,则用PLK作为波特率发生器的时钟源频率;否则选用ULK作为波特率发生器的时钟源频率。UBRDIVn的值必须在1(2161)之间。例如:若ULK或者PLK等于40 MHz,当波特率为115200 b/s时,则UBRDIVn=(int)40 000 000/(115 200

3、16)一1=int(21.7)1=211=20,6.1.3 UART通信操作下面简略介绍UART操作,关于数据发送、数据接收、中断产生、波特率产生、查询检测模式、红外模式的详细介绍,参见下面6.3节。发送数据帧是可编程的。一个数据帧包含1个起始位、58个数据位、1个可选的奇偶校验位和12位停止位,停止位通过行控制寄存器ULCONn配置。与发送数据帧类似,接收数据帧也是可编程的。接收帧由1个起始位、58个数据位、l个可选的奇偶校验位以及12位行控制寄存器ULCONn中设定的停止位组成。接收器还可以检测溢出错、奇偶校验错、帧错误和传输中断,每一个错误均可以设置一个错误标志。,溢出错误(overru

4、n error):指已接收到的数据在读取之前被新接收的数据覆盖;奇偶校验错:指接收器检测到的校验和与设置的不符;帧错误:指没有接收到有效的停止位;传输中断:表示接收数据RxDn保持逻辑0超过一帧的传输时间。在FIFO模式下,如果RxFIFO非空,而在3个字的传输时间内没有接受到数据,则产生超时。,6.2 UART的控制寄存器6.2.1 UART行控制寄存器ULCONn 该寄存器的位6决定是否使用红外模式,位5、位4和位3决定校验方式,位2决定停止位长度,位1和位0决定每帧的数据位数。具体如下:ULCONn7 保留;ULCONn6 红外线模式,0:正常模式;1:红外线模式;ULCONn5:3 校

5、验模式,0 xx:无校验;100:奇校验;101:偶校验;ULCONn2 停止位,0:一个停止位;1:二个停止位;ULCONn1:0 数据位,00:5位;01:6位;10:7位;11:8位。,6.2.2 UART控制寄存器UCONn该寄存器决定UART的各种模式。UCONn10 1:ULK做波特率发生器;0:PLK做波特率发生器。UCONn9 1:Tx中断电平触发;0:Tx中断脉冲触发。UCONn8 1:Rx中断电平触发;0:Rx中断脉冲触发。UCONn7 1:接收超时中断允许;0:接收超时中断禁止。UCONn6 1:产生接收错误中断;0:不产生接收错误中断。UCONn5 l:发送直接传给接收

6、方式(loopback);0:正常模式。UCONn4 1:发送间断信号;0:正常模式发送。,UCONn3:2 发送模式选择:00:禁止发送;01:中断或查询模式;10:DMA0请求(UART0),DMA3请求(UART2);11:DMAl请求(UART1)。UCONn1:0 接收模式选择。00:禁止接收;01:中断或查询模式;10:DMA0请求UART0,DMA2请求UART2;11:DMAl请求UART1。,6.2.3 UART FIFO控制寄存器UFCONnUFCONn7:6 00:Tx FIFO寄存器中有0字节就触发中断;01:Tx FIFO寄存器中有4字节就触发中断;10:Tx FIF

7、O寄存器中有8字节就触发中断;11:Tx FIFO寄存器中有12字节就触发中断。UFCONn5:4 00:Rx FIFO寄存器中有4字节就触发中断;01:Rx FIFO寄存器中有8字节就触发中断;10:Rx FIFO寄存器中有12字节就触发中断;11:Rx FIFO寄存器中有16字节就触发中断。,UFCONn3 保留。UFCONn2 1:FIFO复位清零Tx FIFO;0:FIFO复位不清零TxFIFO。UFCONn1 1:FIFO复位清零Rx FIFO;0:F1FO复位不清零RxFIFO。UFCONn0 1:允许FIFO功能;0:禁止FIFO功能。,6.2.4 UART MODEM控制寄存器

8、UMCONnUMCONn7:5 保留,必须全为0。UMCONn4 1:允许使用AFC模式;0:禁止使用AFC模式。UMCONn3 保留,必须全为0。UMCONn0 1:激活rRTS;0:不激活rRTS。6.2.5 发送寄存器UTXH和接收寄存器URXH这两个寄存器存放发送和接收的数据,当然只有1字节(8位数据)。需要注意的是,在发生溢出错误时,接收的数据必须被读出来,否则会引发下次溢出错误。,6.2.6 发送和接收状态寄存器UTRSTATnUTRSTATn发送和接收状态寄存器包括 UTRSTAT0,UTRSTAT1 and UTRSTAT2 UTRSTATn 寄存器各位定义:UTRSTATn

9、1 发送缓冲器空标志0=不空;1=空。UTRSTATn 0 接收缓冲器有接收数据标志0=空;1=接收缓冲器有数据。6.2.7 波特率分频寄存器UBRDIV波特率分频寄存器UBRDIV的定义和使用在6.1.2中已叙述,不再重复。6.2.8 UART单元各寄存器的定义在随书提供的软件包2410test中,在2410addr.h文件中有关于UART单元各寄存器的定义。,/UART#define rULCON0(*(volatile unsigned*)0 x50000000)/UART 0 Line control#define rUCON0(*(volatile unsigned*)0 x5000

10、0004)/UART 0 control#define rUFCON0(*(volatile unsigned*)0 x50000008)/UART 0 FIFO control#define rUMCON0(*(volatile unsigned*)0 x5000000c)/UART 0 Modem control#define rUTRSTAT0(*(volatile unsigned*)0 x50000010)/UART 0 Tx/Rx status#define rUERSTAT0(*(volatile unsigned*)0 x50000014)/UART 0 Rx error st

11、atus#define rUFSTAT0(*(volatile unsigned*)0 x50000018)/UART 0 FIFO status,#define rUMSTAT0(*(volatile unsigned*)0 x5000001c)/UART 0 Modem status#define rUBRDIV0(*(volatile unsigned*)0 x50000028)/UART 0 Baud rate diviaor#define rULCON1(*(volatile unsigned*)0 x50004000)/UART 1 Line control#define rUCO

12、N1(*(volatile unsigned*)0 x50004004)/UART 1 Control#define rUFCON1(*(volatile unsigned*)0 x50004008)/UART 1 FIFO control#define rUMCON1(*(volatile unsigned*)0 x5000400c)/UART 1 Modem control#define rUTRSTAT1(*(volatile unsigned*)0 x50004010)/UART 1 Tx/Rx status,#define rUERSTAT1(*(volatile unsigned*

13、)0 x50004014)/UART 1 Rx error status#define rUFSTAT1(*(volatile unsigned*)0 x50004018)/UART 1 FIFO status#define rUMSTAT1(*(volatile unsigned*)0 x5000401c)/UART 1 Modem status#define rUBRDIV1(*(volatile unsigned*)0 x50004028)/UART 1 Baud rate divisor#define rULCON2(*(volatile unsigned*)0 x50008000)/

14、UART 2 Line control#define rUCON2(*(volatile unsigned*)0 x50008004)/UART 2 Control#define rUFCON2(*(volatile unsigned*)0 x50008008)/UART 2 FIFO control,#define rUMCON2(*(volatile unsigned*)0 x5000800c)/UART 2 Modem control#define rUTRSTAT2(*(volatile unsigned*)0 x50008010)/UART 2 Tx/Rx status#define

15、 rUERSTAT2(*(volatile unsigned*)0 x50008014)/UART 2 Rx error status#define rUFSTAT2(*(volatile unsigned*)0 x50008018)/UART 2 FIFO status#define rUMSTAT2(*(volatile unsigned*)0 x5000801c)/UART 2 Modem status#define rUBRDIV2(*(volatile unsigned*)0 x50008028)/UART 2 Baud rate divisor#ifdef_BIG_ENDIAN,#

16、define rUTXH0(*(volatile unsigned char*)0 x50000023)/UART 0 Transmission Hold#define rURXH0(*(volatile unsigned char*)0 x50000027)/UART 0 Receive buffer#define rUTXH1(*(volatile unsigned char*)0 x50004023)/UART 1 Transmission Hold#define rURXH1(*(volatile unsigned char*)0 x50004027)/UART 1 Receive b

17、uffer#define rUTXH2(*(volatile unsigned char*)0 x50008023)/UART 2 Transmission Hold,#define rURXH2(*(volatile unsigned char*)0 x50008027)/UART 2 Receive buffer#define WrUTXH0(ch)(*(volatile unsigned char*)0 x50000023)=(unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char*)0 x50000027)#define

18、 WrUTXH1(ch)(*(volatile unsigned char*)0 x50004023)=(unsigned char)(ch)#define RdURXH1()(*(volatile unsigned char*)0 x50004027)#define WrUTXH20(ch)(*(volatile unsigned char*)0 x50008023)=(unsigned char)(ch)#define RdURXH2()(*(volatile unsigned char*)0 x50008027)#difine UTXH0(0 x50000020+3)/Byte_acce

19、ss address by DMA#define URXH0(0 x50000024+3)#difine UTXH1(0 x50004020+3),#define URXH1(0 x50004024+3)#difine UTXH2(0 x50008020+3)#define URXH2(0 x50008024+3)#else/Little Endian#define rUTXH0(*(volatile unsigned char*)0 x50000020)/UART 0 Transmission Hold#define rURXH0(*(volatile unsigned char*)0 x5

20、0000024)/UART 0 Receive buffer#define rUTXH1(*(volatile unsigned char*)0 x50004020)/UART 1 Transmission Hold#define rURXH1(*(volatile unsigned char*)0 x50004024)/UART 1 Receive buffer#define rUTXH2(*(volatile unsigned char*)0 x50000820)/UART 2 Transmission Hold,#define rURXH2(*(volatile unsigned cha

21、r*)0 x50008024)/UART 2 Receive buffer#define WrUTXH0(ch)(*(volatile unsigned char*)0 x50000020)=(unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char*)0 x50000024)#define WrUTXH1(ch)(*(volatile unsigned char*)0 x50004020)=(unsigned char)(ch)#define RdURXH1()(*(volatile unsigned char*)0 x5000

22、4024)#define WrUTXH2(ch)(*(volatile unsigned char*)0 x50008020)=(unsigned char)(ch)#define RdURXH2()(*(volatile unsigned char*)0 x50008024)#difine UTXH0(0 x50000020+3)/Byte_access address by DMA,#define URXH0(0 x50000024+3)#difine UTXH1(0 x50004020+3)#define URXH1(0 x50004024+3)#difine UTXH2(0 x5000

23、8020+3)#define URXH2(0 x50008024+3)#endif,6.3 UART通信程序编写6.3.1 通信程序编写步骤UART通信程序可以采用查询、中断和DMA模式。我们通过使用较多的中断方式来介UART通信程序的编写。简单做法是,UART通信程序的编写参照例子程序。选通道,通过函数Uart_Select();选UART0UART2;选波特率和波特率发生器时钟,选波特率通过函数Uart_Pclk_En(int ch,int baud)或Uart_Pclk_En(int ch,int baud)来进行。时钟选UCLK,rUCON0|=0 x400;时钟选PCLK,rUCON

24、0,通信控制字(rUCON0)设定,如时钟选ULK做波特率发生器;Tx中断脉冲触发,Rx中断脉冲触发;接收超时中断允许;产生接收错误中断;正常模式发送:rUCON0|=(TX_INTTYPE9)|(RX_INTTYPE8)|(07)|(06)|(05)|(04)|(12)|(1);I/O口初始化,因为UART通信使用H口的第二功能,所以H口要上拉禁止:rGPHUP|=0 x1ff。H口控制寄存器nRTS1,nCTS1功能使能,rGPHCON&=0 x3c0000,rGPHCON|=0 x2faaa;设中断服务函数入口地址,把中断服务函数入口地址赋函数指针PISR_UARTn,注意,接收中断服务

25、函数入口地址和发送中断服务函数入口地址是一个,在中断服务函数中根据UTRSTATn 1和UTRSTATn 0状态决定是发送中断还是接收中断。,打开总中断屏蔽和子中断屏蔽等待中断:rINTMSK=(BIT_UART0);rINTSUBMSK=(BIT_SUB_TXD0);进入中断后,先屏蔽发送和接收中断,防止新来中断干扰我们的正常发送和接收,正常发送和接收结束后,清中断挂起和中断源挂起寄存器:ClearPending(BIT_UART0),rSUBSRCPND=(BIT_SUB_TXD0(发送),rSUBSRCPND=(BIT_SUB_RXD0|BIT_SUB_ERR0)(接收);取消中断屏蔽,

26、等下一次中断。6.3.2 通信程序编写示例下面给出的几个函数,是查询方式URAT通信常用到的主要函数,包括URAT初始化,字符的发送、接收函数,希望大家仔细阅读,理解每一行的含义。,1,UART 通信,采用查询方式:/引用头文件#include 2410addr.h#include 2410lib.h#include option.h#include def.h#include#include#include#include#include,/函数声明void Uart_Init(int pclk,int baud);char Uart_Getch(void);char Uart_GetKey

27、(void);void Uart_GetString(char*string);void Uart_SendByte(int data);void Uart_SendString(char*pt);void Uart_Select(int ch);/-/串口初始化,输入PCLK,输入波特率/-,static int whichUart=0;void Uart_Init(int pclk,int baud)int i;if(pclk=0)pclk=PCLK;rUFCON0=0 x0;/UART channel 0 FIFO control register,FIFO disable rUFCON

28、1=0 x0;/UART channel 1 FIFO control register,FIFO disable rUFCON2=0 x0;/UART channel 2 FIFO control register,FIFO disable rUMCON0=0 x0;/UART chaneel 0 MODEM control register,AFC disable rUMCON1=0 x0;/UART chaneel 1 MODEM control register,AFC disable,/UART0 rULCON0=0 x3;/Line control register:Normal,

29、No parity,1 stop,8 bits./0 0 0 0 0 0 1 1rUCON0=0 x245;/Control register/10 9 8 7 6 5 4 3:2 1:0/Clock Sel,Tx Int,Rx Int,Rx Time Out,Rx err,Loop-back,Send break,Transmit Mode,Receive Mode 0 1 0 0 1 0 0 0 1 0 1/PCLK,Level Pulse Disable Generate Normal Normal Interrupt or Polling/rUBRDIV0=(int)(pclk/16.

30、/baud)-1);/Baud rate divisior register 0 rUBRDIV0=(int)(pclk/16./baud+0.5)-1);/Baud rate divisior register 0,/UART1 rULCON1=0 x3;rUCON1=0 x245;rUBRDIV1=(int)(pclk/16./baud)-1);/UART2 rULCON2=0 x3;rUCON2=0 x245;rUBRDIV2=(int)(pclk/16./baud)-1);for(i=0;i100;i+);/-/选择串口通道/-void Uart_Select(int ch)which

31、Uart=ch;,/-/等待发送移位寄存器空/-void Uart_TxEmpty(int ch)if(ch=0)while(!(rUTRSTAT0/Wait until tx shifter is empty.,/-/接收串口一字节数据,注意 RdURXH0(),RdURXH1(),RdURXH2()的使用/-char Uart_Getch(void)if(whichUart=0)while(!(rUTRSTAT0,else if(whichUart=2)while(!(rUTRSTAT2,else if(whichUart=1)if(rUTRSTAT1,/-/串口得到字符串/-void U

32、art_GetString(char*string)char*string2=string;char c;while(c=Uart_Getch()!=r)if(c=b)if(int)string2(int)string)Uart_Printf(b b);string-;,else*string+=c;Uart_SendByte(c);*string=0;Uart_SendByte(n);,/-/得到串口初始号/-int Uart_GetIntNum(void)char str30;char*string=str;int base=10;int minus=0;int result=0;int

33、lastIndex;int i;Uart_GetString(string);,if(string0=-)minus=1;string+;if(string0=0,if(stringlastIndex=h|stringlastIndex=H)base=16;stringlastIndex=0;lastIndex-;if(base=10)result=atoi(string);result=minus?(-1*result):result;,else for(i=0;i=lastIndex;i+)if(isalpha(stringi)if(isupper(stringi)result=(resu

34、lt4)+stringi-A+10;else result=(result4)+stringi-a+10;,else result=(result4)+stringi-0;result=minus?(-1*result):result;return result;/-/串口发送字节/-void Uart_SendByte(int data)if(whichUart=0),if(data=n)while(!(rUTRSTAT0 else if(whichUart=1)if(data=n),while(!(rUTRSTAT1 else if(whichUart=2)if(data=n),while

35、(!(rUTRSTAT2,/-/串口发送字符串/-void Uart_SendString(char*pt)while(*pt)Uart_SendByte(*pt+);2,UART0 中断方式发送和接收/-/UART0中断方式发送和接收/-,void Test_Uart0_Int(void)Uart_Port_Set();Uart_Select(0);/*UART0 Tx test with interrupt*/isTxInt=1;uart0TxStr=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-UART0 Tx interrupt test is good!r

36、n;Uart_Printf(Uart channel 0 Tx Interrupt Testn);,pISR_UART0=(unsigned)Uart0_TxInt;rULCON0=(0 UCLK fuction rUCON0|=(TX_INTTYPE9)|(RX_INTTYPE8)|(07)|(06)|(05)|(04)|(12)|(1);/Clock,Tx:Def,Rx:Def,Rx timeout:x,Rxerror int:x,Loop-back:x,Send break:x,Tx:int,Rx:int Uart_TxEmpty(0);/wait until tx buffer is

37、empty.rINTMSK=(BIT_UART0);rINTSUBMSK=(BIT_SUB_TXD0);while(isTxInt);,/*UART0 Rx test with interrupt*/isRxInt=1;uart0RxStr=(char*)UARTBUFFER;Uart_Printf(nUart channel 0 Rx Interrupt Test:n);Uart_Printf(After typing ENTER key,you will see the characters which was typed by you.);,Uart_Printf(nTo quit,pr

38、ess ENTER key.!n);Uart_TxEmpty(0);/wait until tx buffer is empty.pISR_UART0=(unsigned)Uart0_RxIntOrErr;rULCON0=(0 UCLK fuction rUCON0|=(TX_INTTYPE9)|(RX_INTTYPE8)|(07)|(16)|(05)|(04)|(12)|(1);/Clock,Tx:pulse,Rx:pulse,Rx:timeout:x,Rx,errorint:o,Loop-back:x,Sendbreak:x,Tx:int,Rx:int/Clear Int Pending

39、and Unmask ClearPending(BIT_UART0);rINTMSK=(BIT_UART0);,rSUBSRCPND=(BIT_SUB_TXD0|BIT_SUB_RXD0|BIT_SUB_ERR0);rINTSUBMSK=(BIT_SUB_RXD0|BIT_SUB_ERR0);while(isRxInt);rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_ERR0);rINTMSK|=(BIT_UART0);Uart_Printf(%sn,(char*)UARTBUFFER);Uart_Port_Return();/-/UART发送和接收用到的I/O口保存和初

40、始化/-,void Uart_Port_Set(void)/Push UART GPIO port configuration save_rGPHCON=rGPHCON;save_rGPHDAT=rGPHDAT;save_rGPHUP=rGPHUP;/Configure UART port rGPHCON/SUBINT ALL MASK/Push Uart control registers,save_ULCON0=rULCON0;save_UCON0=rUCON0;save_UFCON0=rUFCON0;save_UMCON0=rUMCON0;save_ULCON1=rULCON1;save

41、_UCON1=rUCON1;save_UFCON1=rUFCON1;save_UMCON1=rUMCON1;save_ULCON2=rULCON2;save_UCON2=rUCON2;save_UFCON2=rUFCON2;save_UMCON2=rUMCON2;/Initialize UART1,2 port,/-/UART发送和接收结束,用到的I/O口恢复原来状态/-void Uart_Port_Return(void)/Pop UART GPIO port configuration rGPHCON=save_rGPHCON;rGPHDAT=save_rGPHDAT;rGPHUP=sav

42、e_rGPHUP;/Pop Uart control registers rULCON0=save_ULCON0;rUCON0=save_UCON0;rUFCON0=save_UFCON0;rUMCON0=save_UMCON0;rULCON1=save_ULCON1;rUCON1=save_UCON1;,rUFCON1=save_UFCON1;rUMCON1=save_UMCON1;rULCON2=save_ULCON2;rUCON2=save_UCON2;rUFCON2=save_UFCON2;rUMCON2=save_UMCON2;/-/UART发送和接收使用UCLK,并计算rUBRDI

43、V0和设定波特率/-,void Uart_Uclk_En(int ch,int baud)/*int ch,baud;Uart_Printf(nSelect UART channel0:UART0/1:UART1/2:UART2:n);ch=Uart_GetIntNum();Uart_Printf(nSelect baud rate:n);baud=Uart_GetIntNum();*/if(ch=0)Uart_Select(0);rUCON0|=0 x400;/Select UCLK rUBRDIV0=(int)(UCLK/16./baud)-1);/Baud rate divisior r

44、egister Uart_Printf(UCLK is enabled by UART0.n);,else if(ch=1)Uart_Select(1);rUCON1|=0 x400;/Select UCLK rUBRDIV1=(int)(UCLK/16./baud)-1);/Baud rate divisior register Uart_Select(0);Uart_Printf(UCLK is enabled by UART1.n);else Uart_Select(2);rUCON2|=0 x400;/Select UCLK rUBRDIV2=(int)(UCLK/16./baud)-

45、1);/Baud rate divisior register Uart_Select(0);Uart_Printf(UCLK is enabled by UART2.n);/for(i=0;i100;i+);/For the satble operation,/-/UART发送和接收使用PCLK,并计算rUBRDIV0和设定波特率/-void Uart_Pclk_En(int ch,int baud)/*int ch,baud;Uart_Printf(nSelect UART channel0:UART0/1:UART1/2:UART2:n);ch=Uart_GetIntNum();Uart

46、_Printf(nSelect baud rate:n);baud=Uart_GetIntNum();*/if(ch=0)Uart_Select(0);rUCON0,else if(ch=1)Uart_Select(1);rUCON1|=0 x3ff;/Select PCLK rUBRDIV1=(int)(PCLK/16./baud)-1);/Baud rate divisior register Uart_Select(0);Uart_Printf(PCLK is enabled by UART1.n);else Uart_Select(2);rUCON2|=0 x3ff;/Select P

47、CLK rUBRDIV2=(int)(PCLK/16./baud)-1);/Baud rate divisior register Uart_Select(0);Uart_Printf(PCLK is enabled by UART2.n);/for(i=0;i100;i+);/For the satble operation,/-/UART0发送中断服务程序/-void _irq Uart0_TxInt(void)rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);/Just for the safety if(*uart0TxStr!=

48、0)WrUTXH0(*uart0TxStr+);ClearPending(BIT_UART0);/Clear master pending rSUBSRCPND=(BIT_SUB_TXD0);/Clear Sub int pending rINTSUBMSK/Unmask sub int,else isTxInt=0;ClearPending(BIT_UART0);/Clear master pending rSUBSRCPND=(BIT_SUB_TXD0);/Clear Sub int pending rINTMSK|=(BIT_UART0);/-/UART0接收和接收错误中断服务程序/-,

49、void _irq Uart0_RxIntOrErr(void)rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);if(rSUBSRCPND,/-/UART0接收子程序/-void _sub_Uart0_RxInt(void)if(RdURXH0()!=r)Uart_Printf(%c,RdURXH0();*uart0RxStr+=(char)RdURXH0();else isRxInt=0;*uart0RxStr=0;Uart_Printf(n);,/-/UART0接收错误子程序/-void _sub_Uart0_RxErrInt(vo

50、id)switch(rUERSTAT0)/to clear and check the status of register bits case 1:Uart_Printf(Overrun errorn);break;case 2:Uart_Printf(Parity errorn);break;,case 4:Uart_Printf(Frame errorn);break;case 8:Uart_Printf(Breake detectn);break;default:break;,第六章习题与练习1,了解并熟悉UART的概念及工作原理。2,控制寄存器ULCONn、UCONn的作用,各bit

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号