📄 evtimer.c
字号:
////////////
#include "DSP28_Device.h"
unsigned int *LedADDR = (unsigned int *)0x2002; //LED 控制寄存器
unsigned int Flag;
const Uint16 LedCode[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};
// Prototype statements for functions found within this file.
interrupt void eva_timer1_isr(void);
interrupt void eva_timer2_isr(void);
interrupt void evb_timer3_isr(void);
interrupt void evb_timer4_isr(void);
// Global counts used in this example
Uint32 EvaTimer1InterruptCount;
Uint32 EvaTimer2InterruptCount;
Uint32 EvbTimer3InterruptCount;
Uint32 EvbTimer4InterruptCount;
Uint16 LedCount = 0;
void main(void)
{
InitSysCtrl(); //初始化系统
DINT; //关中断
IER = 0x0000;
IFR = 0x0000;
Flag = 0;
InitPieCtrl(); //初始化PIE
InitPieVectTable(); //初始化PIE中断矢量表
InitPeripherals(); //初始化外设
InitGpio(); //初始化GPIO
InitXIntrupt(); //初始化外部中断
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.T1PINT = &eva_timer1_isr; //中断主体地址从新定位
PieVectTable.T2PINT = &eva_timer2_isr;
PieVectTable.T3PINT = &evb_timer3_isr;
PieVectTable.T4PINT = &evb_timer4_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
PieCtrl.PIEIER2.all = M_INT4;// Enable PIE group 2 interrupt 4 for T1PINT
PieCtrl.PIEIER3.all = M_INT1;// Enable PIE group 3 interrupt 1 for T2PINT
PieCtrl.PIEIER4.all = M_INT4;// Enable PIE group 4 interrupt 4 for T3PINT
PieCtrl.PIEIER5.all = M_INT1;// Enable PIE group 5 interrupt 1 for T4PINT
IER |= (M_INT2 | M_INT3 | M_INT4 | M_INT5);// Enable CPU INT2(T1PINT), INT3(T2PINT), INT4(T3PINT) and INT5(T4PINT)
EINT; // Enable INTM
ERTM; // Enable DBGM
while (1); //wait
}
interrupt void eva_timer1_isr(void)
{
EvaTimer1InterruptCount++;
EvaRegs.EVAIMRA.bit.T1PINT = 1; // Enable more interrupts from this timer
// Note: To be safe, use a mask value to write to the entire EVAIFRA register.
// Writing to one bit will cause a read-modify-write operation that may have
// the result of writing 1's to clear bits other then those intended.
EvaRegs.EVAIFRA.all = BIT7;
// Acknowledge interrupt to recieve more interrupts from PIE group 2
PieCtrl.PIEACK.all = PIEACK_GROUP2;
if(Flag == 1)
{
*LedADDR = 0x55;
Flag = 0;
}
else
{
*LedADDR = 0xAA;
Flag = 1;
}
}
interrupt void eva_timer2_isr(void)
{
EvaTimer2InterruptCount++;
// Enable more interrupts from this timer
EvaRegs.EVAIMRB.bit.T2PINT = 1;
// Note: To be safe, use a mask value to write to the entire EVAIFRB register.
// Writing to one bit will cause a read-modify-write operation that may have
// the result of writing 1's to clear bits other then those intended.
EvaRegs.EVAIFRB.all = BIT0;
// Acknowledge interrupt to recieve more interrupts from PIE group 3
PieCtrl.PIEACK.all = PIEACK_GROUP3;
}
interrupt void evb_timer3_isr(void)
{
EvbTimer3InterruptCount++;
// Note: To be safe, use a mask value to write to the entire EVBIFRA register.
// Writing to one bit will cause a read-modify-write operation that may have
//the result of writing 1's to clear bits other then those intended.
EvbRegs.EVBIFRA.all = BIT7;
// Acknowledge interrupt to recieve more interrupts from PIE group 4
PieCtrl.PIEACK.all = PIEACK_GROUP4;
}
interrupt void evb_timer4_isr(void)
{
EvbTimer4InterruptCount++;
// Note: To be safe, use a mask value to write to the entire EVBIFRB register.
// Writing to one bit will cause a read-modify-write operation that may have
// the result of writing 1's to clear bits other then those intended.
EvbRegs.EVBIFRB.all = BIT0;
// Acknowledge interrupt to recieve more interrupts from PIE group 5
PieCtrl.PIEACK.all = PIEACK_GROUP5;
}
void Delay(Uint16 data)
{
Uint16 i;
for (i=0;i<data;i++)
{ ; }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -