4.CPU定时器中断示例
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
// Prototype statements for functions found within this file.
interrupt void cpu_timer0_isr(void);
//interrupt void cpu_timer1_isr(void);
//interrupt void cpu_timer2_isr(void);
//#define mem (*(unsigned short int *)0x200000)#define LED (*(unsigned short int *)0x180000)#define startCpuTimer0() CpuTimer0Regs.TCR.bit.TSS=0
int i=0,ncount;
unsigned int uLBD;
void main(void)
{
// Step 1. Initialize System Control:
InitSysCtrl();
// Step 2. Initalize GPIO:
InitXintf16Gpio(); //zq
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT0 = &cpu_timer0_isr;
//PieVectTable.XINT13 = &cpu_timer1_isr;
//PieVectTable.TINT2 = &cpu_timer2_isr;
EDIS;
// Step 4. Initialize the Device Peripheral. This function can be
InitCpuTimers(); // For this example, only initialize the Cpu Timers#if (CPU_FRQ_150MHZ)
ConfigCpuTimer(&CpuTimer0, 150, 1000000);
//ConfigCpuTimer(&CpuTimer1, 150, 1000000);
//ConfigCpuTimer(&CpuTimer2, 150, 1000000);#endif#if (CPU_FRQ_100MHZ)
ConfigCpuTimer(&CpuTimer0, 100, 1000000);
//ConfigCpuTimer(&CpuTimer1, 100, 1000000);
//ConfigCpuTimer(&CpuTimer2, 100, 1000000);#endif
//CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
//CpuTimer1Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
//CpuTimer2Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
// Step 5. User specific code, enable interrupts:
CpuTimer0Regs.PRD.all=0xffff;
CpuTimer0Regs.TPR.all=0;
CpuTimer0Regs.TIM.all=0;
CpuTimer0Regs.TPRH.all=0;
CpuTimer0Regs.TCR.bit.TSS=1;
CpuTimer0Regs.TCR.bit.SOFT=1;
CpuTimer0Regs.TCR.bit.FREE=1;
CpuTimer0Regs.TCR.bit.TRB=1;
CpuTimer0Regs.TCR.bit.TIE=1;
CpuTimer0.InterruptCount=0;
startCpuTimer0();
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// Step 6. IDLE loop. Just sit and loop forever (optional):
while(1);
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
CpuTimer0Regs.TCR.bit.TIF=1;
CpuTimer0Regs.TCR.bit.TRB=1;
if(ncount==0)
{ LED=uLBD;
uLBD++;uLBD%=16;
}
ncount++;ncount%=194;
}