ARM7定时器的问题
请教大侠们一个ARM7定时器的问题:
源程序如下
#include "config.h"
#define BEEP 1 < < 7 /* P0.7控制BEEP,低电平蜂鸣 */
/*
*********************************************************************************************************
** 函数名称 :IRQ_Timer0()
** 函数功能 :定时器0中断服务程序,取反LED9控制口。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_Timer0 (void)
{
if ((IO0SET & BEEP) == 0)
IO0SET = BEEP; /* 关闭BEEP */
else
IO0CLR = BEEP;
T0IR = 0x01; /* 清除中断标志 */
VICVectAddr = 0x00; /* 通知VIC中断处理结束 */
}
/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :使用定时器实现1秒钟定时,控制LED9闪烁。中断方式。
** 调试说明 :需要将跳线JP11连接BEEP。
*********************************************************************************************************
*/
int main (void)
{
PINSEL1 = 0x00000000; /* 设置管脚连接GPIO */
IO0DIR = BEEP; /* 设置BEEP控制口输出 */
IRQEnable(); /* IRQ中断使能 */
/* 定时器0初始化 */
T0TC = 0; /* 定时器设置为0 */
T0PR = 0; /* 时钟不分频 */
T0MCR = 0x03; /* 设置T0MR0匹配后复位T0TC,并产生中断标志 */
T0MR0 = Fpclk / 2; /* 0.5秒钟定时 */
T0TCR = 0x01; /* 启动定时器 */
/* 设置定时器0中断IRQ */
VICIntSelect = 0x00; /* 所有中断通道设置为IRQ中断 */
VICVectCntl0 = 0x20 | 0x04; /* 设置定时器0中断通道分配最高优先级 */
VICVectAddr0 = (uint32)IRQ_Timer0; /* 设置中断服务程序地址 */
VICIntEnable = 1 < < 0x04; /* 使能定时器0中断 */
while (1);
return 0;
}
我试着把while(1)语句屏蔽了,程序仍能实现功能“蜂鸣器每秒蜂鸣一次”,不知是怎么回事?
发表时间:2007年7月14日14:20:32