首页 理论教育 实训成果:UARTAPI函数分析

实训成果:UARTAPI函数分析

时间:2023-11-08 理论教育 版权反馈
【摘要】:UART的底层驱动程序相对较复杂,应用人员可以直接调用设备厂家提供的API函数来完成相应的功能,而可以基本忽略其底层的细节。本节主要对UART的部分驱动程序进行详细讲解,其他驱动程序只给出其具体功能。达盛公司的实验系统有关UART的驱动程序中共包括8个函数,分别是Uart_Init、Ua rt_Getch、Uart_GetKey、Uart_GetString、Uart_SendByte、Uart_SendString、Ua rt_Printf和Ua rt_Select。rUFCON0=0x0;禁止使用UART0的FIFO。至此UART0设置完毕。该函数还有自动回传功能,即收到字符串后自动从UART上将收到的字符串发送回上位机。

实训成果:UARTAPI函数分析

UART的底层驱动程序相对较复杂,应用人员可以直接调用设备厂家提供的API(应用程序接口)函数来完成相应的功能,而可以基本忽略其底层的细节。

本节主要对UART的部分驱动程序进行详细讲解,其他驱动程序只给出其具体功能。

达盛公司的实验系统有关UART的驱动程序中共包括8个函数,分别是Uart_Init、Ua rt_Getch、Uart_GetKey、Uart_GetString、Uart_SendByte、Uart_SendString、Ua rt_Printf和Ua rt_Select。

(1)void Uart_Init(int p clk,int baud)——Uart初始化函数

//UART初始化函数

if(pclk==0)pclk=PCLK;PCLK在option.h中有定义,PCLK=202800000/4即S3C2410A的系统时钟PCLK。在TARGET.c中调用Uart_Init函数的调用值为pclk=0、baud=115200,即采用S3C2410A的系统时钟作为波特率发生器的时钟源,且波特率为115200B/s。

rUFCON0=0x0;禁止使用UART0的FIFO。rUFCON1=0x0;和rUFCON2=0x0;分别是禁止使用UART1和UART2的FIFO。

rUMCON0=0x0;和rUMCON1=0x0;是禁止UART0和UART1的AFC功能。

rULCON0=0x3;(0011b)即定义UART的帧格式。8bit数据位,1bit停止位,无校验位,正常模式操作。

rUCON1=0x245;(0010_0100_0101b)即定义接收和发送模式都采用中断或查询方式;正常操作不自环;产生接收错误状态中断;禁止接收超时中断;接收中断请求为脉冲式;发送中断请求为电平式;UART工作时钟选择PCLK。

rUBRDIV0=((int)(pclk/16./baud+0.5)-1);计算波特率分频寄存器的值。

至此UART0设置完毕。后面的程序中又分别对UART1和UART2进行了设置,具体参数与UART0相同。

for(i=0;i<100;i++);为延时程序。

(2)void Uart_Sele ct(int c h)——选择串口通道

S3C2410A共有3个串口,也即函数中的ch参数的值可以为0、1或2。

ch为UART的通道标号,即whic hUart。

这个程序分别判断了UART0~UART2的发送器(发送缓存移位寄存器)是否为空,如果不为空,那么程序处于等待状态。具体是依靠判断寄存器UTRSTATn的第3位的值来确认发送器是否为空。如果UTRSTATn[2]=1b,那么发送器为空。

(4)char Uart_Getch(void)——从UART接口获取一个字符

程序中RdURXH0()、RdURXH1()和RdURXH2()在文件2410a ddr.h中有定义,分别对应3个UART接收缓存寄存器的地址(小端格式)。RdURXH0()为URXH0的地址,RdURXH1()为URXH1的地址,RdURXH2()为URXH2的地址。在程序中,检查寄存器UTRSTATn[0]的值,判断是否已经接收到数据(UTRSTATn[0]=1b即接收到了数据)。如果接收到了数据,那么返回接收缓存寄存器内的数据;如果没有收到数据,那么程序处于等待状态直到收到数据为止。(www.xing528.com)

此程序中whic huart为UART通道号,分别判断3个UART通道有没有收到数据。

(5)char Uart_GetKey(void)——从UART返回一个字符

这个程序与Uart_Getch函数很类似,也是从UART返回一个字符,不同的是当UART没有收到数据时,不会进行等待而直接返回“0”值。这个函数是用来从UART返回一个键值

(6)void Uart_SendBy te(int data)——从串口发送一个字节数据

该程序的功能是从UART发送一个字节的数据。

(7)void Uart_GetString(c har*string)

Void Uart_GetString(c har*string)函数的功能就是从UART返回一个一个的字符,然后组成一个字符串存储到指针变量string定义的地址空间中去。string是一个字符型指针变量,也即string定义了一个存储字符的内存空间的起始地址,这个变量和单片机中MOV 32H,A的32H很类似。该函数还有自动回传功能,即收到字符串后自动从UART上将收到的字符串发送回上位机。该程序还可以实现退格操作。

附:C语言常用的转义字符

b退格f换页n换行r回车t水平制表v垂直制表\反斜杠

?问号字符′单引号字符″双引号字符 空字符

ddd一到三位进制xhh一到二位十六进制

(8)int Ua rt_GetIntNum(void)

int Uart_GetIntNum(v oid)程序的主要功能是将收到的字符串根据进制形式转换成int变量返回。

(9)void Uart_SendString(c har*pt)

void Uart_SendString(c har*pt)程序用来发送字符串。

(10)void Uart_Printf(c har*fmt,...)

Uart_Printf()为常用的串口打印函数,其常用于满足特定条件时通过串口打印信息。ARM与PC机通信,常通过Uart_Printf()这个函数在上位机里输出信息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