关于定时器中断的问题
#include \"f2407regs.h\"
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
#define uint unsigned int
void main(void)
{
asm(\" setc INTM \"
;
asm (\" clrc CNF \"
; /*映射数据存储空间*/
asm (\" clrc OVM \"
; /*累加器中结果正常溢出*/
asm (\" setc SXM \"); /*抑制符号扩展*/
*SCSR1 = 0x0001; /*clkout输出CPU时钟,进入IDLE1低功耗模式
不倍频,关断ADC,无效地址复位*/
*WDCR = 0X0E8; /*WDOVERRIDE默认为1,禁止看门狗*/
*IMR = 0X0004;
*IFR = 0Xffff; /*清除所有中断标志*/
*T1CON = 0X974c; /*0001011000001100,t1连续增计数,64分频,内部时钟*/
*T1CNT = 0X00;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4000;
*PFDATDIR = *PFDATDIR & 0xffbf;
asm(\" clrc INTM \");
while(1)
{
;
}
}
void interrupt T1INT()
{volatile int flag,i;
*T1CNT = 0X00;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
asm(\" setc INTM \");
flag = *EVAIFRA & 0X0400;
if (flag != 0x0400)
{
asm(\" clrc INTM \");
return;
}
*EVAIFRA = *EVAIFRA | 0Xffff; /*清定时器1上溢中断标志*/
i++;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
if(i==7)
{i=0;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
}
}
void interrupt nothing()
{
return;
}
以下是中断向量程序:
.title \"vectors.asm\"
.ref _c_int0,_nothing,_T1INT
.sect \".vectors\"
rsvect: B _c_int0
INT1: B _nothing
INT2: B _T1INT
INT3: B _nothing
INT4: B _nothing
INT5: B _nothing
INT6: B _nothing
为什么实现不了呢?我试了,MAIN中没什么问题,就是好像不进中断,在就是请大虾看看我在中断中的FOR语句延时1S那么写对吧?
谢谢
你的主程序中EVAIFRA,EVAIMRA
没有初始化。
初始化为
*EVAIFRA = 0X0400;
*EVAIMRA = 0X0400;
我在中断中设置断点发现根本就没进中断啊?
好像我根本就没启动定时器
感觉你SCSR1设置有问题,你没有使能EVA CLKEN模块时钟。
现在可以确定时钟动了,但就是不进中断,周期还在循环