|
环境EWARM5.5。
我仿真的一段定时中断,模拟运行时发现T0TC始终为0,且无法进入中断,希望能得到有识之士的帮助。
代码
void Time0Init(void)
{
/* Fcclk = Fosc*4 = 16MHz*4 = 64MHz
Fpclk = Fcclk/4 = 64MHz/4 = 16MHz
*/
T0PR = 99; // 设置定时器0分频为100分频,得160000Hz
T0MCR = 0x03; // 匹配通道0匹配中断并复位T0TC
T0MR0 = 110592/2; // 比较值(1秒定时值) ###100us
T0TCR = 0x03; // 启动并复位T0TC
T0TCR = 0x01;
/* 设置定时器0中断IRQ */
VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断
VICVectCntl1 = 0x24; // 定时器0中断通道分配最高优先级(向量控制器0)
VICVectAddr1 = (unsigned long)IRQ_Time0; // 设置中断服务程序地址向量
VICIntEnable = 0x00000010; // 使能定时器0,1 串口0,1中断
VICIntEnable = (1 << 0x04); // 使能定时器0中断
}
/*************定时器0中断程序****************/
__irq __arm void IRQ_Time0(void)
{
//IRQ_TASK0();
T0IR = 0x01; // 清除中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
int main(void)
{
//Init_VPB_PLL();
IO0DIR=0x0000ff00; //配置P0.8-P0.15为输出
IO0SET=0x0000ff00; //配置P0.8-P0.15初始值为高
Time0Init(); //初始化定时器0
while(1); //等待进入中断程序
}
运行后定时器的值如下
(原文件名:捕获.PNG) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|