串列埠中斷函式詳解

2022-05-07 10:30:11 字數 1917 閱讀 9833

arm cortex_m3 核心支援 256 個中斷(16 個核心+240 外部)和可程式設計 256 級中斷優先順序的設定。

stm32支援的中斷共為84個(16個核心+68個外部),和16級可程式設計中斷優先順序的設定。

aircr是nivc配置中乙個關鍵的暫存器,由於stm32有很多中斷,要處理這些中斷的時候總是需要先後順序的,所以採用aircr暫存器給中斷優先順序進行分組。

優先組別總用有5組, 0-4,分為搶占優先順序和響應優先順序(也稱為子優先順序),使用低位元組的高四位來設定中斷優先順序分組。

例如:當aircr暫存器的第八位到第十位都為1時,暫存器的第四位到第七位都是在設定響應優先順序,最高可以有0個搶占優先順序和16級響應優先順序。具體分配如下表:

組aircr[10: 8]

bit[7: 4]結果0

1110:4

0 位搶占優先順序, 4 位響應優先順序

1110

1:31 位搶占優先順序, 3 位響應優先順序

2101

2:22 位搶占優先順序, 2 位響應優先順序

3100

3:13 位搶占優先順序, 1 位響應優先順序

4011

4:04 位搶占優先順序, 0 位響應優先順序

在使用nvic初始化以前需要使用nvic_prioritygroupconfig( )函式設定中斷優先順序分組。分組後再在中斷初始化函式中使用nvic_irqchannelpreemptionpriority設定具體的中斷優先順序。

下面為串列埠初始化函式以及中斷函式:

void uart_init ()

void usart1_irqhandler (void) //串列埠1中斷服務程式

else

}}

} }

這裡詳細介紹稍難理解一點的語句

usart_itconfig(usart1, usart_it_rxne, enable);
下面為中斷處理函式:

if((usart_rx_sta&0x8000)==0)
usart_rx_sta是狀態標記變數,bit0~13接收有效位元組數目,bit14接收0x0d,bit15接收完成標誌。當接收完成時,bit15置為1。

該變數從0開始,串列埠中斷接收到乙個資料(乙個位元組)就自增1。當資料讀取全部ok時候(回車和換行符號來的時候),那麼 usart_rx_sta的最高位置1,表示串列埠資料接收全部完畢了,然後main函式裡面可以處理資料了。

當接收到從電腦發過來的資料,把接收到的資料儲存在usart_rx_buf 中,同時在接收狀態暫存器(usart_rx_sta)中計數接收到的有效資料個數,當收到回車(0x0d,0x0a)的第乙個位元組0x0d 時,計數器將不再增加,等待0x0a 的到來,而如果0x0a 沒有來到,則認為這次接收失敗,重新開始下一次接收。如果順利接收到0x0a,則標記usart_rx_sta的第16位,這樣完成一次接收,並等待該位被其他程式清除,從而開始下一次的接收,而如果遲遲沒有收到0x0d,那麼在接收資料超過設定值個數後,會丟棄前面的資料,重新接收。

0x4000,即二進位制0100 0000 0000 0000,與變數usart_rx_sta,按位與(&),作用是判斷usart_rx_sta數值第15位是否為0。

0x8000,即二進位制1000 0000 0000 0000,與變數usart_rx_sta,按位與(&),作用是判斷usart_rx_sta數值第16位是否為0。

usart_rx_buf[usart_rx_sta&0x3fff]=res ;
為了去除最高兩位的影響,將最高兩位置0。

if (usart_rx_sta>200) usart_rx_sta=0
200為自己設定的值,如果接收到的函式大於這個值,就清除掉整個字串重新輸入。

串列埠中斷狀態函式理解

itstatus usart getitstatus usart typedef usartx,uint16 t usart it get the usart register index usartreg uint8 t usart it 0x05 get the interrupt positi...

串列埠中斷接收資料方式

微控制器中斷能夠及時響應外部觸發事件,在中斷函式中處理外部事件,處理完成之後退回到中斷點。中斷服務函式應該能最快速的解決觸發事件,快速退出中斷,不宜在中斷中處理複雜的執行演算法。所以中斷函式的編寫盡量簡單明瞭快速,下面以串列埠接收中斷為例來說明中斷處理函式的寫法。1.設定乙個全域性標誌,觸發中斷之後...

個人練習 串列埠中斷和通訊

寫中斷需要用到定時器 1.設定它的暫存器tmod 2.thx和tlx的值 這個是設定定時器的初值 3.開啟定時器 trx 1 注 序列口兩個暫存器 串列埠控制器 和 4.的格式 sm0 sm1 sm2 ren tb8 rb8 ti ri 1 sm0和sm1用來設定序列口的工作方式 0,1,2,3一共...