主题中讨论的其他器件: MSP430FR2355
工具/软件:Code Composer Studio
大家好、
我正在使用 MSP430FR2155控制器、在此我想使用 ADC A0-A6通道。 我正在尝试访问这些频道、但反复获取一个频道、因此请帮助我单独获取所有频道。
谢谢、
Sandhya Yadav
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
大家好、
我正在使用 MSP430FR2155控制器、在此我想使用 ADC A0-A6通道。 我正在尝试访问这些频道、但反复获取一个频道、因此请帮助我单独获取所有频道。
谢谢、
Sandhya Yadav
你好,Sandhya
让我们与另一个主题讨论这个问题。 https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/813229
此致
Gary
大家好、
我想在没有 ADC 中断的情况下逐一访问 ADC 的7个通道。 我该怎么做? 我已经参考了下面的代码、但希望使用计时器中断而不是 ADC 中断。
*--/版权--*/
//
// MSP430FR235x 演示- ADC、样片 A2/A1/A0、内部2V 参考
//
//说明:此示例在通道序列模式下工作。
// A2/A1/A0以2V 为基准对16ADCclks 进行采样。
//内部振荡器乘以采样(16x)和转换(13x)。
//在 ADC_ISR A2/A1/A0内将采样值放入数组 ADC_Result [3]。
// ACLK =默认 REFO ~32768Hz、MCLK = SMCLK =默认 DCODIV ~1MHz。
//
//
// MSP430FR2355
//------------
///|\||
//|||
//-|RST |
//||
//>--|P1.2/A2 |
//>--|P1.1/A1 |
//>--|P1.0/A0 |
//
//
//现金 Hao
// Texas Instruments Inc.
// 2016年11月
//使用 IAR Embedded Workbench v6.50.0和 Code Composer Studio v6.2.0构建
//
#include
unsigned int adc_result[3];// 12位 ADC 转换结果数组
unsigned char i;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
//配置 ADC A1~2引脚
P1SEL0 |= BIT1 + BIT2;
P1SEL1 |= BIT1 + BIT2;
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//配置 ADC
ADCCTL0 |= ADCSHT_2 | ADCMSC | ADCON;// 16ADCclks、MSC、ADC 打开
ADCCTL1 |= ADCSHP | ADCCONSEQ_1 | ADCSSEL_1;// ADC 时钟 ACLK、采样计时器、s/w 三态、单序列
ADCCTL2 &=~ADCRES;//清除 ADCCTL 中的 ADCRES
ADCCTL2 |= ADCRES_2;// 12位转换结果
ADCMCTL0 |= ADCINCH_2 | ADCSREF_1;// A0~2 (EOS);Vref=2V
ADCIE |= ADCIE0;//启用 ADC 转换完成中断
//配置引用
PMMCTL0_H = PMMPW_H;//解锁 PMM 寄存器
PMMCTL2 |= INTREFEN | REFVSEL_1;//启用内部2V 基准
_DELAY_CYCLES (400);//基准趋稳延迟
__no_operation();
while (1)
{
I = 2;
while (ADCCTL1和 ADCBUSY);//等待 ADC 内核处于活动状态
ADCCTL0 |= ADCENC | ADCSC;//采样和转换启动
_bis_SR_register (LPM0_bits | GIE);//输入 LPM0、带中断
__no_operation();//仅用于调试
_delay_cycles (5000);
__no_operation();
}
}
// ADC 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=ADC_vector
_interrupt void ADC_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (ADC_vector))) ADC_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))
{
案例 ADCIV_NONE:
中断;
ADCIV_ADCOVIFG 案例:
中断;
案例 ADCIV_ADCTOVIFG:
中断;
ADCIV_ADCHIIFG 案例:
中断;
ADCIV_ADCLOIFG 案例:
中断;
ADCIV_ADCINIFG 案例:
中断;
ADCIV_ADCIFG 案例:
ADC_RESULSE[i]= ADCMEM0;
if (i ==0)
{
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//存在 LPM0
}
其他
{
一----;
}
中断;
默认值:
中断;
}
}
请帮助
谢谢、
Sandhya Yadav
如果您设置 ADCMSC=0 (即不要设置它)并且 CONSEQ=3、则每次启动(ADCSC)都会得到一个样本、但 ADC 仍会单步执行所有通道。 要获得7个通道、请使用 ADCINCH=6而不是 ADCINCH=2。
我不太确定您想要实现什么。 要使用计时器触发器、请使用 ADCSHS;数据表(SLASEC4C)中提供了可能的触发器。表6-22。 您不希望在(触发)计时器的中断中获取 ADC 结果、因为(在如此慢的 ADC 时钟下) ADC 可能无法完成。