常驻嘉宾
- 积分
- 4494
- 威望
- 2681
- 贡献
- 921
- 兑换币
- 241
- 注册时间
- 2012-2-4
- 在线时间
- 446 小时
|
今天编了一个程序,发现自己的程序进不了中断,于是就把AD_Init()给注释了,结果发现可以进入中断了,这是怎么回事啊?
下面是个例子程序,注释不一定准确,
void PITset(void)
{
//ATD0CTL2=0X00;//禁止AD,也可不禁止
PITCFLMT|=0X00;//PIT模块禁止
//PITCFLMT|=0X03;//PIT模块禁止,对应的加载寄存器中的值被加载到微计数器中
//PITFLT|=0X0F;//对应的加载寄存器中的值被加载到16位定时倒数计数器中
PITCE|=0X01;//PIT0允许
PITMUX=0X00;//相应的16位定时器与微定时器时基0连接
PITMTLD0=106;
PITLD0=60000-1;//(0XF4+1)*(0XFFFF+1)/48M=1/3s
PITCFLMT|=0X80;//PIT模块允许
PITTF=0X01;//清通道0溢出标志,加载新的计时时间
PITINTE|=0X01;//0通道中断使能
}
//-----ATD初始化程序--------//
void AD_Init(void)
{
ATD0CTL1=0x40; //选择AD通道为外部触发,12位精度,采样前不放电
ATD0CTL2=0x42; //标志位自动清零,禁止外部触发
ATD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, NoFIFO,Freeze模式下继续转
ATD0CTL4=0x01; //采样时间为4个AD时钟周期,PRS=1,ATDClock=2MHz
ATD0CTL5=0x30; //特殊通道禁止,连续转换,多通道转换,起始通道为0转换4个通道
ATD0DIEN=0x00; //禁止数字输入
}
void DeviceInit()
{
SetBusCLK_64M();
UART_Init();
}
void main(void)
{
DeviceInit();
uart_putstr("Usart Is Working!");
//AD_Init();
PITset();
PAInit();
DDRB=0xff;
PORTB=0xff;
PWM_Init();
EnableInterrupts;
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED //定时器中断
void interrupt 66 second(void)
{
//DisableInterrupts;
// PITTF=0X01;//清通道0溢出标志,加载新的计时时间
//PACTL=0X00;//脉冲累加器禁止
PORTB=~PORTB;
AD_Init();
g_lCarspeed=PACNT;
PACNT=0x0000;
//EnableInterrupts;
PITTF=0X01;
}
是不是中断优先级原因啊?求指教
|
|