仿真时,EVAIFRA显示有下溢中断和周期中断,IFR显示有INT2中断,但无法执行中断程序 void interrupt c_int2()。求高人指点~
主程序:
#include "GLOBAL.C"
void SystemInit();
void KickDog();
unsigned int num=0;
main()
{
SystemInit(); /*系统初始化*/
MCRA=MCRA & 0xFDFF;
MCRC=MCRC & 0xFDFF;
PFDATDIR=0x0200;//驱动芯片使能
PBDATDIR=0x0200;//输出IOPB1控制led闪烁
asm(" CLRC INTM ");
EVAIMRA=0x0080;//使能周期中断
EVAIFRA=0xFFFF;//清楚中断标志
GPTCONA=0x0000;
T1PR=1000;
T1CNT=0;
T1CON=0xd446;
while(1)
{
if(num>1000)
PBDATDIR=0x0202;//输出高电平led亮
if(num>2000)
{
num=0;
PBDATDIR=0x0200;//输出低电平led灭
}
}
}
void SystemInit()
{
asm(" SETC INTM "); /* 关闭总中断 */
asm(" CLRC SXM "); /* 禁止符号位扩展 */
asm(" CLRC CNF "); /* B0块映射为 on-chip DARAM*/
asm(" CLRC OVM "); /* 累加器结果正常溢出*/
SCSR1=0x02FC; /* 系统时钟CLKOUT=20*2=40M */
/* 打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M */
WDCR=0x006F; /* 禁止看门狗,看门狗时钟64分频 */
KickDog(); /* 初始化看门狗 */
IFR=0xFFFF; /* 清除中断标志 */
IMR=0x0002; /* 打开中断2*/
}
void interrupt c_int2()
{
T1CNT=0;
num++;
EVAIFRA=0x0080;
asm(" CLRC INTM ");
}
void KickDog() /*踢除看门狗 */
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}
CMD文件:(由于使用的开发板无外扩RAM,程序和数据均放在片内SARAM上,不知是否对中断有影响)
MEMORY
{
PAGE 0: VECS: origin = 0x8000, length 0x040
PAGE 0: PROG: origin = 0x8060, length 0x700
PAGE 1: B0 : origin = 0x200, length 0x100
PAGE 1: B1 : origin = 0x300, length 0x100
PAGE 1: B2 : origin = 0x060, length 0x020
PAGE 1: DATA: origin = 0x0F60, length 0x0A0
}
SECTIONS
{
.vectors : {} >VECS PAGE 0 /* 中断向量表 */
.text : {} >PROG PAGE 0 /* 可执行代码和字符串 */
.cinit : {} >PROG PAGE 0
.data : {} >DATA PAGE 1 /* 初始化变量和常数表 */
.bss : {} >DATA PAGE 1 /* 保留全局变量和静态变量空间 */
.const : {} >PROG PAGE 0 /* 字符串和switch表 */
.switch : {} >PROG PAGE 0 /* 包含.switch语句建立的表格 */
.stack : {} >DATA PAGE 1 /* 为系统堆栈分配存储器 */
.system : {} >DATA PAGE 1 /* 为动态存储器函数分配存储器空间 */
}
ASM文件:
;define.asm
.include "lf2407a.h"
.include "F2407REGS.H"
.global _c_int0,_c_int1,_c_int2
.global _IMR,_IFR
.global _SCSR1,_SCSR2,_XINT1CR,_XINT2CR
.global _WDCNTR,_WDKEY,_WDCR
.global _MCRA,_MCRB,_MCRC,_PADATDIR,_PBDATDIR,_PCDATDIR,_PEDATDIR,_PFDATDIR
.global _ADCTRL1,_ADCTRL2,_MAXCONV,_CHSELSEQ1,_CHSELSEQ2,_CHSELSEQ3,_CHSELSEQ4
.global _AUTO_SEQ_SR,_RESULT0,_RESULT1,_RESULT2,_RESULT8,_RESULT9
.global _CANMDER,_CANTCR,_CANRCR,_CANMCR,_CANBCR2,_CANBCR1,_CANESR,_CANGSR
.global _CANCEC,_CANIFR,_CANIMR,_CANLAM0H,_CANLAM0L
.global _CANID0L,_CANID0H,_CANCTRL0,_CANBX0A,_CANBX0B,_CANBX0C,_CANBX0D
.global _CANID1L,_CANID1H,_CANCTRL1,_CANBX1A,_CANBX1B,_CANBX1C,_CANBX1D
.global _CANID2L,_CANID2H,_CANCTRL2,_CANBX2A,_CANBX2B,_CANBX2C,_CANBX2D
.global _CANID3L,_CANID3H,_CANCTRL3,_CANBX3A,_CANBX3B,_CANBX3C,_CANBX3D
.global _CANID4L,_CANID4H,_CANCTRL4,_CANBX4A,_CANBX4B,_CANBX4C,_CANBX4D
.global _CANID5L,_CANID5H,_CANCTRL5,_CANBX5A,_CANBX5B,_CANBX5C,_CANBX5D
.global _SCICCR,_SCICTL1,_SCIHBAUD,_SCILBAUD,_SCICTL2,_SCIRXST,_SCIRXEMU,_SCIRXBUF,_SCITXBUF,_SCIPRI;
.global _GPTCONA,_T1CNT,_T1PR,_T1CON,_T2CNT,_T2PR,_T2CON
.global _EVAIMRA,_EVAIMRB,_EVAIFRA,_EVAIFRB,_PIVR
.global _GPTCONB,_T3CNT,_T3CMPR,_T3PR,_T3CON,_COMCONA,_ACTRA,_DBTCONA,_CMPR1,_EVBIMRA,_EVBIFRA
.global _WSGR
;建立中断向量表
.sect ".vectors"
RSVECT B _c_int0
INT1 B PHANTOM
INT2 B _c_int2
INT3 B PHANTOM
INT4 B PHANTOM
INT5 B PHANTOM
INT6 B PHANTOM
;中断子向量入口定义
.text
PHANTOM:
KICK_DOG
RET
.end
|