ZYNQ QNX开发——PL串口设备驱动遇到的问题
在ZedBoard上开发基于QNX操作系统PL部分UART设备驱动的过程中遇到了一点问题,问题原因不明但总结下来给大家提供参考,也以便以后对QNX的进一步了解后回顾这些问题。
在ZedBoard上开发基于QNX操作系统PL部分UART设备驱动的过程中遇到了一点问题,问题原因不明但总结下来给大家提供参考,也以便以后对QNX的进一步了解后回顾这些问题。
在前面几期的学习中,我们对于PYNQ的环境配置做了较为详细的介绍,并对PYNQ与ZYNQ的异同点做了较为深入的探究。我们知道,PYNQ = Python + ZYNQ,即将ZYNQ部分功能的Python化,直接调用Python库和FPGA硬件库进行功能的开发,典型的例子便是PYNQ_z2开发板
文章是对官方文档Resource Manger部分的总结,写得不是很有条理,仅是自己对这部分学习认识的一个总结,希望对看到的人有所帮助。
QNX OS是微内核操作系统,其内核仅仅提供进程调度、进程通讯等服务。文件访问、设备驱动等服务都属于用户空间的任务,下图是QNX系统的架构图
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/blog/201812/13981-41275-…; alt=""></center>
除了内核外其它所有进程都属于用户空间,内核作为一个软件总线,将其它所有资源互相连接起来,这种结构看起来像一个团队而不是层次结构,几个相同等级的“player”通过内核相互协调完成任务。
总的来看,资源管理器就是一个在文件系统名称空间中注册了一个名称的进程。其它进程使用其路径来与资源管理器通信。
上一节我们体验了一把PS和PL是怎样联合开发的,这种ARM和FPGA联合设计是ZYNQ的精华所在。这一节我们实现一个稍微复杂一点的功能——测量未知信号的频率,PS和PL通过AXI总线交互数据,实现我们希望的功能。
如何测量数字信号的频率
最简单的办法——在一段时间内计数
在我们设定的时间(Tpr) 内对被测信号的脉冲进行计数, 得Nx, Fx=Nx/Tpr。
Tpr 越大,测频精度越高。这种方法适合于高频信号,因为这里可能会有一个被测信号周期的误差,测量高频信号时误差小。
另一个变种——在一个周期内计数
在 被测信号一个周期内对基准时钟信号计数,得Nx, 基准时钟周期为T, 则Tx=T*Nx, Fx=1/Tx。
被测信号频率越低, 基准时钟频率越高,测量精度越高。因此这种方法适用于低频信号。
二者结合——多个周期同步计数