📄 instisr.c
字号:
asm( move.l POUND >>(BSP_PERIPH_BASE + archoff_##device), R2 ); \
asm( move.l POUND >>##device##DeviceContext, R3 ); \
asm( move.l POUND >>##device##type1##_DispatchCallback, R4 ); \
asm( move.l POUND >>##device##type2##_DispatchCallback, R5 ); \
asm( jsr CallBack); \
asm( move.l X:(SP)-,R5); \
asm( move.l X:(SP)-,R4); \
asm( move.l X:(SP)-,R3); \
asm( move.l X:(SP)-,R2); \
asm( rti); \
};
#define ArchInstall4CallBackISR(device,num, type1, type2, type3, type4, CallBack, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
extern void CallBack(void); \
asm( adda #2,SP); \
asm( move.l N, X:(SP)+); \
asm( move.l R1, X:(SP)+); \
asm( move.l R2, X:(SP)+); \
asm( move.l R3, X:(SP)+); \
asm( move.l R4, X:(SP)+); \
asm( move.l R5, X:(SP)); \
asm( move.l POUND >>##device##type1##_DispatchCallback, N ); \
asm( move.l POUND >>##device##type2##_DispatchCallback, R1 ); \
asm( move.l POUND >>(BSP_PERIPH_BASE + archoff_##device), R2 ); \
asm( move.l POUND >>##device##DeviceContext, R3 ); \
asm( move.l POUND >>##device##type3##_DispatchCallback, R4 ); \
asm( move.l POUND >>##device##type4##_DispatchCallback, R5 ); \
asm( jsr CallBack); \
asm( move.l X:(SP)-,R5); \
asm( move.l X:(SP)-,R4); \
asm( move.l X:(SP)-,R3); \
asm( move.l X:(SP)-,R2); \
asm( move.l X:(SP)-,R1); \
asm( move.l X:(SP)-,N); \
asm( rti); \
};
#define ArchInstallGPIOISR( num, port, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
asm( alignsp ); \
asm( move.l R2 , x:(SP)+ ); \
asm( move.l A10, x:(SP) ); \
asm( move.l POUND ArchIO.Port##port,R2 ); \
\
asm( move.w X:(BSP_PERIPH_BASE + archoff_Port##port##_IntPendingReg), A ); \
asm( jsr GPIO##port##any##_DispatchCallback ); \
\
asm( getPinCallback: ); \
\
asm( move.w X:(BSP_PERIPH_BASE + archoff_Port##port##_IntPendingReg), A ); \
\
asm( brset POUND 0x0001, A1, pin_1 ); \
asm( pin_1_next: ); \
asm( brset POUND 0x0002, A1, pin_2 ); \
asm( pin_2_next: ); \
asm( brset POUND 0x0004, A1, pin_3 ); \
asm( pin_3_next: ); \
asm( brset POUND 0x0008, A1, pin_4 ); \
asm( pin_4_next: ); \
asm( brset POUND 0x0010, A1, pin_5 ); \
asm( pin_5_next: ); \
asm( brset POUND 0x0020, A1, pin_6 ); \
asm( pin_6_next: ); \
asm( brset POUND 0x0040, A1, pin_7 ); \
asm( pin_7_next: ); \
asm( brset POUND 0x0080, A1, pin_8 ); \
asm( pin_8_next: ); \
\
asm( move.l x:(SP)- , A ); \
asm( move.l x:(SP)- , R2 ); \
asm( move.l x:(SP)- , SP ); \
\
asm( rti ); \
\
asm( pin_1: ); \
asm( bfset POUND 1, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##0any##_DispatchCallback ); \
asm( bra pin_1_next ); \
\
asm( pin_2: ); \
asm( bfset POUND 2, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##1any##_DispatchCallback ); \
asm( bra pin_2_next ); \
\
asm( pin_3: ); \
asm( bfset POUND 3, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##2any##_DispatchCallback ); \
asm( bra pin_3_next ); \
\
asm( pin_4: ); \
asm( bfset POUND 4, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##3any##_DispatchCallback ); \
asm( bra pin_4_next ); \
\
asm( pin_5: ); \
asm( bfset POUND 5, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##4any##_DispatchCallback ); \
asm( bra pin_5_next ); \
\
asm( pin_6: ); \
asm( bfset POUND 6, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##5any##_DispatchCallback ); \
asm( bra pin_6_next ); \
\
asm( pin_7: ); \
asm( bfset POUND 7, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##6any##_DispatchCallback ); \
asm( bra pin_7_next ); \
\
asm( pin_8: ); \
asm( bfset POUND 8, X:(BSP_PERIPH_BASE + archoff_Port##port##_IntEdgeSensReg) ); \
asm( jsr GPIO##port##7any##_DispatchCallback ); \
asm( bra pin_8_next ); \
\
asm( GPIO##port##any##_DispatchCallback: ); \
asm( GPIO##port##0any##_DispatchCallback: ); \
asm( GPIO##port##1any##_DispatchCallback: ); \
asm( GPIO##port##2any##_DispatchCallback: ); \
asm( GPIO##port##3any##_DispatchCallback: ); \
asm( GPIO##port##4any##_DispatchCallback: ); \
asm( GPIO##port##5any##_DispatchCallback: ); \
asm( GPIO##port##6any##_DispatchCallback: ); \
asm( GPIO##port##7any##_DispatchCallback: ); \
asm( rts ); \
}
/* ADC ISR */
#define ArchInstallADCErrorCallBackISR(device, num, CallBack, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
asm( brclr POUND ADC_ZCI|ADC_LLMT|ADC_HLMT , X:(BSP_PERIPH_BASE + archoff_##device##_StatusReg ), end ); \
asm( alignsp ); \
asm( move.l R2 , x:(SP)+ ); \
asm( move.l R3 , x:(SP)+ ); \
asm( move.l R4 , x:(SP)+ ); \
asm( move.l Y , x:(SP) ); \
asm( move.l POUND (BSP_PERIPH_BASE + archoff_##device), R2 ); \
asm( move.l POUND >>device##DeviceContext, R3 ); \
asm( brset POUND ADC_ZCI , X:(BSP_PERIPH_BASE + archoff_##device##_StatusReg), lbl_AZC ); \
asm(endtestZC: ); \
asm( brset POUND ADC_LLMT|ADC_HLMT , X:(BSP_PERIPH_BASE + archoff_##device##_StatusReg), lbl_ALL ); \
asm(endtest: ); \
asm( move.l x:(SP)- , Y ); \
asm( move.l x:(SP)- , R4 ); \
asm( move.l x:(SP)- , R3 ); \
asm( move.l x:(SP)- , R2 ); \
asm( move.l x:(SP)- , SP ); \
asm( nop ); \
asm( nop ); \
asm(end: ); \
asm( rti ); \
\
asm(lbl_AZC: ); \
asm( brclr POUND ADC_ZCIE, X:(R2 + #arch_sADC_offset_Control1Reg), clear_ZCSR ); \
asm( move.l POUND >>device##ZeroCrossing##_DispatchCallback, R4 ); \
asm( move.w X:(R2 + #arch_sADC_offset_ZeroCrossStatusReg), Y1 ); \
asm( move.w X:(R3 + #sAdcDevice_offset_maskZeroCrossing ), Y0 ); \
asm( and.w Y1, Y0 ); \
asm( beq endtestZC ); \
asm( jsr CallBack ); \
asm(clear_ZCSR: ); \
asm( move.w 0x00ff, X:(R2 + #arch_sADC_offset_ZeroCrossStatusReg) ); \
asm( jmp endtestZC ); \
\
asm(lbl_ALL: ); \
asm( move.w X:(R2 + #arch_sADC_offset_LimitStatusReg), Y1 ); \
asm( move.w X:(R3 + #sAdcDevice_offset_maskLimit ), Y0 ); \
asm( and.w Y1, Y0 ); \
asm( move.w Y0, Y1 ); \
asm( brclr #$ff, Y0, lbl_AHL ); \
asm( brclr POUND ADC_LLMTIE, X:(R2 + #arch_sADC_offset_Control1Reg), clear_LLSR ); \
asm( move.l POUND >>device##LowLimit##_DispatchCallback, R4 ); \
asm( jsr CallBack ); \
asm(clear_LLSR: ); \
asm( move.w 0x00ff, X:(R2 + #arch_sADC_offset_LimitStatusReg) ); \
\
asm(lbl_AHL: ); \
asm( brclr POUND ADC_HLMTIE, X:(R2 + #arch_sADC_offset_Control1Reg), clear_HLSR ); \
asm( move.w Y1, Y0 ); \
asm( asrr.w #8, Y0 ); \
asm( beq endtest ); \
asm( move.l POUND >>device##HighLimit##_DispatchCallback, R4 ); \
asm( jsr CallBack ); \
asm(clear_HLSR: ); \
asm( move.w 0xff00, X:(R2 + #arch_sADC_offset_LimitStatusReg) ); \
asm( jmp endtest ); \
}
/* include user and default configuration */
#include "config.h"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -