您好...
我正在尝试执行单次转换序列、并且必须在设置方面缺少一些内容...我正在使用用户指南中的流程图、MSC 位= 1且 SHP 位= 1 ...
我使用 P5.1 (TB2.2)作为启动序列的选通脉冲。 采样通道(A4-A0)。 请注意、我没有将 A0转换为模拟通道、因为它当前用于调试。
我配置硬件(I/O、AD、Timer2)。 然后我等待...我似乎从未进入 AD ISR。 有人能告诉我我我缺少了什么吗? (我认为我不需要做 ADCSC、因为我认为 TB2.2会这样做)
设置代码:
void configMultiTimer (unsigned int p) { TB2R = 0; TB2CTL |= TBSSEL_ACLK; TB2CCR0 = p; TB2CCR1 = p - 6; TB2CCR2 = p - 2;//每个数据表需要100us /* *用于无线电发射周期 * TB2CCTL0 &=~CCIFG; TB2CCTL0 |= CCIE; /* *用于 a/d 和参考设置 * TB2CCTL1 &=~CCIFG; TB2CCTL1 |= CCIE; TB2CTL |= MC__UP; } void configAD (void) { P1SEL0 |= BIT1 | BIT2 | BIT3 | BIT4;P1SEL1 |= BIT1 | BIT2 | BIT3 | BIT4; P5SEL0 |= BIT1;//设置 TB2.2在 A/D 的单通道序列上采样 ADCCTL0 |= ADCMSC; ADCCTL1 |= ADCSHP | ADCCONSEQ1 | ADCSHS_3; ADCCTL2 &=~ADCRES;//设置为12位 ADCCTL2 |= ADCRES_2; ADCMCTL0 |= ADCSREF_1 | ADCINCH_4; ADCIFG &=~ADCIFG0; ADCIE |= ADCIE0; } void turnOffAD (void) { ADCIFG &=~ADCIFG0; PMMCTL0_H = PMMPW_H; PMMCTL2 &=~INTREFEN; ADCCTL0 &=~ADCON; } void turnOnAD (void) { PMMCTL0_H = PMMPW_H; PMMCTL2 |= INTREFEN | REFVSEL_2; ADCCTL0 |= ADCON; while (!(PMMCTL2 & REFGENRDY)); }
ISR 代码:
#pragma vector=TIMER2_B1_VECTOR __INTERRUPT void T2_ADSetup_ISR (void) { 开关(__evo_in_range (TB2IV、TBIV_TBCCR1)) { 案例 TBIV_none: 中断; 案例 TBIV_TBCCR1://power A/D -参考 if (!flags.joinSwitchFlag) { TurnOnAD(); ADCCTL0 |= ADCENC; } 中断; 默认值: 中断; } LPM3_EXIT; } #pragma vector=ADC_vector __interrupt void 热电偶(void) { switch (__evo_in_range (ADCIV、ADCIV_ADCIFG)) { ADCIV_ADCIFG 案例: *pResult = ADCMEM0;//读取清除 IFG pResult++; 如果(pResult >(AD + 4)) { flags.adFlag = T; LPM3_EXIT; } 中断; 默认值: 中断; } }
我进入 TB1.1 IRQ 以启用基准和 A/D
谢谢