99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

詳解ametal_uart總線控制技術的核心要點

UtFs_Zlgmcu7890 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-12-19 08:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第五章為深入淺出AMetal,本文內(nèi)容為5.8 UART 總線。

5.8 UART 總線

UART(Universal Asynchronous Receiver/Transmitter)是一種通用異步收發(fā)傳輸器,其使用串行的方式在雙機之間進行數(shù)據(jù)交換,實現(xiàn)全雙工通信,數(shù)據(jù)引腳僅包含用于接收數(shù)據(jù)的RXD 和用于發(fā)送數(shù)據(jù)的TXD。

>>> 5.8.1 初始化

在使用UART 接口前,必須先完成UART 的初始化,獲取標準UART 實例句柄。在LPC82x 中,能夠提供UART 服務的外設有USART0、USART1 和USART2。注意,USART和UART 的概念很容易混淆,USART 比UART 多了一個S——同步(Synchronous),USART支持同步和異步兩種通信方式,而UART 僅支持異步通信方式。同步方式與異步方式主要的區(qū)別在于,同步方式需要使用一根時鐘線進行時鐘的同步。由于使用較多的是異步通信方式,因此AMetal 僅僅提供了異步通信方式的通用接口,即LPC824 的USART 外設也僅被用作UART。為了方便用戶使用,AMetal 提供了與外設對應的實例初始化函數(shù),詳見表5.23。

表5.23 UART 實例初始化函數(shù)(am_lpc82x_inst_init.h)

這些函數(shù)的返回值均為am_uart_handle_t 類型的UART 實例句柄,該句柄將作為UART通用接口中handle 參數(shù)的實參。類型am_uart_handle_t(am_uart.h)定義如下:

由于函數(shù)返回的UART 實例句柄僅作為參數(shù)傳遞給UART 通用接口,因此不需要對該句柄作其它任何操作。若函數(shù)返回的實例句柄的值為NULL,則表明初始化失敗,不能使用該實例句柄。如果使用串口0,則調(diào)用串口0 實例初始化函數(shù),即可獲取對應的實例句柄:

>>> 5.8.2 接口函數(shù)

AMetal 提供了5 個與UART 相關的標準接口函數(shù)(am_uart.h),詳見表5.24。

表5.24 UART 標準接口函數(shù)

1. UART 控制

實現(xiàn)UART 的常見的控制,比如,波特率、數(shù)據(jù)位數(shù)和奇偶校驗等。其函數(shù)原型為:

常見命令與對應的p_arg 參數(shù),UART 硬件參數(shù)與UART 模式分別詳見表5.25、表5.26和表5.27。

表5.25 UART 常用控制命令

表5.26 UART 硬件參數(shù)

表5.27 UART 模式

為了便于傳遞不同類型的值,通常將p_arg 設置為void *類型。比如,在設置波特率時,其類型為uint32_t;而在獲取波特率時,其類型為 uint32_t *。如果返回AM_OK,說明本次控制命令執(zhí)行成功;如果返回-AM_EINVAL,說明因參數(shù)無效導致控制命令執(zhí)行失敗。比如,設置UART 為查詢模式,波特率為115200,8 位數(shù)據(jù)位,無校驗,1 位停止位,使用范例詳見程序清單5.101。

程序清單5.101 am_uart_ioctl()范例程序

由于對應控制命令的參數(shù)均為uint32_t 類型,而函數(shù)形參為void *,因此需要使用強制類型轉換將uint32_t 強制轉換為 void *。

2. UART 發(fā)送(查詢模式)

如果以查詢的方式發(fā)送UART 數(shù)據(jù),則該函數(shù)會等待發(fā)送結束后返回。其函數(shù)原型為:

在使用該函數(shù)前,應確保UART 工作在查詢模式,其返回值為成功發(fā)送數(shù)據(jù)的個數(shù)。比如,發(fā)送一個字符串"Hello World! ",詳見程序清單5.102。

程序清單5.102 am_uart_poll_send()范例程序

3. UART 接收(查詢模式)

如果以查詢的方式接收UART 數(shù)據(jù),則該函數(shù)會等到指定個數(shù)的數(shù)據(jù)接收完成后返回。其函數(shù)原型為:

在使用該函數(shù)前,應確保UART 工作在查詢模式,其返回值為成功接收數(shù)據(jù)的個數(shù)。比如,從串口0 接收10 個數(shù)據(jù),詳見程序清單5.103。

程序清單5.103 am_uart_poll_receive()范例程序

4. 設置回調(diào)函數(shù)(中斷模式)

由于在查詢模式下收發(fā)數(shù)據(jù)會阻塞程序,因此最好的方式是使用中斷模式發(fā)送數(shù)據(jù)。當中斷事件發(fā)生時,通過回調(diào)函數(shù)與應用程序交互。其函數(shù)原型為:

其中,callback_type 表示本次設置的類型,即設置發(fā)送回調(diào)函數(shù)還是接收回調(diào)函數(shù),詳見表5.28。

表5.28 callback_type 的含義(am_uart.h)

以獲取一個待發(fā)送的字符為例,pfn_callback 參數(shù)的類型為am_uart_txchar_get_t:

當可以發(fā)送一個字符時,UART 驅動將自動調(diào)用設置的該類型回調(diào)函數(shù),p_arg 為用戶自定義的參數(shù)(即為設置該類型回調(diào)函數(shù)時指定的p_arg),p_char 指針用于獲取一個待發(fā)送的字符,詳見程序清單5.104。

程序清單5.104 設置“獲取發(fā)送數(shù)據(jù)的回調(diào)函數(shù)”范例程序

以提交一個已經(jīng)接收到的字符為例,pfn_callback 參數(shù)的類型為am_uart_rxchar_put_t:

當接收一個字符時,UART 驅動將自動調(diào)用設置的該類型函數(shù),p_arg 為用戶自定義的參數(shù)(即為設置該類型回調(diào)函數(shù)時指定的p_arg),ch 為接收的字符數(shù)據(jù),詳見程序清單5.105。

程序清單5.105 設置“提交已接收數(shù)據(jù)回調(diào)函數(shù)”范例程序

5. 啟動發(fā)送(中斷模式)

如果UART 使用中斷模式發(fā)送數(shù)據(jù),當UART 發(fā)送器為空時,就會調(diào)用設置的“獲取發(fā)送數(shù)據(jù)的回調(diào)函數(shù)”以獲取發(fā)送數(shù)據(jù)。其函數(shù)原型為:

使用中斷模式收發(fā)數(shù)據(jù)的范例程序詳見程序清單5.106。

程序清單5.106 中斷模式范例程序

該程序的功能是將每次收到的10 個數(shù)據(jù)原封不動地發(fā)送出去,am_main()函數(shù)中的主循環(huán)可以不參與任何處理,即可實現(xiàn)串口數(shù)據(jù)的收發(fā)。

>>> 5.8.3 帶緩沖區(qū)的UART 接口

由于查詢模式會阻塞整個應用,因此在實際應用中幾乎都使用中斷模式。在中斷模式下,UART 每收到一個數(shù)據(jù)都會調(diào)用回調(diào)函數(shù)。如果將數(shù)據(jù)的處理放在回調(diào)函數(shù)中,很有可能因當前數(shù)據(jù)的處理還未結束而丟失下一個數(shù)據(jù)?;诖耍珹Metal 提供了帶緩沖區(qū)的UART 接收函數(shù),其實現(xiàn)是在UART 中斷接收與應用程序之間,增加一個接收緩沖區(qū)。當串口收到數(shù)據(jù)時,將數(shù)據(jù)存放在緩沖區(qū)中,應用程序直接訪問緩沖區(qū)即可。

對于UART 發(fā)送,雖然不存在丟失數(shù)據(jù)的問題,但為了便于開發(fā)應用程序,避免在UART中斷模式下的回調(diào)函數(shù)接口中一次發(fā)送單個數(shù)據(jù),同樣提供了帶緩沖區(qū)的UART 發(fā)送函數(shù)。當應用程序發(fā)送數(shù)據(jù)時,將發(fā)送數(shù)據(jù)存放在發(fā)送緩沖區(qū)中,串口在發(fā)送空閑時提取發(fā)送緩沖區(qū)中的數(shù)據(jù)進行發(fā)送。基于此,AMetal 提供了一組帶緩沖區(qū)的UART 通用接口,詳見表5.29。如無特殊需求,均建議使用帶緩沖區(qū)的UART 通用接口。

表5.29 帶緩沖區(qū)的UART 通用接口函數(shù)(am_uart_rngbuf.h)

1. 初始化

指定關聯(lián)的串口外設(相應串口的實例句柄handle),以及用于發(fā)送和接收的數(shù)據(jù)緩沖區(qū),初始化一個帶緩沖區(qū)的串口實例,其函數(shù)原型為:

其中, p_dev 為指向am_uart_rngbuf_dev_t 類型的帶緩沖區(qū)的串口實例指針,在使用時,只需要定義一個am_uart_rngbuf_dev_t 類型(am_uart_rngbuf.h)的實例即可:

其中,g_uart0_rngbuf_dev 為用戶自定義的實例,其地址作為p_dev 的實參傳遞。handle為 UART 實例句柄,用于指定該帶緩沖區(qū)的串口實際關聯(lián)的串口。p_rxbuf 和rxbuf_size 用于指定接收緩沖區(qū)及其大小,p_txbuf 和txbuf_size 用于指定發(fā)送緩沖區(qū)及其大小。

函數(shù)的返回值為帶緩沖區(qū)串口的實例句柄,可用作其它通用接口函數(shù)中handle 參數(shù)的實參。其類型am_uart_rngbuf_handle_t(am_uart_rngbuf.h)定義如下:

如果返回值為NULL,表明初始化失敗,初始化函數(shù)使用范例詳見程序清單5.107。

程序清單5.107 am_uart_rngbuf_init()范例程序

雖然程序將緩沖區(qū)的大小設置為128,但實際上緩沖區(qū)的大小應根據(jù)實際情況確定。若接收數(shù)據(jù)的緩沖區(qū)過小,則可能在接收緩沖區(qū)滿后又接收新的數(shù)據(jù)發(fā)生溢出而丟失數(shù)據(jù)。若發(fā)送緩沖區(qū)過小,則在發(fā)送數(shù)據(jù)時很可能因為發(fā)送緩沖區(qū)已滿需要等待,直至發(fā)送緩沖區(qū)有空閑空間而造成等待過程。

2. 發(fā)送數(shù)據(jù)

發(fā)送數(shù)據(jù)就是將數(shù)據(jù)存放到am_uart_rngbuf_init()指定的發(fā)送緩沖區(qū)中,串口可以進行數(shù)據(jù)發(fā)送時(發(fā)送空閑),從發(fā)送緩沖區(qū)中提取需要發(fā)送的數(shù)據(jù)進行發(fā)送。其函數(shù)原型為:

該函數(shù)將數(shù)據(jù)成功存放到發(fā)送緩沖區(qū)后返回,返回值為成功寫入的數(shù)據(jù)個數(shù)。比如,發(fā)送一個字符串“Hello World!“,詳見程序清單5.108。

程序清單5.108 am_uart_rngbuf_send()范例程序

注意,當該函數(shù)返回時,數(shù)據(jù)僅僅只是存放到了發(fā)送緩沖區(qū)中,并不代表已經(jīng)成功地將數(shù)據(jù)發(fā)送出去了。

3. 接收數(shù)據(jù)

接收數(shù)據(jù)就是從am_uart_rngbuf_init()指定的接收緩沖區(qū)中提取接收到的數(shù)據(jù),其函數(shù)原型為:

該函數(shù)返回值為成功讀取數(shù)據(jù)的個數(shù),使用范例詳見程序清單5.109。

程序清單5.109 am_uart_rngbuf_receive()范例程序

4. 控制函數(shù)

與UART 控制函數(shù)類似,用于完成一些基本的控制操作。其函數(shù)原型為:

“控制命令”和“對應命令的參數(shù)”,與UART 控制函數(shù)am_uart_ioctl()的含義類似。帶緩沖區(qū)的UART 可以看作是在UART 基礎上的一個擴展,因此絕大部分UART 控制函數(shù)的命令均可直接使用。之所以不支持“模式設置”命令,是因為帶緩沖區(qū)的UART 在初始化后始終工作在中斷模式,不能修改為查詢模式。除支持串口控制函數(shù)的絕大部分命令外,還新定義了一些擴展命令,詳見表5.30。

表5.30 帶緩沖區(qū)的UART 擴展控制命令

前5 條命令都是用于操作緩沖區(qū)的一些命令,“獲取可讀數(shù)據(jù)的個數(shù)”命令用于獲取接收緩沖區(qū)中已經(jīng)接收的數(shù)據(jù)個數(shù),“獲取已經(jīng)寫入數(shù)據(jù)的個數(shù)”命令可以獲取當前已經(jīng)寫入發(fā)送緩沖區(qū)中的數(shù)據(jù)個數(shù)。當不再需要發(fā)送或接收緩沖區(qū)的數(shù)據(jù)時,即可直接使用“清空緩沖區(qū)”命令將對應的緩沖區(qū)直接清空,其相應的范例程序詳見程序清單5.110。

程序清單5.110 am_uart_rngbuf_ioctl()范例程序

“設置讀超時時間”命令用于設置讀超時時間,該時間在am_uart_rngbuf_receive()接收數(shù)據(jù)時起作用。在接收數(shù)據(jù)時會指定接收數(shù)據(jù)的個數(shù),在接收數(shù)據(jù)過程中,可能由于接收緩沖區(qū)中無數(shù)據(jù)可讀而進入等待狀態(tài)。在默認情況下,如果沒有設置讀超時時間,則會一直等到數(shù)據(jù)接收完成(接收到指定的數(shù)據(jù)個數(shù))才會返回。當設置了超時時間后,假設設置超時時間為50ms,則在等待過程中超過50ms 都沒有接收到任何新數(shù)據(jù)時,函數(shù)同樣會返回,其返回值為實際接收到的數(shù)據(jù)個數(shù),其相應的范例詳見程序清單5.111。

程序清單5.111 設置超時時間范例程序

注意,超時時間并不是每次接收數(shù)據(jù)前都需要設置,往往只需要設置一次。如果需要修改超時時間,可以使用該函數(shù)重新設置一個超時時間。特別地,若希望接收數(shù)據(jù)不足時立即返回,則可以設置超時時間為AM_NO_WAIT(am_common.h),若需要恢復為一直等待到數(shù)據(jù)接收完成才返回,則可以設置超時時間為AM_WAIT_FOREVER(am_common.h)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ametal
    +關注

    關注

    2

    文章

    24

    瀏覽量

    11567

原文標題:周立功:深入淺出AMetal—— UART 總線

