江山易改本性难移之ZYNQ SDK API函数笔记(UART)

2024-08-31 08:58

本文主要是介绍江山易改本性难移之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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123448

相关文章

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、