msp430中断嵌套问题

2019-03-24 14:17发布

main()
{
  WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
  P5DIR |= 0xff; //设P1.0 为输出
  CCTL0 = CCIE; //CCR0开中断允许
  CCR0 = 1000-1; //向CCR0捕获/比较寄存器装入初值,用于比较
  TACTL = TASSEL_1 + MC_1; //选ACLK为定时器A时钟源, 增计数模式
  P6SEL = 0x0F; // 打开A0-A3 A/D通道输入
  P5DIR=0XFF;
  ADC12CTL0 = ADC12ON+MSC+SHT0_10; //开ADC12模块+采样信号由SHI仅首次触发
  //+采集定时器分频系数n=64,
  ADC12CTL1 = SHP+CONSEQ_3; // 使用采样定时器输出作采集/转换信号SAMPCON
  // 重复序列采样模式
  ADC12MCTL0 = INCH_0; // 参考电压ref+=AVcc, 输入通道选择为A0
  ADC12MCTL1 = INCH_1; // 参考电压ref+=AVcc, 输入通道选择为A1
  ADC12MCTL2 = INCH_2; // 参考电压ref+=AVcc, 输入通道选择为A2
  ADC12MCTL3 = INCH_3+EOS; // 参考电压ref+=AVcc, 输入通道选择为A3
  //+由此通道产生序列结束控制位
  ADC12IE = 0x08; // A3通道开中断ADC12IFG.3
  ADC12CTL0 |= ENC; // 允许转换
  ADC12CTL0 |= ADC12SC; // 启动转换
  _EINT();
}
// Timer A0中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P5OUT ^= 0x05; //反转P1.0
} #pragma vector=ADC_VECTOR //ADC中断服务程序
__interrupt void ADC12ISR (void)
{
  _EINT();
  static unsigned int index = 0; //中断服务程序中的静态变量
  A0results[index] = ADC12MEM0; //移动A0结果往数组,此操作的同时清除ADC12FIG.0
  A1results[index] = ADC12MEM1; //移动A1结果往数组,此操作的同时清除ADC12FIG.1
  A2results[index] = ADC12MEM2; //移动A2结果往数组,此操作的同时清除ADC12FIG.2
  A3results[index] = ADC12MEM3; //移动A3结果往局数组,此操作的同时清除ADC12FIG.3
} 中断嵌套不了。想实现的功能是定时器是不断的中断的,ad也是不断中断的 此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章