📄 instisr.c
字号:
/*******************************************************************************
*
* Motorola Inc.
* (c) Copyright 2002 Motorola, Inc.
* ALL RIGHTS RESERVED.
*
* $Element: /project/dsp568_sdk/sdk/src/dsp56838evm/nos/config/instisr.c $
* $Author: saa $
* $Revision: /main/2 $ s
* $VOB: /project/dsp568_sdk $
* $OS: solaris $
*
* Description: SDK configurable ISRs prologs
*
* Notes:
*
******************************************************************************/
#include "port.h"
#include "bsp.h"
#include "arch.h"
#include "arch_off.h"
#include "timerdrv.h"
#include "mscan.h"
#include "scidrv.h"
#include "gpiodrv.h"
#define POUND #
extern void Dispatcher(void);
extern void Sci0Tx_DispatchCallback(void);
extern void Sci1Tx_DispatchCallback(void);
extern void Sci0Rx_DispatchCallback(void);
extern void Sci1Rx_DispatchCallback(void);
extern void Spi0ChipSelect_DispatchCallback(void);
extern void Spi0ChipDeselect_DispatchCallback(void);
extern void Spi0Rx_DispatchCallback(void);
extern void Spi0Tx_DispatchCallback(void);
extern void Spi1ChipSelect_DispatchCallback(void);
extern void Spi1ChipDeselect_DispatchCallback(void);
extern void Spi1Rx_DispatchCallback(void);
extern void Spi1Tx_DispatchCallback(void);
extern void ButtonAany_DispatchCallback(void);
extern void ButtonBany_DispatchCallback(void);
extern void Decoder0HomeWatchdog_DispatchCallback(void);
extern void Decoder0Index_DispatchCallback(void);
extern void PwmAReload_DispatchCallback(void);
extern void PwmBReload_DispatchCallback(void);
extern void PwmAFault_DispatchCallback(void);
extern void PwmBFault_DispatchCallback(void);
extern void AdcAComplete_DispatchCallback(void);
extern void AdcBComplete_DispatchCallback(void);
extern void AdcAZeroCrossing_DispatchCallback(void);
extern void AdcBZeroCrossing_DispatchCallback(void);
extern void AdcALowLimit_DispatchCallback(void);
extern void AdcBLowLimit_DispatchCallback(void);
extern void AdcAHighLimit_DispatchCallback(void);
extern void AdcBHighLimit_DispatchCallback(void);
enum not_arch_offsets
{
archoff_ButtonA = 0,
archoff_ButtonB = 0,
};
/*******************************************************************************************/
#define ArchInstallISR( num, CallBack, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
extern void CallBack(void); \
asm( alignsp ); \
asm( move.l R0, x:(SP)+ ); \
asm( move.l POUND >>##CallBack , R0 );\
asm( jmp Dispatcher ); \
}
#define ArchInstallFastISR( num, CallBack, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
extern void CallBack(void); \
asm( jmp CallBack ); \
}
#define ArchInstallSuperFastISR0( num, CallBack ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
extern void CallBack(void); \
asm( jmp CallBack ); \
}
#define ArchInstallSuperFastISR1( num, CallBack ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
extern void CallBack(void); \
asm( jmp CallBack ); \
}
#define ArchInstallCallback(device, type, CallBack ) \
static void device##type##_DispatchCallback(void) \
{ \
extern unsigned long CallBack(unsigned int * arch, unsigned long); \
asm( jmp CallBack ); \
}
#define ArchParameter(...) ;
/* Quadrature Timer ISR */
#define ArchInstallTimerISR( num, tmr, chnl, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
asm( brclr POUND QTB_TCFIE|QTB_TOFIE|QTB_IEFIE , X:(BSP_PERIPH_BASE + archoff_Timer##tmr##chnl##_StatusControlReg ), end ); \
asm( alignsp ); \
asm( move.l R2 , x:(SP)+ ); \
asm( move.l A10, x:(SP) ); \
asm( move.l POUND (BSP_PERIPH_BASE + archoff_Timer##tmr##chnl ), R2 ); \
asm( move.l #0 , A ); \
asm( brset POUND QTB_TCF_TCFIE , X:(BSP_PERIPH_BASE + archoff_Timer##tmr##chnl##_StatusControlReg ), lbl_TCF ); \
asm( brset POUND QTB_TOF_TOFIE , X:(BSP_PERIPH_BASE + archoff_Timer##tmr##chnl##_StatusControlReg ), lbl_TOF ); \
asm( brset POUND QTB_IEF_IEFIE , X:(BSP_PERIPH_BASE + archoff_Timer##tmr##chnl##_StatusControlReg ), lbl_IEF ); \
asm(endtmr: ); \
asm( move.l x:(SP)- , A ); \
asm( move.l x:(SP)- , R2 ); \
asm( move.l x:(SP)- , SP ); \
asm( nop ); \
asm( nop ); \
asm(end: ); \
asm( rti ); \
\
asm(lbl_TCF: ); \
asm( bfclr POUND QTB_TCF, X:(BSP_PERIPH_BASE + archoff_Timer##tmr##chnl##_StatusControlReg ) ); \
asm( jsr Timer##tmr##chnl##OnCompare##_DispatchCallback ); \
asm( jmp endtmr ); \
\
asm(lbl_TOF: ); \
asm( bfclr POUND QTB_TOF, X:(BSP_PERIPH_BASE + archoff_Timer##tmr##chnl##_StatusControlReg ) ); \
asm( jsr Timer##tmr##chnl##OnOverflow##_DispatchCallback ); \
asm( jmp endtmr ); \
\
asm(lbl_IEF: ); \
asm( bfclr POUND QTB_IEF, X:(BSP_PERIPH_BASE + archoff_Timer##tmr##chnl##_StatusControlReg ) ); \
asm( jsr Timer##tmr##chnl##OnInputEdge##_DispatchCallback ); \
asm( jmp endtmr ); \
\
asm(Timer##tmr##chnl##OnCompare##_DispatchCallback: ); \
asm( jsr POSIXtimerISR##tmr##chnl ); \
asm(Timer##tmr##chnl##OnOverflow##_DispatchCallback: ); \
asm(Timer##tmr##chnl##OnInputEdge##_DispatchCallback: ); \
asm( rts ); \
}
#define ArchInstallCallBackISR(device,num, type, CallBack, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
extern void CallBack(void); \
asm( alignsp); \
asm( move.l R2, X:(SP)+); \
asm( move.l R3, X:(SP)+); \
asm( move.l R4, X:(SP)); \
asm( move.l POUND >>##device##DeviceContext, R3 ); \
asm( move.l POUND (BSP_PERIPH_BASE + archoff_##device), R2 ); \
asm( move.l POUND >>##device##type##_DispatchCallback, R4 ); \
asm( jsr CallBack); \
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( rti); \
};
#define ArchInstall2CallBackISR(device,num, type1, type2, CallBack, prio ) \
void SDK_Interrupt##num(void); \
void SDK_Interrupt##num(void) \
{ \
extern void CallBack(void); \
asm( adda #2,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)); \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -