外部中斷使用指南(暫存器設定)

2021-07-22 15:51:55 字數 3261 閱讀 7174

實驗板子:tiny210(晶元:s5pv210)

實驗目的:通過外部中斷操作兩個按鍵實現對led燈的亮滅控制

步驟:①初始化gpio埠,使gpio為外部中斷狀態;(暫存器:gpxxcon)

例:

②配置外部中斷觸發模式,上公升沿觸發,下降沿觸發,雙邊觸發,高電平觸發,低電平觸發(暫存器:ext_int_x_con)

例:

③取消遮蔽外部中斷(暫存器:ext_int_x_mask)

例:

④通過向量中斷控制器(vic)使能中斷(暫存器:vic0intenable,vic1intenable,vic2intenable,vic3intenable

)(注:幾乎每乙個中斷都有其對應的vic)

注:vicintenable暫存器分別包括vic0,ivc1,vic2,vic3四個,每乙個中斷控制器有32位,每一位對應乙個中斷源(假如你要使能外部中斷1,那麼首先要先找到外部中斷1對應哪乙個中斷控制器,然後找到這個中斷控制器的相應位為設定)

⑤設定中斷程式入口(暫存器:vicxvectaddrx)

例:*(vicxvectaddrx) = 函式名(函式名就是乙個位址)

⑥開總中斷

1

__asm__( 2/*

開中斷*/3"

mrs r0,cpsr\n"4

"bic r0, r0, #0x80\n"5

"msr cpsr_c, r0\n"6

: 7: 8 );

⑦編寫中斷處理程式(清除中斷暫存器:ext_int_x_pend)

1

void

函式名()

2

中斷編寫思維導圖(僅供參考流程思路):

總結:由中斷編寫思維導圖應該有的思路是:1. 對相應gpio以及中斷源的初始化

2. 當中斷發生,中斷源對應的pend暫存器會被置1,所以在中斷處理程式裡應該清除中斷標誌(注:寫1清除中斷)

3. 當中斷發生,如果mask暫存器沒有取消遮蔽,則中斷不被允許,所以在編寫中斷程式時應首先取消相應中斷的遮蔽

4. 別忘了vic的初始化,包括用vicintenable對相應中斷進行使能,用vicvectaddr暫存器設定中斷處理程式入口

s3c2440

示例**(僅供參考思路步驟,與s5pv210不對應)

1

void

key_init() 2

1112

static

void

__irq key_handler()

13

其他外部中斷程式設計參考資料:

1.中斷源的相關暫存器:

當需要開啟中斷時,則需要對中斷源進行相應的配置,這裡主要記錄常用的外部中斷的配置。外部中斷的配置主要是對引腳的配置,涉及的暫存器主要分為兩組。

一組是eint0~16,涉及的暫存器主要是ext_int_x_con,ext_int_xmask,ext_int_pend。ext_int_x_con是外部中斷的的配置暫存器,主要配置中斷的觸發方式;ext_int_xmask是外部中斷的遮蔽暫存器,配置引腳的中斷是否遮蔽;ext_int_pend是外部中斷的中斷未決暫存器,中斷結束時必須清楚相應位,否則會持續引發中斷。

另一組的則是其餘的gpio的中斷,他們復用乙個中斷線路,涉及的暫存器主要是gpxx_int_con,gpxx_int_mask,gpxx_int_pend。各暫存器功能跟第一組的類似。

2.中斷控制器的相關暫存器:

vicxintselect——中斷型別選擇暫存器,通過此暫存器選擇是irq還是fiq。

vicxintenable——中斷使能暫存器,通過此暫存器使能相應的中斷線路。

vicxintenclear——中斷使能清除暫存器(即失能),在控制器禁止某路中斷在該暫存器設定。

vicxirqstatus——普通中斷請求狀態暫存器,記錄了經vicxintenable和vicxintselect過濾後的irq中斷請求狀態。

vicxfiqstatus——普通中斷請求狀態暫存器,記錄了經vicxintenable和vicxintselect過濾後的fiq中斷請求狀態。

vicxramintr——原始中斷請求暫存器,記錄了未經vicxintenable和vicxintselect過濾後的中斷請求狀態。

vicxsofint——軟體中斷暫存器,通過該暫存器可使控制器產生相應線路的中斷訊號,該訊號未經過優先順序,vicxintenable和vicxintselect等暫存器的過濾。

vicxsofintclear——軟中斷清除暫存器,在isr(中斷服務程式)結束時要清除該暫存器相應位來清除中斷,否則該中斷會持續觸發。

vicxvectaddrx——向量位址暫存器,該暫存器儲存的是相應線路的isr的位址。

vicxvectpriorityx——儲存相應相應線路的優先順序,有16個優先順序,0的優先順序最高,當多個相同優先順序的線路同時請求中斷時,按硬體優先順序排序,同一組中斷,中斷好越低優先順序越高,如vic0中,eint0優先順序;如正在執行某isr時,又一同軟體優先順序的但硬體優先順序高的線路請求中斷,此時該中斷被遮蔽,要當前isr執行完畢才可受理。

vicxswprioritymask——軟體優先順序遮蔽,可設定遮蔽相應的優先順序,遮蔽後則相應優先順序的中斷被遮蔽。

vicxaddress——儲存當前活躍的中斷線路的isr位址,讀取一次該暫存器意味著當前活躍的中斷請求已被標誌為已服務,此操作只能在進入中斷處理時執行;向該暫存器寫如任意值表示清楚控制器中該路中斷狀態,此操作只能在isr結尾處執行。

vicxprotection——控制器保護模式配置暫存器,配置為保護模式時,中斷控制器的暫存器只能在特權模式下被訪問;非保護模式時,使用者模式和特權模式都可以訪問中斷控制器的暫存器。vicxprotection只能在特權模式下訪問。

3.處理器核心配置主要是配置cpsr暫存器,配置相應中斷控制位為允許中斷。

PWM使用暫存器設定

pwm 原理分析 1,rcc apb1enr 0x00000002 使能tim3 時鐘 rcc apb2enr 0x00000011 使能管腳c 2 使能c埠 使用pin7,輸出模式 復用推挽輸出 頻率 50mhz。10 復用功能推挽輸出模式 11 輸出模式,最大速度50mhz gpioc crl ...

DSP 中斷暫存器

幾乎所有的mcu都不允許mov指令修改pc值,這是乙個常識。2.中斷服務表指標暫存器istp interrupt servicetable pointer 用於確定中斷服務程式在中斷服務表中的位址。istp中的字段istb確定ist的位址的基值,另一欄位hpeint確定特定的中斷,並給出這一特定中斷...

zynq中斷,SDK暫存器

中斷 分成三大類spi,ppi,sgi總共96個id號的中斷,這96個中斷要按照不同的優先順序分配到兩個處理器上,這就需要對中斷進行管理 很多輸入的中斷給2個處理器核的中斷控制器需要設定一些什麼樣的控制器暫存器。首先必須有全域性使能,而具體到每乙個中斷的id號,要設定是否使能 是否生處理器中斷 以及...