新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于Nios II的UART與PC間的數(shù)據(jù)通信

        基于Nios II的UART與PC間的數(shù)據(jù)通信

        作者: 時間:2011-05-11 來源:網(wǎng)絡 收藏
        1.2 內(nèi)核的寄存器描述

        本文引用地址:http://www.104case.com/article/150764.htm

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

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

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

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

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

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

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

          

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

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

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

          (1) alt_avalon_uart_init

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

          功能:用于初始化UART設備

          (2) alt_avalon_uart_ioctl

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

          功能:處理HAL的程序請求設備指定的操作

          (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)

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

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

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

        分頻器相關(guān)文章:分頻器原理

        上一頁 1 2 下一頁

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 阿拉善右旗| 沧源| 兴安盟| 满城县| 莆田市| 嘉兴市| 安福县| 疏勒县| 哈尔滨市| 乐山市| 绥阳县| 托克托县| 鸡东县| 阿巴嘎旗| 砚山县| 句容市| 襄汾县| 崇义县| 无极县| 西和县| 衡山县| 双辽市| 新巴尔虎右旗| 长葛市| 南昌县| 綦江县| 寿光市| 太谷县| 宁南县| 青阳县| 佛坪县| 南川市| 三都| 陆川县| 耿马| 晋州市| 滨海县| 巴中市| 修水县| 远安县| 麻城市|