日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于Nios II的UART與PC間的數(shù)據(jù)通信

Nios II系列嵌入式處理器使用32位的指令集結(jié)構(gòu)ISA,完全與二進(jìn)制代碼兼容,它是Altera公司的第二代軟核嵌入式處理器,性能超過(guò)200DMIPS。允許設(shè)計(jì)者在很短的時(shí)間內(nèi)構(gòu)建一個(gè)完整的可編程芯片系統(tǒng),風(fēng)險(xiǎn)和成本比中小規(guī)模的ASIC小。這種開(kāi)發(fā)方式特別適合設(shè)計(jì)針對(duì)網(wǎng)絡(luò)、電信、數(shù)據(jù)通信、嵌入式和消費(fèi)市場(chǎng)的各種嵌入式應(yīng)用。

  本文基于以上這些特點(diǎn),從硬件和軟件兩個(gè)方面探討了基于Cyclone II系列EP1C12Q240C8與PC的通信方案。

  1 串行異步通信的硬件接口

  通用異步收發(fā)器,簡(jiǎn)稱(chēng)UART,能把字符的并行代碼變換成串行代碼發(fā)送出去,而且也能把這種格式的串行代碼接收下米,并且轉(zhuǎn)換成相應(yīng)的并行代碼。串行異步通信協(xié)議中字符代碼傳輸格式如圖1所示。在沒(méi)有傳送代碼時(shí),通信線(xiàn)會(huì)一直處丁邏輯1狀態(tài),而傳送時(shí),數(shù)據(jù)兩頭必須加上起始位和停止位。起始位總是邏輯0狀態(tài)。停止位總是邏輯1狀態(tài),其持續(xù)時(shí)間可選為1位、1.5位或2位。數(shù)據(jù)的低位在前,但根據(jù)不同的編碼規(guī)則,數(shù)據(jù)可能有5位、6位、7位或8位。圖1中的校驗(yàn)位可根據(jù)需要選擇奇校驗(yàn)、偶校驗(yàn)或不要校驗(yàn)位。

  

 

  1.1 UART內(nèi)核綜述

  AVALON總線(xiàn)是一種結(jié)構(gòu)相對(duì)簡(jiǎn)單的總線(xiàn),用于連接NiosⅡ和其他外設(shè)。它規(guī)定了主從部件間的端口連接關(guān)系,以及部件間通信的時(shí)序關(guān)系。AVALON總線(xiàn)擁有多種傳輸模式,以適應(yīng)不同外設(shè)要求。基本傳輸模式是在主從外設(shè)之間進(jìn)行單字節(jié),半字或字的傳輸。AVALON總線(xiàn)還支持一些高級(jí)傳輸模式,例如支持流操作,支持延時(shí)操作, 支持多個(gè)主設(shè)備同時(shí)訪問(wèn)。帶Avalon接口的UART內(nèi)核為Altera FPGA上的嵌入式系統(tǒng)合外部設(shè)備提供了串行字符流的通信方式,內(nèi)核執(zhí)行RS-232協(xié)議時(shí)序,由于大部分Altera FPGA系列上的I/O引腳不遵循RS-232電壓電平規(guī)范,如果通過(guò)RS-232連接器的信號(hào)直接與FPGA相連,可能會(huì)損害器件。為了滿(mǎn)足RS-232信號(hào)電平要求,在FPGA I/O腳和對(duì)應(yīng)得RS-232外部接頭間需要連接一個(gè)外部電平轉(zhuǎn)換器。UART內(nèi)核結(jié)構(gòu)框圖如圖2所示,在UART內(nèi)核和RS-232連接器之間采用Maxim公司生產(chǎn)的MAX3232型收發(fā)器。

  

 

  UART發(fā)送器包括發(fā)送數(shù)據(jù)寄存器Txdata和相應(yīng)的發(fā)送移位寄存器。Avalon主控制器通過(guò)Avalon從控制器端口寫(xiě)數(shù)據(jù)到發(fā)送數(shù)據(jù)寄存器。在當(dāng)前不進(jìn)行串行發(fā)送移位操作時(shí),發(fā)送移位寄存器自動(dòng)從發(fā)送數(shù)據(jù)寄存器中轉(zhuǎn)入數(shù)據(jù)。發(fā)送移位寄存器直接連接到TXD輸出。數(shù)據(jù)最低有效位先從TXD移出。發(fā)送數(shù)據(jù)寄存器和發(fā)送移位寄存器提供雙重緩沖。主控制器可以在前一個(gè)字符正在移出時(shí)將新數(shù)值寫(xiě)入發(fā)送數(shù)據(jù)寄存器,并可通過(guò)讀出狀態(tài)寄存器的發(fā)送準(zhǔn)備好位TRDY、發(fā)送移位寄存器空位TMT和發(fā)送溢出錯(cuò)誤位TOE來(lái)監(jiān)視發(fā)送器的狀態(tài)。發(fā)送邏輯根據(jù)RS-232規(guī)范在串行TXD數(shù)據(jù)流中自動(dòng)插入數(shù)量正確的起始位、校驗(yàn)位和停止位。

  UART接收器包括接收移位寄存器Rxdata和相應(yīng)的接收數(shù)據(jù)寄存器。Avalon主控制器通過(guò)Avalon從控制器端口讀接收數(shù)據(jù)寄存器的數(shù)據(jù)。每當(dāng)新字符完全接收后接收數(shù)據(jù)寄存器自動(dòng)從接收移位寄存器裝入數(shù)據(jù)。接收移位寄存器和接收數(shù)據(jù)寄存器提供雙重緩沖。接收數(shù)據(jù)寄存器在后續(xù)字符正在移入接收移位寄存器時(shí)可以保持前面的接收字符。主控制器可通過(guò)讀狀態(tài)寄存器的接受準(zhǔn)備好位RRDY、接收溢出錯(cuò)誤位ROE、間斷檢測(cè)位BRK、校驗(yàn)錯(cuò)誤位PE和幀錯(cuò)誤FE位來(lái)監(jiān)控接收器的狀態(tài)。接收邏輯根據(jù)RS-232規(guī)范在串行RXD數(shù)據(jù)流中自動(dòng)檢測(cè)數(shù)量正確的起始位、停止位和校驗(yàn)位。接收邏輯檢查接收數(shù)據(jù)中的4種異常隋況,并設(shè)置對(duì)應(yīng)的狀態(tài)寄存器位。

  UART內(nèi)核的內(nèi)部波特率時(shí)鐘來(lái)源于Avalon時(shí)鐘輸入,內(nèi)部波特率時(shí)鐘通過(guò)時(shí)鐘分頻器生成,除數(shù)值可以由系統(tǒng)指定,也可以由其寄存器中存器的16位值來(lái)決定,波特率和除數(shù)值之間的關(guān)系如下:

  除數(shù)=int((時(shí)鐘頻率)/(波特率)+0.5)

  波特牢=(時(shí)鐘頻率)/(除數(shù)+1)[!--empirenews.page--]1.2 UART內(nèi)核的寄存器描述

 

  接收寄存器Rxdata保存接收到的數(shù)據(jù)。新字符由RXD輸入,完全接收后狀態(tài)寄存器的接收準(zhǔn)備好RRDY位置1。當(dāng)從接收數(shù)據(jù)寄存器讀取數(shù)據(jù)后,狀態(tài)寄存器RRDY位清零。若RRDY位為1時(shí),又有字符輸入,則發(fā)生溢出錯(cuò)誤,狀態(tài)寄存器的接收溢出錯(cuò)誤ROE位置1。不管前一個(gè)字符是否被讀出,新字符總是傳到接收數(shù)據(jù)寄存器。

  發(fā)送寄存器Txdata上的字符數(shù)據(jù)由Avalon主控制器發(fā)送,當(dāng)將字符寫(xiě)入發(fā)送寄存器時(shí),發(fā)送準(zhǔn)備好TRDY位為0;當(dāng)將字符從發(fā)送數(shù)據(jù)寄存器傳輸?shù)桨l(fā)送移位寄存器時(shí),TRDY位置1。如果在TRDY位為0時(shí)將字符寫(xiě)入發(fā)送數(shù)據(jù)寄存器,結(jié)果是未知的。

  狀態(tài)寄存器Status的狀態(tài)位反映UART內(nèi)核狀態(tài)情況。每個(gè)狀態(tài)位與控制寄存器中的對(duì)應(yīng)中斷使能位相聯(lián)系。狀態(tài)寄存器可以在任何時(shí)候讀取。

  控制寄存器Control由控制UART內(nèi)核操作的控制位組成,控制寄存器的每一位使能狀態(tài)寄存器中對(duì)應(yīng)位的中斷。當(dāng)狀態(tài)位及其對(duì)應(yīng)的中斷使能位為1時(shí),UART內(nèi)核產(chǎn)生一個(gè)中斷。

  除數(shù)寄存器Divisor的值用于生成波特率時(shí)鐘。

  數(shù)據(jù)包結(jié)束字符Endofpacket由數(shù)據(jù)包結(jié)束符寄存其的值確定,以便可變長(zhǎng)度的DMA傳輸。

  UART內(nèi)核的寄存器映射表如表1所列。

  

 

  2 串行異步通信軟件的實(shí)現(xiàn)

  為了適應(yīng)系統(tǒng)不同類(lèi)型的需要,UART驅(qū)動(dòng)程序提供兩種方式:快速型和一般型??焖傩万?qū)動(dòng)程序采用中斷驅(qū)動(dòng)方式,在設(shè)備不準(zhǔn)備發(fā)送或接收數(shù)據(jù)時(shí)它允許處理器執(zhí)行其他任務(wù)。由于UART數(shù)據(jù)率相對(duì)于處理器的速率較慢,快速驅(qū)動(dòng)程序可以提供系統(tǒng)的處理性能。一般型驅(qū)動(dòng)程序采用查詢(xún)執(zhí)行方式,它在發(fā)送和接收每個(gè)字符前等待UART硬件的指示。

  對(duì)于Nios II處理器用戶(hù)來(lái)說(shuō),Altera提供硬件抽象層HAL系統(tǒng)庫(kù)驅(qū)動(dòng)程序,HAL系統(tǒng)庫(kù)API函數(shù)為Nios II處理器用戶(hù)提供訪問(wèn)UART內(nèi)核的完整特性。程序設(shè)計(jì)所涉及到的API函數(shù)如下:

  (1) alt_avalon_uart_init

  定義:void alt_avalon_uart_init(alt_avalon_uart_dev*dev,void*base,alt_u32 irq)

  功能:用于初始化UART設(shè)備

  (2) alt_avalon_uart_ioctl

  定義:int alt_avalon_uart_ioctl(alt_fd*fd,int req,void*arg)

  功能:處理基于HAL的程序請(qǐng)求設(shè)備指定的操作

  (3) alr_avalon_uart_irq

  定義:static void alt_avalon_uart_irq(void*context,alt_u32 id)

  功能:處理UART的中斷操作

  (4) alt_avalon_uart_read

  定義:int alt_avalon uart_read(alt_fd*fd,char*ptr,int len)

  功能:從UART中讀取數(shù)據(jù)

  (5) alt_avalon_uart_write

  定義:int alt_avalon_uart_write(alt fd*fd,const char*ptr,int len)

  功能:寫(xiě)一組數(shù)據(jù)到UART

  以上幾個(gè)函數(shù)完全可以滿(mǎn)足UART與PC之間的數(shù)據(jù)通信,需要注意的是如果一次傳輸?shù)臄?shù)據(jù)過(guò)長(zhǎng),必須重新設(shè)置ALT_AVALON_UART_BUF_LEN的值,以保證傳輸過(guò)程中數(shù)據(jù)的正確性。如果此值過(guò)小,則在傳輸過(guò)程中可能會(huì)造成數(shù)據(jù)的丟失。在設(shè)置輸出終端時(shí)必須指定COM1/COM2端口,建立UART與PC之間的數(shù)據(jù)通路,用來(lái)接收從UART中發(fā)出的數(shù)據(jù),同時(shí)通過(guò)這些端口從PC中發(fā)出數(shù)據(jù)到UART中。

  本文所述的UART是基于Altera公司的一款主流低成本的FPGA,除了具有FPGA的優(yōu)勢(shì)之外,還因?yàn)槠銫PU本身是以軟核的方式實(shí)現(xiàn)的,所以整個(gè)系統(tǒng)的功能可以根據(jù)需要進(jìn)行功能定制,非常靈活。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