📄 c6xinterrupts.h
字号:
//C6xinterrupts.c Provided by TI
#define DSPINT 0x0 /* 00000b DSPINT Host port host to DSP interrupt */
#define TINT0 0x1 /* 00001b TINT0 Timer 0 interrupt */
#define TINT1 0x2 /* 00010b TINT1 Timer 1 interrupt */
#define SD_INT 0x3 /* 00011b SD_INT EMIF SDRAM timer interrupt */
#define EXT_INT4 0x4 /* 00100b EXT_INT4 External interrupt 4 */
#define EXT_INT5 0x5 /* 00101b EXT_INT5 External interrupt 5 */
#define EXT_INT6 0x6 /* 00110b EXT_INT6 External interrupt 6 */
#define EXT_INT7 0x7 /* 00111b EXT_INT7 External interrupt 7 */
#define EDMA_INT 0x8 /* 01000b EDMA_INT EDMA channel (0 through 15) interrupt */
#define XINT0 0xC /* 01100b XINT0 McBSP 0 transmit interrupt */
#define RINT0 0xD /* 01101b RINT0 McBSP 0 receive interrupt */
#define XINT1 0xE /* 01110b XINT1 McBSP 1 transmit interrupt */
#define RINT1 0xF /* 01111b RINT1 McBSP 1 receive interrupt */
/*********************************************************
* Interrupt Initialization Functions
*
* (CSR and IER are CPU registers defined in c6x.h)
*
*********************************************************/
/* Enable Interrupts Globally (set GIE bit in CSR = 1) */
void enableGlobalINT(void)
{
CSR |= 0x1;
}
/* Enable NMI (non-maskable interrupt); must be enabled
* or no other interrupts can be recognized by 'C6000 CPU */
void enableNMI(void)
{
IER = _set(IER, 1, 1);
}
/* Enable a specific interrupt;
* (INTnumber = {4,5,6,...,15}) */
void enableSpecificINT(int INTnumber)
{
IER = _set(IER, INTnumber, INTnumber);
}
/*********************************************************
* C6000 devices have hardware configurable interrupts.
* To use the McBSP interrupts you must configure them since
* they are selected by default.
* You must set the appropriate interrupt select bits in the
* IML and IMH memory-mapped int select registers.
* IML and IMH addresses are defined in c6211dsk.h.
*********************************************************/
void config_Interrupt_Selector(int INTnumber, int INTsource)
{
/* INTnumber = {4,5,6,...,15}
INTsource = see #define list above
*/
union
{
struct
{ unsigned int INTSEL4 : 5;
unsigned int INTSEL5 : 5;
unsigned int INTSEL6 : 5;
unsigned int rsvbit15 : 1;
unsigned int INTSEL7 : 5;
unsigned int INTSEL8 : 5;
unsigned int INTSEL9 : 5;
unsigned int rsvbit31 : 1;
}exp;
unsigned int reg;
}IMLvalue; /* = {0,0,0,0,0,0,0,0}; */
union
{
unsigned int reg;
struct
{ unsigned int INTSEL10 : 5;
unsigned int INTSEL11 : 5;
unsigned int INTSEL12 : 5;
unsigned int rsvbit15 : 1;
unsigned int INTSEL13 : 5;
unsigned int INTSEL14 : 5;
unsigned int INTSEL15 : 5;
unsigned int rsvbit31 : 1;
}exp;
}IMHvalue;
IMLvalue.reg = *(unsigned volatile int *)IML;
IMHvalue.reg = *(unsigned volatile int *)IMH;
switch (INTnumber)
{
case 4 :
IMLvalue.exp.INTSEL4 = INTsource;
break;
case 5 :
IMLvalue.exp.INTSEL5 = INTsource;
break;
case 6 :
IMLvalue.exp.INTSEL6 = INTsource;
break;
case 7 :
IMLvalue.exp.INTSEL7 = INTsource;
break;
case 8 :
IMLvalue.exp.INTSEL8 = INTsource;
break;
case 9 :
IMLvalue.exp.INTSEL9 = INTsource;
break;
case 10 :
IMHvalue.exp.INTSEL10 = INTsource;
break;
case 11 :
IMHvalue.exp.INTSEL11 = INTsource;
break;
case 12 :
IMHvalue.exp.INTSEL12 = INTsource;
break;
case 13 :
IMHvalue.exp.INTSEL13 = INTsource;
break;
case 14 :
IMHvalue.exp.INTSEL14 = INTsource;
break;
case 15 :
IMHvalue.exp.INTSEL15 = INTsource;
break;
default : break;
}
*(unsigned volatile int *)IML = IMLvalue.reg;
*(unsigned volatile int *)IMH = IMHvalue.reg;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -