本文主要是介绍江山易改本性难移之ZYNQ SDK API函数笔记(UART),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
初学Xilinx ZYNQ SDK的开发,下面记录使用到的API函数及自己的理解。若有误,还请指教。
UART函数
常用编程步骤:
1.查找输入设备的ID查找设备;
2.输入的配置信息初始化;
3.设置工作模式;
4.设置波特率;
5.设置RxFIFO的中断触发等级;
6.设置接收超时时间;
7.设置UART的中断触发方式
配置UART只需要以上5个步骤,其中6、7是笔者做串口不定长的时候设置的,参考者可要可不要。
1.UART初始化
对UART设备初始化操作和前面GPIO设备、定时器设备、XADC设备的初始化过程一样,不再赘述。接着使用XUartPs_SelfTest函数对UART设备自检。
s32 XUartPs_SelfTest(XUartPs *InstancePtr)
2.模式配置
初始化函数中还用XUartPs_SetOperMode函数设置了UART的工作模式。工作模式在xuartps.h文件中宏定义。
void XUartPs_SetOperMode(XUartPs *InstancePtr, u8 OperationMode)
四种工作模式的作用请参考。下表给出每种模式的宏定义:
3.格式配置
接下来使用XUartPs_SetDataFormat函数设置UART的数据格式,包括波特率、数据位数、停止位数和奇偶校验。调用此函数时应确保UART没有收发数据。一般不用。
s32 XUartPs_SetDataFormat(XUartPs *InstancePtr, XUartPsFormat * FormatPtr)
上面的函数中使用了XuartPsFormat类型的结构体来设置UART格式。该结构体原型如下:
typedef struct {
u32 BaudRate; /**< In bps, ie 1200 */
u32 DataBits; /**< Number of data bits */
u32 Parity; /**< Parity */
u8 StopBits; /**< Number of stop bits */
} XUartPsFormat;
下表总结了与数据格式相关的宏定义,使用时要将其填到结构体变量的对应位置。一般波特率可以写成数字形式,其余三个成员都要用宏定义的形式。
4.波特率设置
我们绝大多数情况下都会使用“8位数据、1位停止、无奇偶校验”,因此如果想进一步提高程序效率,可以仅使用XUartPs_SetBaudRate函数来设置波特率。
s32 XUartPs_SetBaudRate(XUartPs *InstancePtr, u32 BaudRate)
6.设置RxFIFO的中断触发等级
void XUartPs_SetFifoThreshold(XUartPs *InstancePtr, u8 TriggerLevel)
6.数据发送
程序中使用XUartPs_Send函数发送数据。这个函数是非阻塞的,轮询模式和中断驱动模式下都可以使用。它会尽可能地想TxFIFO填充数据,并返回发送的字节数;如果无法填充,会返回0表示发送了0字节,便于用户处理。
中断模式下,该函数会发送指定的缓冲区(Buffer)中的内容,中断处理程序负责将所有数据全部发送完。此时会调用绑定的回调函数,标识发送完成。
u32 XUartPs_Send(XUartPs *InstancePtr, u8 *BufferPtr, u32 NumBytes)
u32 XUartPs_Recv(XUartPs *InstancePtr,u8 *BufferPtr, u32 NumBytes)
第二个参数是指向要发送的数据缓冲区的指针;第三个参数是发送的字节数;返回值标识实际发送的字节数。本例程序中就是利用返回值确保所有数据都依次发送
这个函数还有个特殊用法,如果将第三个参数设为0,则会停止正在进行的发送操作,并将已经在TxFIFO中的所有数据都发送出去。可以用这个用法实现某些特殊功能。
串口发送和接收类似,这里不再一一列举。
这篇关于江山易改本性难移之ZYNQ SDK API函数笔记(UART)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!