UART控制器——ZYNQ學習筆記14

????????UART 控制器是一個全雙工異步收發控制器, MPSoC 內部包含兩個 UART 控制器, UART0 和 UART1。每一個 UART 控制器支持可編程的波特率發生器、 64 字節的接收 FIFO 和發送 FIFO、產生中斷、 RXD 和TXD 信號的環回模式設置以及可配置的數據位長度、停止位和校驗方式等。UART 控制器的配置以及狀態的獲取由控制(Control)和狀態寄存器(Status Registers完成。另外,UART 控制器不僅可以連接至 MIO,也可以映射到 EMIO,從而使用 PL 的端口來實現串口通信的功能。當 UART 控制器連接到 MIO 時,只有 Tx(發送)和 Rx(接收)兩個引腳;而當連接 EMIO 時,除 Tx 和Rx 引腳外,可選的還有 CTS、 RTS、 DSR、 DCD、 RI、 DTR 等引腳,這些引腳用于串口的流控制,即調制解調器的數據通訊中。UART 控制器采用獨立的接收和發送數據路徑,每個路徑包含一個 64 字節的 FIFO,控制器對發送和接收 FIFO 中的數據進行串并轉換操作。 FIFO 的中斷標志支持輪詢處理或中斷驅動處理兩種方式。 另外,控制器中還有一個模式開關,支持 RXD 和 TXD 信號的各種環回配置。 UART 控制器內部框圖如下圖所示:

main.c

#include "xparameters.h"	//器件參數信息
#include "xuartps.h"		//包含 PS UART 的函數聲明
#include "xil_printf.h"		//包含 print()函數
#include "xscugic.h"		//包含中斷的函數聲明
#include "stdio.h"			//包含 printf 函數的聲明
#include "xscugic.h"		//
#include "uart.h"
#include "intr.h"//定義結構體
XUartPs Uartps	;
XScuGic Intc	;int main(){uart_config(&Uartps);intr_config(&Intc,&Uartps);while(1){}
}

uart.c

#include "xparameters.h"	//器件參數信息
#include "xuartps.h"		//包含 PS UART 的函數聲明
#include "xil_printf.h"		//包含 print()函數
#include "xscugic.h"		//包含中斷的函數聲明
#include "stdio.h"			//包含 printf 函數的聲明
#include "uart.h"#define UART_DEVICE_ID 	XPAR_PS7_UART_0_DEVICE_ID //串口設備 IDvoid uart_config(XUartPs *uartps){XUartPs_Config *uart_cfg;//查找配置信息uart_cfg = XUartPs_LookupConfig(UART_DEVICE_ID);//串口初始化XUartPs_CfgInitialize(uartps,uart_cfg,uart_cfg->BaseAddress);//UART參數設置//波特率 115200XUartPs_SetBaudRate(uartps,115200);//模式設置 正常模式XUartPs_SetOperMode(uartps,XUARTPS_OPER_MODE_NORMAL);//設置觸發數量:1XUartPs_SetFifoThreshold(uartps, 1);}

uart.h

#include "xparameters.h"	//器件參數信息
#include "xuartps.h"		//包含 PS UART 的函數聲明
#include "xil_printf.h"		//包含 print()函數
#include "xscugic.h"		//包含中斷的函數聲明
#include "stdio.h"			//包含 printf 函數的聲明
#include "xscugic.h"		//void uart_config(XUartPs *uartps);

init.c

#include "xparameters.h"	//器件參數信息
#include "xuartps.h"		//包含 PS UART 的函數聲明
#include "xil_printf.h"		//包含 print()函數
#include "xscugic.h"		//包含中斷的函數聲明
#include "stdio.h"			//包含 printf 函數的聲明
#include "intr.h"#define UART_INT_IRQ_ID XPAR_XUARTPS_0_INTR //串口中斷 ID
#define INTC_DEVICE_ID 	XPAR_SCUGIC_SINGLE_DEVICE_ID //中斷控制器 IDvoid intr_config(XScuGic *Intc,XUartPs *Uartps){SetupInterruptSystem(Intc,Uartps);					//設置中斷系統
}void SetupInterruptSystem(XScuGic *Intc, XUartPs *Uartps)
{XScuGic_Config *IntcConfig;//查找GIC配置信息,進行初始化IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);XScuGic_CfgInitialize(Intc, IntcConfig,IntcConfig->CpuBaseAddress);//配置UART中斷XUartPs_SetInterruptMask(Uartps,XUARTPS_IXR_RXOVR);/*********************************************************************************************************************///初始化ARM處理器異常句柄Xil_ExceptionInit();//給IRQ異常注冊處理程序Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,Intc);//使能處理器中斷Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);
/*********************************************************************************************************************///關聯IQC異常處理函數XScuGic_Connect(Intc,UART_INT_IRQ_ID,(Xil_ExceptionHandler)IntrHandler,(void *)Uartps);//使能GIC控制器對應ID中斷XScuGic_Enable(Intc, UART_INT_IRQ_ID);}void IntrHandler(void *call_back_ref){u32 int_state;u8 rxdata;XUartPs *uart_ps = (XUartPs *) call_back_ref;//獲取中斷配置信息int_state = XUartPs_GetInterruptMask(uart_ps);//讀取中斷狀態int_state &= XUartPs_ReadReg(uart_ps->Config.BaseAddress,XUARTPS_ISR_OFFSET); //中斷狀態//判斷是否為rxfifo中斷if(int_state & XUARTPS_IXR_RXOVR){		//RXFIFO緩沖區中斷//讀取RXFIFO數據rxdata = XUartPs_RecvByte(uart_ps->Config.BaseAddress);//清除中斷標志XUartPs_WriteReg(uart_ps->Config.BaseAddress,XUARTPS_ISR_OFFSET,1);//發送數據XUartPs_SendByte(uart_ps->Config.BaseAddress,rxdata);}}

inrt.h

#include "xparameters.h"	//器件參數信息
#include "xuartps.h"		//包含 PS UART 的函數聲明
#include "xil_printf.h"		//包含 print()函數
#include "xscugic.h"		//包含中斷的函數聲明
#include "stdio.h"			//包含 printf 函數的聲明void intr_config(XScuGic *Intc,XUartPs *Uartps);
void SetupInterruptSystem(XScuGic *Intc, XUartPs *Uartps);
void IntrHandler();

使用printf函數要注意在初始化函數之后使用

更換UART1

????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95277.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95277.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95277.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 登錄狀態機項目知識筆記

C 登錄狀態機項目知識筆記 1. 項目源碼 1.1 login_state_machine.h #pragma once#include <string>// 登錄狀態枚舉 enum class LoginState { IDLE, AUTHENTICATING, SUCCESS, FAILURE, LOCKED };// 登錄事件枚舉 enum class LoginEvent { REQUEST, SUCCESS, FAILURE, RE…

docker-nacos-v3

nacos官網&#xff1a; Redirecting to: https://nacos.io/ 服務發現和服務健康監測 Nacos 支持基于 DNS 和基于 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO注冊 Service 后&#xff0c;服務消費者可以使用DNS TODO 或HTTP&API查找和發現服…

DevOps 詳解:文化、實踐與工具鏈

目錄一、DevOps 定義與核心目標二、DevOps 關鍵原則與實踐1. 持續集成&#xff08;CI&#xff0c;Continuous Integration&#xff09;2. 持續交付&#xff08;CD&#xff0c;Continuous Delivery&#xff09;3. 持續部署&#xff08;Continuous Deployment&#xff09;4. 監控…

人工智能之數學基礎:常用的連續型隨機變量的分布

本文重點 本文將介紹概率中非常重要的連續型隨機變量的分布,主要有均勻分布、指數分布、正態分布 均勻分布 若隨機變量X的概率密度為: 如果概率密度函數如上所示,則稱X服從區間[ a, b]上的均勻分布,記作X~U[a,b] 均勻分布的概率密度函數的計算如下: 指數分布 指數分布…

【開題答辯全過程】以 校園幫幫團跑腿系統的設計與實現為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

Milvus 向量數據庫開發實戰指南

Milvus向量數據庫是什么&#xff1f;-CSDN博客 一、核心概念解析 1.1 基礎概念 1.1.1 Bitset&#xff08;位集&#xff09; 高效的數據表示方式&#xff0c;使用位數組替代傳統數據類型 默認情況下&#xff0c;位值根據特定條件設置為 0 或 1 1.1.2 通道機制 PChannel&am…

vcruntime140.dll丟失解決辦法

解決辦法 安裝Microsoft Visual C Redistributable https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?viewmsvc-170

LabVIEW實現跨 VI 簇按鈕控制功能

?在 LabVIEW 開發場景中&#xff0c;常需實現不同 VI 間的交互操作。本功能借助 VI Server 技術&#xff0c;突破 VI 邊界&#xff0c;實現對目標 VI 中簇內按鈕控件的屬性讀取與控制&#xff0c;為多 VI 協同、對VI里已經實現的功能&#xff0c;可以在其他VI中直接使用&#…

JS箭頭函數

JavaScript 的箭頭函數 (Arrow Function) 是 ES6 (ECMAScript 2015) 引入的一種重要的函數語法特性&#xff0c;它用更簡潔的方式定義函數&#xff0c;并改變了 this 的綁定行為。 箭頭函數和傳統函數的主要區別&#xff1a;特性箭頭函數傳統函數語法更簡潔&#xff0c;省略 fu…

linux內核 - 文件系統相關的幾個概念介紹

介紹文件系統之前&#xff0c;先了解下存儲管理的幾個概念&#xff1a;1. 硬盤&#xff1a;是最底層的存儲介質&#xff0c;比如 /dev/sda, /dev/nvme0n1. 一個物理硬盤就是一個塊設備&#xff0c;未經處理是只能順序讀寫二進制數據。 2. 分區&#xff1a;就是在硬盤上劃分出不…

邊緣計算(Edge Computing)+ AI:未來智能世界的核心引擎

邊緣計算&#xff08;Edge Computing&#xff09; AI&#xff1a;未來智能世界的核心引擎 文章目錄邊緣計算&#xff08;Edge Computing&#xff09; AI&#xff1a;未來智能世界的核心引擎摘要什么是邊緣計算&#xff1f;為什么需要邊緣計算&#xff1f;1. 延遲問題2. 帶寬壓力…

計算機視覺與深度學習 | ORB-SLAM3算法原理與Matlab復現指南

文章目錄 一、算法核心原理 1.1 系統架構概述 1.2 數學模型基礎 1.2.1 狀態估計框架 1.2.2 視覺-慣導融合模型 1.3 關鍵創新點 二、關鍵模塊實現細節 2.1 ORB特征提取與匹配 2.2 地圖初始化 2.3 視覺-慣導融合 2.4 回環檢測與優化 三、Matlab復現思路 3.1 系統模塊劃分 3.2 核心…

分布式光伏模式怎么選?從 “憑經驗” 到 “靠數據”,iSolarBP 幫你鎖定最優解

iSolarBP-陽光新能源旗下分布式光伏光儲智能評估設計軟件 iSolarBP是陽光新能源打造的分布式光伏/光儲項目智能設計平臺。提供無人機自動勘測、3D建模、高精度發電仿真、光儲容量優化與經濟分析一站式服務&#xff0c;助力開發者提升效率、降低成本和優化投資收益。https://iso…

MATLAB R2010b系統環境(四)MATLAB幫助系統

一、幫助命令MATLAB幫助命令包括help、lookfor以及模糊查詢。1.1 help命令在命令窗口中直接輸入help或help加函數名。&#xff08;1&#xff09;help&#xff1a;顯示當前幫助系統中所包含的所有項目&#xff0c;即搜索路徑中所有的目錄名稱&#xff0c;如下圖&#xff1a;&…

“便農惠農”智慧社區系統(代碼+數據庫+LW)

摘要 隨著城市化進程加速和信息技術快速發展&#xff0c;傳統社區管理模式已難以滿足現代社區高效管理和居民多元化服務需求。為解決社區管理中的信息孤島問題、提升服務效率并增強居民生活體驗&#xff0c;本文設計并實現了一套基于Spring Boot框架的智慧社區管理系統。該系統…

智慧金融服務平臺問題剖析與改進策略

智慧金融服務平臺問題剖析與改進策略 在數字化浪潮的推動下&#xff0c;智慧金融服務平臺蓬勃發展&#xff0c;為用戶帶來了便捷的金融服務體驗。然而&#xff0c;隨著用戶數量的不斷增加和業務的日益復雜&#xff0c;平臺也暴露出一些問題&#xff0c;其中數據準確性不足、異常…

【Vue2?】Vue2 入門之旅(三):數據與方法

在前兩篇文章中&#xff0c;我們學習了 Vue 的基礎和模板語法。本篇我們將深入 數據與方法&#xff0c;理解 data、methods、computed、watch 的作用和區別。 目錄 datamethodscomputedwatch小結 data Vue 實例中的 data 是數據源&#xff0c;模板會自動響應其中的變化。 &l…

自動化測試時,chrome瀏覽器啟動后閃退的問題

之前運行的好好的&#xff0c;最近再次練習時發現會閃退&#xff0c;然后發現是驅動版本老的問題 &#xff08;1&#xff09;下載與之匹配的驅動器版本 Chrome for Testing availability 找到與Chrome版本前3位相同的目錄&#xff0c;下載對應系統的壓縮包 &#xff08;2&am…

Dynamics 365 XrmToolBox工具之Clone Field Definitions

好久沒有分享XrmToolBox的組件了&#xff0c;今天要分享的是下圖中這個組件在建實體的時候&#xff0c;我們經常會碰到實體間一些字段存在重復&#xff0c;或者都可以直接復制黏貼加一些少量修改就可以生成第二個實體&#xff0c;但如果僅從D365本身來說&#xff0c;要做到復制…

UBUNTU之Onvif開源服務器onvif_srvd:1、編譯

下載源碼 編譯時會下載東西&#xff0c;有可能需要VPN。 https://github.com/KoynovStas/onvif_srvd https://github.com/KoynovStas/onvif_srvd/tags 解壓準備工作 sudo apt install -y flex bison byacc make cmake m4# for support encryption and WS-Security # 在低版…