|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于中斷的問題,沒人知道嗎? |
| 作者:kingjie 欄目:ARM技術(shù) |
ASM_ISR.S文件: ;----------------------------------------------------------------------------------------------------------- ;Function ;timer1_asm_irq_handler ;Treatments ;Timer 1 interrupt handler ;Called Fuctions ;timer1_c_irq_handler ;Called Macros ;IRQ_ENTRY, IRQ_EXIT ;------------------------------------------------------------------------------------------------------------ EXPORT tc0_asm_irq_handler IMPORT timer1_c_irq_handler tc0_asm_irq_handler ;Manage Exception Entry IRQ_ENTRY ;Call the timer Interrupt C handler ldr r1,=timer1_c_irq_handler bx r1 ;Manage Exception Exit IRQ_EXIT END 中斷處理函數(shù): void timer1_c_irq_handler(void) { unsigned int DUMMY; DUMMY=*AT91C_TC1_SR; DUMMY=DUMMY; AT91C_BASE_TC1->TC_RC=46800; sys->AIC_IDCR=0xffffffff;//禁用中斷 sys->AIC_ICCR=0xffffffff;//清除中斷 /*Read TC1 Status Register to clear it */ ledon(); delay(); ledoff() tc->TC_IER|=AT91C_TC_CPCS; sys->AIC_IECR=0x1<<AT91C_ID_TC1; sys->AIC_EOICR=0x1; //AT91F_US_Printf("\n\rhello!\r\n"); } 定時器發(fā)生中斷后,pc跳到tc0_asm_irq_handler,然后執(zhí)行IRQ_ENTRY,進(jìn)行現(xiàn)場保護(hù),玩了以后再跳到中斷處理函數(shù)timer1_c_irq_handler,執(zhí)行完這個函數(shù)后,pc應(yīng)該返回來執(zhí)行 IRQ_EXIT ,恢復(fù)現(xiàn)場(我是這么理解的)。現(xiàn)在的問題是我必須在中斷處理函數(shù)timer1_c_irq_handler里加上sys->AIC_EOICR=0x1;來通知內(nèi)核中斷結(jié)束,但是這個寫EOICR寄存器的指令在匯編函數(shù)IRQ_EXIT 里已經(jīng)存在了啊?如果我不在c處理函數(shù)timer1_c_irq_handler對EOICR寄存器寫操作的話,中斷只能進(jìn)一次!唯一的解釋是匯編函數(shù)IRQ_EXIT 沒有執(zhí)行。會不會和 ;Call the timer Interrupt C handler ldr r1,=timer1_c_irq_handler bx r1 bx這跳指令有關(guān)系?我看了arm匯編指令,bx好像不帶返回的跳轉(zhuǎn)指令,那么執(zhí)行完timer1_c_irq_handler這個函數(shù)以后pc也就不會返回,的人也就不能執(zhí)行IRQ_EXIT了?晌铱戳撕枚嘀袛嗟睦,都用的是這跳指令,這是為什么呢?困惑! |
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |