This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
【芯片型号】TMS320LF2406
【CCS版本】CCS V3.3
【问题描述】
使用定时器T1下溢中断,程序运行分为两种状态,停机和运行,上电后,能正常进入定时器下溢中断,当某次(随机)停止运行后,则无法再次进入定时器下溢中断。每次状态切换都需要执行下面描述的程序:
开始运行时,执行
MC_StopUninit( );
MC_RunInit( );
停止运行时,执行
MC_RunUninit( );
MC_StopUninit( );
具体函数见附件。
【备注】windows xp sp3
VOID MC_StopInit() { T1CNT=0; T1CON=0x0940; T1PR=0x04e2; // IO_AdcInit() ADCTRL1 = 0x4000; asm(" RPT #20"); asm(" NOP"); ADCTRL1 = 0x3F90 MAXCONV = 11; CHSELSEQ1 = 0x44DD; CHSELSEQ2 = 0xff77; CHSELSEQ3 = 0x2255 CHSELSEQ4 = 0xbbaa ADCTRL2 = 0x0300; GPTCONA = 0x0100; // IO_IrqInit(); asm(" SETC INTM"); EVBIMRA |= 0x01; // EVM_PDPINTB_ENABLE EVBIFRA = 0x01; EVAIMRA |= 0x01; // EVAIMRA_PDPINTA_ENABLE EVAIFRA = 0x01; EVAIMRA |= 0x200; // EVAIMRA_T1UNDERFLOW EVAIFRA = 0x200; IMR |= 0x03; // enable PDPINTA/B �� EVAIMRA_T1UNDERFLOW �ж� IFR = 0x03; asm(" CLRC INTM"); return; } VOID MC_StopUninit() { // EVM_T_STOP(1); T1CON = 0; // IO_IrqUninit(); asm(" SETC INTM"); EVAIMRA &= 0xfdffu; EVAIMRA &= 0xfffeu; EVBIMRA &= 0xfffeu; IMR &= 0xfffcu; asm(" CLRC INTM"); // IO_AdcUninit(); GPTCONA = 0; return; } VOID MC_RunInit() { ...... //IO_AdcInit(); ADCTRL1 = 0x4000; asm(" RPT #20"); asm(" NOP"); ADCTRL1 = 0x3F90 MAXCONV = 11; CHSELSEQ1 = 0x44DD; CHSELSEQ2 = 0xff77; CHSELSEQ3 = 0x2255 CHSELSEQ4 = 0xbbaa ADCTRL2 = 0x0300; GPTCONA = 0x0100; //IO_PwmInit(g_stIOPwm.usT1PRAim, g_stIOPwm.usT1PRAim >> 1, \ // TRUE, CONFIG_EVM_NORMAL_PWMSET); CMPR1 = 0x04e2>>1; CMPR2 = 0x04e2>>1; CMPR3 = 0x04e2>>1; ACTRA = 0x0999; T1CNT = 0u; T1CON = 2368u; T1PR = 0x04e2; COMCONA = 0x8200u; //IO_IrqInit(); asm(" SETC INTM"); EVBIMRA |= 0x01; // EVM_PDPINTB_ENABLE EVBIFRA = 0x01; EVAIMRA |= 0x01; // EVAIMRA_PDPINTA_ENABLE EVAIFRA = 0x01; EVAIMRA |= 0x200; // EVAIMRA_T1UNDERFLOW EVAIFRA = 0x200; IMR |= 0x03; // enable PDPINTA/B �� EVAIMRA_T1UNDERFLOW �ж� IFR = 0x03; asm(" CLRC INTM"); return; } VOID MC_RunUninit() { //IO_IrqUninit(); asm(" SETC INTM"); EVAIMRA &= 0xfdffu; EVAIMRA &= 0xfffeu; EVBIMRA &= 0xfffeu; IMR &= 0xfffcu; asm(" CLRC INTM"); //IO_PwmUninit(); COMCONA = 0x8000; T1CON = 0; //IO_AdcUninit(); GPTCONA = 0; return; }