色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

【有那么點詳細的CW32學習筆記】通用異步收發器—中斷接收篇

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2023-11-17 17:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上回說到單片機Uart發送,我們編寫了一個發送函數循環發送固定的字符串,這回我們講Uart的中斷接收功能。

說一下中斷是什么 ,大概就是說,單片機只有一個核,就是只有一個大腦,他無法一核二用地做事,但有時候迫不得已需要去響應一些緊急的命令,就好比你打游戲開團了,你媽喊你去倒開水,倒開水就會觸發咱們人類的“中斷”功能。放在單片機上,進行中斷操作需要以下幾個條件和步驟:擁有 中斷源中斷控制器正常工作觸發中斷保護現場響應中斷恢復現場

看名字可能會比較抽象,我來具體解釋一下。

中斷源 ,單片機上會有很多的中斷源,也就是有很多辦法、或者說“渠道”去觸發中斷,Uart外設就有很多觸發中斷的辦法,而我們本文涉及到的就是接收信息會觸發的中斷,具體怎么觸發的,后文會詳細解釋。

中斷控制器 ,這個東西是一個物理存在于單片機內核里面的一塊數字電路,這一塊電路的功能就是用來管理中斷的。對于一些老舊型號的單片機,比如C51單片機,他內部也有這個東西,只不過其中斷優先級是固定的,這個控制器只扮演了“總閘”這樣的角色。再看CW32這種32位單片機,使用cortex-M0+內核, 擁有可編程的中斷控制器 ,單片機上會有很多個中斷源,但這是內核可以使用和管理的部分,芯片制造廠使用這一款內核制造單片機,并不會用到所有的中斷資源,不只是搭載的功能有限,還受限于封裝,很多中斷資源會被閑置。但是 只要使用芯片的中斷都必須正確配置內核里面的中斷控制器否則中斷是無法工作的 ,因為不論單片機外設設計的如何天花亂墜, 外設只負責觸發中斷而響應中斷的一定是內核

中斷的觸發 ,前面提到了中斷源, 一個指定的中斷只能由特定的、與其綁定的中斷源觸發,一個中斷可能綁定多個中斷源但是只會有一個與中斷綁定的中斷服務函數 ,至于什么是中斷服務函數,后文會解釋。那這個時候肯定會有讀者問了“那單片機如何在一個中斷里面區分不同的中斷源呢?”,單片機對不同的中斷源,都設計了中斷標志位,假設有ABC三個中斷源,那他們就對應了3個標志位(3比特位),沒觸發中斷的時候,ABC的中斷標志位就是默認值0,如果觸發中斷, 電路硬件會對其對應的標志比特位進行置位操作 ,也叫置1操作,該比特位會變成1。這個 置位行為會直接反饋到內核的中斷控制器,隨后內核會對中斷信號進行響應

保護現場 ,看名字似乎和編程關系不大,這個名詞在教科書上的中斷章節會高頻出現。我們無法預測中斷會在什么時候到來,CPU也不能一直傻傻地等中斷到來,所以不需要響應中斷的時候,CPU還是照常工作的。想象現在CPU正在執行一個函數function(),倘若函數還未執行完成,中斷被觸發,CPU應該怎么做?是放下function函數不管不顧直接去響應,抑或是先做點什么?顯而易見,后者更好更合理,需要做的,正是保護現場,函數執行到哪一步,CPU就會把執行到這一步的CPU數據(不只是我們要看的數據,還包括了程序執行的情況)存放到堆棧中,在中斷響應完成之前,這些數據都會被封存,以避免響應完成后數據的丟失。

響應中斷 ,這個是大部分人最關心的部分,因為這個部分直接涉及到中斷服務函數的編寫。在一切準備就緒后,CPU會放棄下一條需要執行的語句并直接進入中斷服務函數 ,這里需要理解 “中斷服務函數”它仍然是個函數 ,初學者可能會認為,C語言的函數需要調用才會被執行,這里沒被調用卻被執行了,那肯定不是函數。實際上看過單片機原理或者了解過計算機原理的小伙伴會告訴你,CPU內部會有一個程序指針,程序指針會按照代碼編譯之后的邏輯去依次指向需要被執行的函數,單片機進入中斷服務函數的原理就是直接設置這個指針指向中斷服務函數,之后CPU就能執行中斷代碼響應中斷了。

