請問"中斷"到底是如何發生,系統在哪時偵測到有中斷發生?

2019-07-20 23:49发布

本帖最后由 KCLin 于 2016-2-3 22:32 编辑

最近研讀到串口通訊實驗main() 程式
一開始是做各種初始化
然後while(1){
if(USART_RX_STA&0x8000)

{ ..... }
這段應該是說,有 data 進來
但是,是哪個程式去讀了關於 USART_RX_STA 的變化?
做了 Debug 實在是追不到!


又 在 usart.c 裡面
除了一些串口的初始化之外
還多了
void USART1_IRQHandler(void)  
{..........}
我大概知道,這個函數是要告訴系統,如果系統發生中斷,就來 run 這個函數
那麼,又是哪個程式負責呼叫他的?!
是不是這個函數,其中一個參數必須是 *USART1_IRQHandler
也就是傳遞中斷發生時觸發函數的 位置
(所以其實中斷觸發函數的名稱我們也可以隨意設定,只要把要做的函數位置正確傳遞即可?)

這是不是跟 USART_RX_STA 的變化有關?


新手,邏輯被搞得有些亂了
請各位前輩高手幫助解惑,感謝






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
ricefat
1楼-- · 2019-07-21 00:04
中断是硬件响应,产生中断后由硬件引导到相应中断响应函数,即你看到的handler
xuande
2楼-- · 2019-07-21 01:54
1、先告诉你一个方法:
在工程文件中搜索 USART_RX_STA,然后查看每个句子,就能找到修改这个变量的地方。

2、没做过这个实验,估计就是在USART1_IRQHandler修改的。

3、谁调用的USART1_IRQHandler,
这是硬件机制,一般而言,有中断到来时,CPU无论进行到何处都会立刻放下当前的工作,硬件自动调用USART1_IRQHandler函数。
所有中断都是如此。
你先这么认为吧,以后再了解中断优先级的内容。


xuyaqi
3楼-- · 2019-07-21 02:31
问的有点乱但一句话当串口收完一个字节如果你允许中断话就会触发硬件逻辑调用中断函数,你是Debug 不到硬件逻辑里去。
KCLin
4楼-- · 2019-07-21 03:30
 精彩回答 2  元偷偷看……
ofourme
5楼-- · 2019-07-21 05:07
 精彩回答 2  元偷偷看……
KCLin
6楼-- · 2019-07-21 06:16
本帖最后由 KCLin 于 2016-2-4 08:48 编辑

感謝樓上的指教
我只是想知道,怎樣從"無"到有

如果現在沒有這個例子,我們怎樣知道中斷是調用哪個函數?
就像時鐘是硬件設計本來就安排好的,但是,怎樣的外設,用哪個時鐘,我們是可以查到的
所以我會知道,不用去做一個時鐘,我也知道,如果想要某個頻率,我要怎樣調用函數,設定 presacle

另外,根據"開發指南"
USART_RX_STA  是作者自行添加
在 reference manual 裡面, 關於 USART 的 register 我並沒有查到 USART_RX_STA  的存在
USART_RX_STA  
他一定有連接到某些固件的 "intrinsic register" (例如 USART_CR1)
知道如何連結後,如果沒有 USART_RX_STA
也能有邏輯知道,我應該調用那個 intrinsic register

一周热门 更多>