请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 ();
}