chenkaijiang200 该用户已被删除
|
高人们,帮我看看吧,为什么没有产生中断:
main.c文件:
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
unsigned int time,count=0;
//time为小轮一圈的时间1表示0.0013653s 一圈4cm
unsigned int lasttime=0,thistime;
//lasttime为上次的计数器值,thistime为此次的计数器值
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 51 TIME4_ISR(void);
void interrupt 47 TIMEOF_ISR(void);
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 51 TIME4_ISR(void)
{
TFLG1_C4F = 1 ; //清中断标志位
//EnableInterrupts;
thistime=TC4;
time=count*4096+(thistime-lasttime)/16;
count=0;
/*if(thistime>lasttime)
time=thistime-lasttime;
else
time=0xffff-lasttime+thistime;
*/
//lasttime=thistime;
}
void interrupt 47 TIMEOF_ISR(void)
{
TFLG2_TOF = 1; //清定时器溢出标志位
count++;
}
void main()
{
PWMPOL=0XFF; //设置PWM脉冲以上升延开始
PWMCLK=0X20; //设置CLOCK SA作为PWM的时钟源
PWMPRCLK=0x04; //设置CLOCK A频率为bus clock/128
PWMCAE=0;
PWMSCLA=0x05; //设置CLOCK SA的频率
PWMSCLB=0;
PWMCTL=0;
PWMCNT5=0;
PWMPER5=0XFF; //设置PWM周期
PWMDTY5=0X7f; //设置PWM占空比
PWME=0XFF;
PWME_PWME5=1;
EnableInterrupts;
TIOS=0X00;
TSCR2=0X90;//
TCTL3=0X01;
TIE=0X10;//ENABLE INTERRUPT
DDRA=0x00;
while(1)
{
//PORTA=time;
}
}
prm文件:
/* This is a linker parameter file for the MC9S12DG128 */
NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */
SEGMENTS /* here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
RAM = READ_WRITE 0x0400 TO 0x1FFF;
/* unbanked FLASH ROM */
ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;
/* banked FLASH ROM */
PAGE_38 = READ_ONLY 0x388000 TO 0x38BFFF;
PAGE_39 = READ_ONLY 0x398000 TO 0x39BFFF;
PAGE_3A = READ_ONLY 0x3A8000 TO 0x3ABFFF;
PAGE_3B = READ_ONLY 0x3B8000 TO 0x3BBFFF;
PAGE_3C = READ_ONLY 0x3C8000 TO 0x3CBFFF;
PAGE_3D = READ_ONLY 0x3D8000 TO 0x3DBFFF;
/* PAGE_3E = READ_ONLY 0x3E8000 TO 0x3EBFFF; not used: equivalent to ROM_4000 */
/* PAGE_3F = READ_ONLY 0x3F8000 TO 0x3FBFFF; not used: equivalent to ROM_C000 */
END
PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
//.ostext, /* OSEK */
NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000/*, ROM_4000*/;
DEFAULT_ROM INTO PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;
//.stackstart, /* eventually used for OSEK kernel awareness: Main-Stack Start */
SSTACK, /* allocate stack first to avoid overwriting variables on overflow */
//.stackend, /* eventually used for OSEK kernel awareness: Main-Stack End */
DEFAULT_RAM INTO RAM;
//.vectors INTO OSVECTORS; /* OSEK */
END
ENTRIES /* keep the following unreferenced variables */
/* OSEK: always allocate the vector table and all dependent objects */
//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart
END
STACKSIZE 0x100
VECTOR 0_Startup /* reset vector: this is the default entry point for a C/C++ application. */
//VECTOR 0 Entry /* reset vector: this is the default entry point for an Assembly application. */
//INIT Entry /* for assembly applications: that this is as well the initialization entry point */
//
VECTOR ADDRESS 0XFFDE TIMEOF_ISR
VECTOR ADDRESS 0XFFE6 TIME4_ISR
先谢过了啊! |
|