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一共...