文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    面向ametal框架與接口的編程ametal uart總線

    《面向AMetal框架與接口的編程(上)》一書對AMetal框架進行了詳細介紹,通過閱讀這本書,你可以學到高度復用的軟件設計原則和面向接口編程的開發(fā)思想,聚焦自己的“核心域”,改變自己的編程思維,實現(xiàn)企業(yè)和個人的共同進步。
    的頭像 發(fā)表于 11-06 06:55 ?6515次閱讀
    面向<b class='flag-5'>ametal</b>框架與接口的編程<b class='flag-5'>ametal</b> <b class='flag-5'>uart</b><b class='flag-5'>總線</b>

    一文讀懂ametal_hc595接口的學習要點

    《面向AMetal框架與接口的編程(上)》一書對AMetal框架進行了詳細介紹,通過閱讀這本書,你可以學到高度復用的軟件設計原則和面向接口編程的開發(fā)思想,聚焦自己的“核心域”,改變自己的編程思維,實現(xiàn)企業(yè)和個人的共同進步。
    的頭像 發(fā)表于 11-28 07:27 ?4159次閱讀
    一文讀懂<b class='flag-5'>ametal</b>_hc595接口的學習<b class='flag-5'>要點</b>

    看完這篇文章終于學懂了ametal_spi和iic總線知識

    《面向AMetal框架與接口的編程(上)》一書對AMetal框架進行了詳細介紹,通過閱讀這本書,你可以學到高度復用的軟件設計原則和面向接口編程的開發(fā)思想,聚焦自己的“核心域”,改變自己的編程思維,實現(xiàn)企業(yè)和個人的共同進步。
    的頭像 發(fā)表于 12-05 07:53 ?8770次閱讀
    看完這篇文章終于學懂了<b class='flag-5'>ametal</b>_spi和iic<b class='flag-5'>總線</b>知識

    詳解ametal_鍵盤掃描接口和pwm接口技術

    第五章為深入淺出AMetal,本文內(nèi)容為5.3 鍵盤掃描接口和5.4 PWM 接口。
    的頭像 發(fā)表于 12-07 08:16 ?7557次閱讀
    <b class='flag-5'>詳解</b><b class='flag-5'>ametal</b>_鍵盤掃描接口和pwm接口<b class='flag-5'>技術</b>

    Android系統(tǒng)原理與開發(fā)要點詳解_培訓課件

    Android系統(tǒng)原理與開發(fā)要點詳解_培訓課件
    發(fā)表于 08-20 13:01

    靈動微電子MM32 MCU正式入駐AMetal平臺

    的本土通用MCU公司,可以為客戶提供從優(yōu)異芯片產(chǎn)品到核心算法、從完備參考設計方案到整機開發(fā)的全方位支持,真正為中國電子信息產(chǎn)業(yè)提供底層技術驅動和支持。立功科技與靈動微電子強強聯(lián)合,開啟MM32 MCU
    發(fā)表于 01-16 11:38

    嵌入式系統(tǒng)的三個基本的核心要

    硬件平臺、相關支撐硬件、嵌入式操作系統(tǒng)、支撐軟件以及應用軟件組成。其中,“嵌入性”、“專用性”與“計算機系統(tǒng)”是嵌入式系統(tǒng)的三個基本的核心要素,具體來講:嵌入性:指計算機計算機嵌入到對象系統(tǒng)中,且滿足對象系統(tǒng)的環(huán)境要求,如物理環(huán)境(小型)、電氣/氣氛環(huán)境(可靠)、成本(價廉)等要求。專用性:...
    發(fā)表于 11-08 07:20

    嵌入式系統(tǒng)的三個基本的核心要

    的靈活性,主要由嵌入式硬件平臺 、 相關支撐硬件 、 嵌入式操作系統(tǒng) 、 支撐軟件以及應用軟件組成。其中, “ 嵌入性 ”、“ 專用性 ” 與 “ 計算機系統(tǒng) ” 是嵌入式系統(tǒng)的三個基本的核心要素,具體來講:嵌入性:指計算機計算機嵌入到對象系統(tǒng)中,且滿足對象系統(tǒng)的環(huán)境要求,如物理環(huán)境(小型) 、 電氣 /
    發(fā)表于 12-22 07:52

    uCOS_ARM移植要點詳解

    uCOS_ARM移植要點詳解
    發(fā)表于 10-31 11:25 ?11次下載
    uCOS_ARM移植<b class='flag-5'>要點</b><b class='flag-5'>詳解</b>

    SPI總線技術要點匯總

    前面總結了UART/I2C的技術要點,SPI相對I2C而言,比較簡單。本文來總結一下SPI總線個人認為比較重要的一些技術
    的頭像 發(fā)表于 10-09 11:45 ?4307次閱讀

    萬變不離其宗之SPI總線要點總結

    前面總結了UART/I2C的技術要點,SPI相對I2C而言,比較簡單。本文來總結一下SPI總線個人認為比較重要的一些技術
    發(fā)表于 01-26 17:47 ?1次下載
    萬變不離其宗之SPI<b class='flag-5'>總線</b><b class='flag-5'>要點</b>總結

    AMetal代碼倉庫使用說明

    本文檔簡述了 AMetal 代碼倉庫的使用、 TortoiseGit 的使用以及版本控制等。AMetal 是芯片級的裸機軟件包,定義了跨平臺的通用接口(使得基于 AMetal 的應用程
    發(fā)表于 10-12 16:06 ?1次下載

    ChatGPT的核心要點

    ,但由于其出色的解釋性和計算性能開始廣泛地使用在AI各個領域,成為最近幾年最流行的AI算法模型,無論是這篇論文還是transformer模型,都是當今AI科技發(fā)展的一個縮影。以此為前提,本文分析了這篇論文的核心要點和主要創(chuàng)新初衷。
    發(fā)表于 02-21 09:33 ?1032次閱讀
    ChatGPT的<b class='flag-5'>核心要點</b>

    解鎖CAN接口開發(fā)高效路徑!五個核心要點一次講透

    高效開發(fā)CAN接口,關鍵在于把握協(xié)議基礎、硬件適配、錯誤管理、性能優(yōu)化與調(diào)試五大核心要點。下面將逐一剖析每個環(huán)節(jié)的技術細節(jié)與實踐方法,助力開發(fā)者快速突破難點,實現(xiàn)可靠通信。 在Air780EPM上
    的頭像 發(fā)表于 06-23 16:08 ?174次閱讀
    解鎖CAN接口開發(fā)高效路徑!五個<b class='flag-5'>核心要點</b>一次講透

    液晶顯示屏背光驅動設計的核心要點

    在液晶顯示屏的世界里,無論是信息清晰的單色屏還是色彩絢麗的彩色屏,背光都是其視覺呈現(xiàn)的靈魂。然而,背光驅動絕非簡單的“通電即亮”。忽視設計細節(jié),輕則導致亮度不均、用戶體驗打折,重則縮短顯示屏壽命。本文將深入探討背光驅動設計的核心要點,助力工程師打造穩(wěn)定可靠的顯示方案。
    的頭像 發(fā)表于 07-10 11:46 ?875次閱讀
    液晶顯示屏背光驅動設計的<b class='flag-5'>核心要點</b>