以註冊 2.4g radio irq 為例
鏈結檔案定義 標號
__vector_table
__ram_vector_table_size
__vector_ram
//icf 鏈結檔案
define exported symbol __vector_table = m_interrupts_start;
define exported symbol __vector_ram =
isdefinedsymbol
(__ram_vector_table__)
? m_interrupts_ram_start : m_interrupts_start;
define exported symbol __ram_vector_table_size = __ram_vector_table_size__;
define exported symbol __boot_stack_address = m_data_end-
0x0f
;
//kw36標頭檔案
typedef
enum irqn
;
installirqhandler 中斷註冊函式 傳入引數
中斷號 irq 和 中斷處理函式 irqhandler
uint32_t installirqhandler
(irqn_type irq, uint32_t irqhandler)
/* point the vtor to the position of vector table */
scb->vtor =
(uint32_t)__vector_ram;
//設定 vector 位址值
} ret = __vector_ram[irq +16]
;//原始值儲存在ret變數中並返回
/* 重新註冊 2.4g radio irq 中斷處理函式 */
__vector_ram[irq +16]
= irqhandler;
enableglobalirq
(irqmaskvalue)
;//使能全域性中斷
return ret;
}
radio irq 中斷處理函式
void
controller_interrupthandler
(void
)//呼叫示例
installirqhandler
(radio_0_irqn,
&controller_interrupthandler)
;nvic_clearpendingirq
(radio_0_irqn)
;//清中斷
nvic_enableirq
(radio_0_irqn)
;//使能中斷
/* *設定優先順序
*引數1 為 中斷號,
*引數2 為 優先順序
*/nvic_setpriority
(radio_0_irqn,
0x80u
>>(8u
-(uint8_t)__nvic_prio_bits)
);
中斷註冊函式整理
中斷註冊函式整理 archipcint interruptregister obj remoteprocid,obj params.localintid,notifydrivershm isr,ptr obj int32 archipcint interruptregister uint16 pro...
時鐘中斷處理函式
以前的中斷處理函式只做為測試用,其實問題還很多,我把它放到了乙個專門的檔案中,kernel system call.s 如下 globl timer interrupt timer interrupt incl jiffies movb 0x20,al outb al,0x20 call do ti...
中斷註冊函式分析總結
include 函式原型如下 int request irq unsigned int irq,void handler int,void struct pt regs unsigned long frags,const char device,void dev id request irq uns...