请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2533 您好,TI 员工
我 ,的是 FR2533‘s ADC,、我希望使用具有计时器 B 触发器的单序列通道模式
但 问题是:
1) 1) FR2X/4X 系列 MCU 仅具有一个 ADC 转换结果存储器,、 不支持 DMA、
这意味着 μ,在 通道模式序列中,ADC 转换完成后,每次 ADCIFG 被置位时都将进入 ADC ISR
2),Timer B 触发 ADC 时、根据 UG、ADCENC 必须在序列 μ s 之间切换、因此何时应切换 ADCENC。
我的代码如下所示:
例程执行后,结果似乎是错误的,数组中 ADC 结果的顺序不正确,我该怎么做?
/* @由 SS 供电 @Author kissn Liu @date 2017-12-8 @fution:ADC 多通道样本使用 TA1触发器; */ #include "msp430fr2533.h" /* A7-ADC_Result [7] 。 。 。 A0-ADC_Result[0] * / unsigned char ADC_Result[8]={0}; void init_ADC_Using_TA1_TRIGGER () { //配置 ADC A0~7引脚 SYSCFG2 = ADCPCTL0 | ADCPCTL1 | ADCPCTL2 | ADCPCTL3 | ADCPCTL4 | ADCPCTL6 | ADCPCTL5 | ADCPCTL5 //配置 ADC //更改 ADCSHTx 位以更改采样时间 ADCCTL0 |= ADCSHT_2 | ADCMSC | ADCON; // ADCCTL1上的16ADCclks、MSC、ADC |= ADCSHS_2 | ADCSHP | ADCCONSEQ_1 | ADCSSEL_0; // ADC 时钟 MODCLK、采样计时器、TA1 TRIG、单序列 ADCCTL2 &=~ADCRES; // 8位转换结果 ADCMCTL0 |= ADCINCH_7 | ADCSREF_0; // A0~7 (EOS);Vref=Vcc ADCIE |= ADCIE0; //启用 ADC 转换完成中断 ADCCTL0 |= ADCENC; // ADC 使能 TA1CCR0 = 33; TA1CCR1 = 16; //TA1CCTL0 =(CCIE);//启用 CCIFG TA1CCTL1 = OUTMOD_7;//PWM 输出模式:7 -复位/设置 TA1CTL =(tassel_ACLK | MC_UP); _bis_SR_register (GIE); //输入带中断 的 LPM3 } void main() { WDTCTL = WDTPW | WDTHOLD; //停止 WDT //禁用 GPIO 上电默认高阻抗模式以激活 //先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; init_adc_using_TA1_TRIGGER (); while (1) { } } // ADC 中断服务例程 #pragma vector=ADC_vector __interrupt void ADC_ISR (void) { static char i = 7; switch (__even_in_range (ADCIV、ADCIV_ADCIFG) ){ case ADCIV_none: 中断; ADCIV_ADCOVIFG 案例: 中断; 案例 ADCIV_ADCTOVIFG: 中断; ADCIV_ADCHIIFG 案例: 中断; ADCIV_ADCLOIFG 案例: 中断; ADCIV_ADCINIFG 案例: 中断; ADCIV_ADCIFG 案例: /* 当 ADCSC 触发一个序列时、连续的序列可由 ADCSC 位触发。 当使用任何其他触发源时、必须在每个序列之间切换 ADCENC。 !!!ADC12ENC 必须在序列之间切换 * ADCCTL0 &=~ADCENC; ADC_RESULSE[i]= ADCMEM0; if (i ==0) { I = 7; __no_operation(); } 其他 { i--; } ADCCTL0 |= ADCENC; 中断; 默认值: break; } #pragma vector=Timer1_A0_vector __interrupt void Timer1_A0 (void) { __no_operation (); }