恢復現場 ,對應于保護現場,CPU必須在響應中斷之后回到之前被中斷打斷的語句那里繼續執行,取出原路堆棧中的數據就完成了恢復。

掌握中斷相關的知識后,我們就可以自己編寫和中斷相關的代碼了,編寫程序時,基本上只需要注意中斷標志位、中斷服務函數、中斷控制器就可以,保護現場什么的單片機會自己完成。

在包含了必要的頭文件之后,在初始化函數中加入下圖的代碼即可完成對中斷控制器的設置:

圖片

第一行和第二行的函數均是對內核里的中斷控制器進行寄存器操作。

解釋一下第二行的設置中斷優先級,這里涉及到一個中斷嵌套的概念,中斷不會只有一個,并且很有可能下一個中斷觸發的時候,上一個中斷還沒有執行完,此時就需要嚴格設置中斷優先級,在單片機中,根據內核用戶手冊,優先級從0開始遞增, 優先級數字越低,其優先級越高高優先級中斷可以直接打斷低優先級中斷的響應,立刻響應高優先級中斷 ,形成中斷嵌套,這里設置為1是因為這個回發功能不算很重要的功能,相比之下嘀嗒定時器會為單片機程序提供時基信號,其優先級應該更高。關于優先級的具體解釋,可以進行網上搜索或是查看《cortex-M0+內核手冊》。

關于最后一行代碼,CW_UART1這個外設擁有很多個中斷源,這些中斷源的使用是獨立的,這里只使用了接收中斷這一個中斷源,芯片手冊的通用異步收發器章節展示了Uart中斷包含的中斷源。

圖片

當有數據進入單片機的Uart1接收緩沖區時,接收中斷會觸發,中斷標志位置1,程序跳轉至Uart1的中斷服務函數。單片機幾乎所有的中斷服務函數都會由一個單獨的文件收錄,名為interrupt_xxxx.c或者xxxx_it.c。這里貼一張簡易的中斷服務函數代碼,其功能是在盡量不破壞單片機實時性的情況下把數據放入一個既有的數組。

圖片

前文有提到,硬件會根據中斷標志位決定是否進入中斷服務函數,如果不在中斷服務函數中清除中斷標志位,單片機就會反復進入中斷,導致程序死在中斷里。

說一下代碼的思路,len是一個變量,是緩沖區內非空數據的個數;data_rx是一個字符數組,作為接收緩沖區,緩沖區大小為200;進入中斷之后首先判斷緩沖區是否還有位置,也就是len是否超出緩沖區數組下標上限,超出則判定為緩沖區已滿,丟掉后續所有的數據直到緩沖區有空位;變量 Rx_Flag是一個8位無符號數,作為緩沖區有數據&緩沖區滿的標志位使用;對于接收的所有數據,均會判斷是否是“rn”,這個字符串在編碼中是換行符,只要判斷到最近接收的兩個字節數據是連續的0X0D和0X0A,就認定接收到換行符,本次數據接收完畢,Rx_Flag置1表示完成一次完整的數據接收。

需要注意的是, 中斷的響應并非一個非常可靠的函數調用 ,一些編譯器會試圖優化掉代碼對某些變量的修改操作(他們可能察覺不到中斷函數的存在而認為變量不需要被修改),因此需要在中斷中修改的變量需要加上“volatile”關鍵字以防止對變量的操作被編譯器優化。

圖片

到目前位置,數據其實已經被保存在數組data_rx里面了,但這段數據我們從外部是看不到的,也看不到是否是我們設想的功能完成的接收,所以我編寫了如下函數,此函數可以在Uart1完成了一次完整的數據接收(Rx_Flag置1)后立刻回發接收的數據,并清空接收緩沖區,允許進行下一次接收。

圖片

因為函數包含發送功能,所以保留了超時跳出的保險措施。這里解釋一下time_ms這個變量的作用,該變量定義在嘀嗒定時器文件中,并在嘀嗒定時器中斷服務函數中遞增1,即每1ms該變量都會增加1,作為毫秒計數值使用,本系列教程大部分實時性較弱的功能都會依賴此功能進行定時。如有疑問可以移步《內核外設-嘀嗒定時器》章節學習。

在輪詢中加入這個回發函數,最大發送容忍時間100ms,并設置間隔1000ms發送一次“success”+“換行符”。隨后在串口助手中發送不超過200字節的文本數據,即可驗證接收是否成功。

圖片

圖片

看來單片機順利接收了數據并進行了回發操作,本節完。

總結:

1.注意理解中斷的概念;

2.同一個中斷可能會有多個中斷源;

3.中斷的執行不可靠,中斷內涉及到修改的變量需要加上volatile防止優化;

4.串口的每一次發送攜帶很少的數據量,因此非常建議使用緩沖區來接收數據,待需要時再主動讀取;

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 異步收發器
    +關注

    關注

    0

    文章

    37

    瀏覽量

    11014
  • CW32
    +關注

    關注

    1

    文章

    256

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何使用新版本J-Flash編程CW32 MCU?

    CW32 MCU器件支持包JlinkDevices_WHXY.rar解壓到新建的JlinkDevices子目錄即可。 4、運行JFlash.exe,通過Jlink連接CW32 MCU測試板,進行編程測試
    的頭像 發表于 07-01 15:05 ?169次閱讀
    如何使用新版本J-Flash編程<b class='flag-5'>CW32</b> MCU?

    第二十四章 通用同步異步收發器(USART)

    本文介紹了W55MH32的通用同步異步收發器(USART),其支持全雙工異步通信、NRZ格式,具分數波特率發生,可編程數據字長、停止位等。
    的頭像 發表于 05-29 15:44 ?1671次閱讀
    第二十四章 <b class='flag-5'>通用</b>同步<b class='flag-5'>異步</b><b class='flag-5'>收發器</b>(USART)

    STM32Cube學習筆記 (十六全)

    資料介紹: STM32Cube學習筆記,一步一步手把手帶你進入STM32Cube的世界,包括點燈,按鍵,串口,ADC,DAC等等一共16。 純分享貼,需要可以直接下載附件獲取完
    發表于 03-22 17:02

    代碼+案例+生態:武漢芯源半導體CW32嵌入式開發實戰正式出版

    尊敬的各位電子工程師、嵌入式開發愛好者們:大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導體的單片機CW32正式出書啦!《基于ARMCortex-M0+的CW32
    的頭像 發表于 03-03 15:15 ?705次閱讀
    代碼+案例+生態:武漢芯源半導體<b class='flag-5'>CW32</b>嵌入式開發實戰正式出版

    代碼+案例+生態:武漢芯源半導體CW32嵌入式開發實戰正式出版

    關于 CW32 單片機的書籍。在這本書中,我們從最基礎的知識講起,詳細介紹了 CW32 單片機的硬件架構、內核特性、存儲系統以及各類外設功能。無論是剛剛踏入嵌入式開發領域的新手,還是經驗豐富的專業人士
    發表于 03-03 15:14

    74ALVCH16601 18位通用總線收發器規格書

    電子發燒友網站提供《74ALVCH16601 18位通用總線收發器規格書.pdf》資料免費下載
    發表于 02-19 15:39 ?0次下載
    74ALVCH16601 18位<b class='flag-5'>通用</b>總線<b class='flag-5'>收發器</b>規格書

    無線收發器工作原理,無線收發器怎么使用

    無線收發器作為現代通信技術的重要組成部分,廣泛應用于各個領域,包括無線通信、物聯網、遠程控制和無線傳感網絡等。本文將深入探討無線收發器的工作原理,同時提供詳細的使用方法。
    的頭像 發表于 01-29 15:31 ?1496次閱讀

    74ALVCH162601通用總線收發器規格書

    電子發燒友網站提供《74ALVCH162601通用總線收發器規格書.pdf》資料免費下載
    發表于 01-23 17:14 ?0次下載
    74ALVCH162601<b class='flag-5'>通用</b>總線<b class='flag-5'>收發器</b>規格書

    TMS320DM643 DMP通用異步收發器(UART)手冊

    電子發燒友網站提供《TMS320DM643 DMP通用異步收發器(UART)手冊.pdf》資料免費下載
    發表于 12-16 10:10 ?0次下載
    TMS320DM643 DMP<b class='flag-5'>通用</b><b class='flag-5'>異步</b><b class='flag-5'>收發器</b>(UART)手冊

    CW32L010學習筆記

    記錄CW32L010學習過程
    的頭像 發表于 11-15 17:40 ?3362次閱讀
    <b class='flag-5'>CW</b>32L010<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    射頻收發器就是基帶嗎

    射頻收發器(RF Transceiver)和基帶(Baseband)是無線通信系統中兩個不同的概念,它們在功能和設計上有所區別。射頻收發器主要負責無線信號的發送和接收,而基帶則處理信號的數字處理部分
    的頭像 發表于 09-20 11:12 ?963次閱讀

    射頻收發器屬于什么類別

    射頻收發器(RF Transceiver)是無線通信系統中的關鍵組件,它負責將數字信號轉換為無線電波(發射)以及將無線電波轉換為數字信號(接收)。射頻收發器的設計和應用非常廣泛,包括但不限于移動通信
    的頭像 發表于 09-20 11:06 ?837次閱讀

    光纖收發器怎么判斷好壞

    光纖收發器作為光纖通信系統中的關鍵設備,其性能直接影響到整個網絡的傳輸質量和穩定性。因此,準確判斷光纖收發器的好壞是確保網絡正常運行的重要步驟。以下是從多個方面綜合評估光纖收發器好壞的詳細
    的頭像 發表于 08-26 15:11 ?2154次閱讀

    光纖收發器的作用、使用方法及應用

    具有以下功能: 1.1 信號轉換:光纖收發器可以將電信號轉換為光信號,也可以將光信號轉換為電信號,實現信號的傳輸和接收。 1.2 信號放大:光纖收發器具有信號放大功能,可以提高信號的傳輸距離和質量。 1.3 信號隔離:光纖
    的頭像 發表于 08-23 09:51 ?4896次閱讀

    光纖收發器怎么區分發射端和接收

    光纖收發器是一種將電信號轉換為光信號,或者將光信號轉換為電信號的設備,廣泛應用于通信、網絡、安防等領域。在光纖收發器的使用過程中,正確區分發射端和接收端是非常重要的。 一、光纖收發器
    的頭像 發表于 08-23 09:43 ?5562次閱讀
    主站蜘蛛池模板: 狠狠色丁香婷婷久久综合五月 | 亚洲乱亚洲乱妇13p 亚洲乱色视频在线观看 | 亚洲黄色在线观看 | 美女脱内衣裸身尿口露出来 | 簧片高清在线观看 | 国产精品嫩草久久久久 | 成人国产在线观看 | 亚洲1区2区3区精华液 | 久久国产精品久久国产精品 | 果冻传媒我的女老板 | 国内精品乱码卡一卡2卡三卡 | WWWXXXX兽交| 午夜DV内射一区二区 | 国产3级在线 | 黑人BBCVIDEOS极品| 最新亚洲中文字幕在线观看 | 叔叔 电影完整版免费观看韩国 | 久久99热这里只有精品66 | 在线看片韩国免费人成视频 | 国产 高清 无码 中文 | 天美传媒在线观看免费完整版 | 天天狠狠弄夜夜狠狠躁·太爽了 | 探花口爆颜射乳交日韩 | 扒开老师粉嫩的泬10P | 秋霞网在线伦理免费 | 麻豆沈芯语| 国产欧美日韩精品a在线观看高清 | 小SAO货水真多把你CAO烂 | 中文字幕乱码一区久久麻豆樱花 | 高H纯肉NP 弄潮NP男男 | 亚洲高清在线天堂精品 | 棉袜足j吐奶视频 | 国产99网站| 亚洲免费无l码中文在线视频 | 麻豆产精品一二三产区区 | 日韩亚洲欧美中文高清在线 | 久久99精品国产免费观看 | 久久国产av偷拍在线 | 国产真实女人一级毛片 | 日韩毛片大全 | 久久婷婷五月综合色情 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品