下面的代碼片段來自制造商。我對他們正在努力做什麼感到困惑。特別是與InterruptHandler有關的任何事情。製造商的C代碼中斷設置
請對globals部分的代碼發表評論。這看起來正確嗎?
此外,包括各種API都有我的困難點。他們是否試圖使用無效指針? ...很多人問,請評論他們如何建議timer2工作。
...
/**
Section: Global Variables Definitions
*/
void (*TMR2_InterruptHandler)(void);
...
/**
Section: TMR2 APIs
*/
void TMR2_Initialize(void)
{
// Set TMR2 to the options selected in the User Interface
// T2CKPS 1:2; T2OUTPS 1:2; TMR2ON off;
T2CON = 0x11;
// T2CS LFINTOSC;
T2CLKCON = 0x04;
// T2PSYNC Not Synchronized; T2MODE Software control One shot; T2CKPOL Rising Edge; T2CKSYNC Not Synchronized;
T2HLT = 0x08;
// T2RSEL TMR4_postscaled;
T2RST = 0x02;
// PR2 8;
T2PR = 0x08;
// TMR2 0;
T2TMR = 0x00;
// Clearing IF flag before enabling the interrupt.
PIR4bits.TMR2IF = 0;
// Enabling TMR2 interrupt.
PIE4bits.TMR2IE = 1;
// Set Default Interrupt Handler
TMR2_SetInterruptHandler(TMR2_DefaultInterruptHandler);
// Start TMR2
TMR2_Start();
}
void TMR2_ISR(void)
{
// clear the TMR2 interrupt flag
PIR4bits.TMR2IF = 0;
if(TMR2_InterruptHandler)
{
TMR2_InterruptHandler();
}
}
void TMR2_SetInterruptHandler(void* InterruptHandler)
{
TMR2_InterruptHandler = InterruptHandler;
}
void TMR2_DefaultInterruptHandler(void)
{
// add your TMR2 interrupt custom code
// or set custom function using TMR2_SetInterruptHandler()
}
/**
End of File
*/
謝謝你,史蒂夫
編輯: 製造商代碼包括程序(我似乎無法在這裏補充吧)管理的高級別中斷調用,如果TMR2_ISR(PIE4bits.TMR2IE = = 1 & & PIR4bits.TMR2IF == 1)這似乎否定任何TMR2_DefaultInterruptHandler它不會?
再次感謝您的幫助。
你知不知道一般中斷如何工作以及它們的優點?什麼觸發中斷處理程序? (可能有一箇中斷處理程序被調用來處理任何中斷,在這種情況下,必須有某種規範(例如全局變量)來指示觸發中斷的原因。) – Scheff
使用它們提供的代碼並將代碼放入TMR2_DefaultInterruptHandler –
這只是一個骨架。你不明白什麼位,因爲這段代碼沒有任何用處。有關硬件寄存器的詳細信息,請參閱用戶手冊。有關中斷通信和信號,請參閱您的操作系統手冊。 –