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.

[参考译文] CCS/MSP430FR4133:MSP430FR6989的 ADC 寄存器转换

Guru**** 2589265 points
Other Parts Discussed in Thread: MSP430FR4133, MSP430FR6989

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/688819/ccs-msp430fr4133-adc-register-conversion-from-msp430fr6989

器件型号:MSP430FR4133
主题中讨论的其他器件: MSP430FR6989

工具/软件:Code Composer Studio

大家好、

我为 MSP430FR6989的 ADC 转换编写了此代码块。 它工作良好。 我的问题是、我想在 MSP430FR4133上实现相同的代码、问题是当我为其编写相同的代码时、LED 不工作。 此外、我没有任何构建错误。 它可能与我的代码中的12位 ADC 至10位 ADC 转换相关。 我还怀疑"PM5CTL0 = ENABLE_PINs"线路出现故障。  请检查代码块。

应用程序应如下所示:

在0.8V 至1.2V 之间、P1.0 (LED)必须为高电平。 否则为低电平。  

MSP430FR6989中的工作代码  

#include
#define ENABLE_Pins 0xFFFE //启用输入和输出
void ADC_Setup (void);//用于设置 ADC12外设
MAIN ()

WDTCTL = WDTPW | WDTHOLD;//停止 WDT
PM5CTL0 = ENABLE_Pins;//启用输入和输出
P1DIR = BIT0;//将红色 LED 设置为输出
ADC_Setup();//设置 ADC 外设
while (1)

ADC12CTL0 = ADC12CTL0 | ADC12ENC;//启用转换
ADC12CTL0 = ADC12CTL0 | ADC12SC;//开始转换
if (((ADC12MEM0 >= 0x3C0)&&(ADC12MEM0<=0x5C0))// 0.8V <Voltage<1.2V HIGH

P1OUT = BIT0;//打开红色 LED

else // else 输入<= 1.65V

P1OUT = 0x00;//关闭红色 LED

}//结束 while (1)
}//结束 main()

void ADC_Setup (void)

#define ADC12_SHT_16 0x0200 //采样保持的16个时钟周期
#define ADC12_ON 0x0010 //用于打开 ADC12外设
#define ADC12_SHT_SRC_SEL 0x0200 //选择采样保持源
#define ADC12_12位0x0020 //选择12位分辨率
#define ADC12_P92 0x000A //将输入 P9.2用于模拟输入
ADC12CTL0 = ADC12_SHT_16 | ADC12_ON;//开启,设置采样保持时间
ADC12CTL1 = ADC12_SHT_SRC_SEL;//指定采样保持时钟源
ADC12CTL2 = ADC12_12位;// 12位转换结果
ADC12MCTL0 = ADC12_P92;// P9.2是模拟输入

 MSP430FR4133中用于相同功能的不起作用的代码。  

#include
#define ENABLE_Pins 0xFFFE //启用输入和输出
void ADC_Setup (void);//用于设置 ADC12外设

main(){
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
PM5CTL0 = PM5CTL0和 ENABLE_Pins;//使能输入和输出
P1DIR = BIT0;//将红色 LED 设置为输出
ADC_Setup();//设置 ADC 外设

while (1){

ADCCTL0 = ADCCTL0 | ADCENC;//启用转换
ADCCTL0 = ADCCTL0 | ADCSC;//开始转换
如果((ADCMEM0 >= 0x0F0)&&(ADCMEM0<=0x170)){// 0.8V <Voltage<1.2V HIGH
P1OUT = BIT0;//打开红色 LED

否则{//否则
P1OUT = 0x00;//关闭红色 LED

}//结束 while (1)
}//结束 main()

void ADC_Setup (void)


#define ADC_SHT_16 0x0200 //采样保持的16个时钟周期
#define ADC_ON 0x0010 //用于打开 ADC12外设
#define ADC_SHT_SRC_SEL 0x0200 //选择采样保持源
#define ADC_12位0x0020 //选择12位分辨率
#define ADC_P81 0x0009 //将输入 P8.1用于模拟输入--> A9
ADCCTL0 = ADC_SHT_16 | ADC_ON;//开启,设置采样保持时间
ADCCTL1 = ADC_SHT_SRC_SEL;//指定采样保持时钟源
ADCCTL2 = ADC_12位;// 12位转换结果
ADCMCTL0 = ADC_P81;// P8.1是模拟输入--> A9

此致、Ali。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >ADCMCTL0 = ADC_P81;// P8.1是模拟输入--> A9

    对于 FR4133、您需要在 SYSCFG2中明确启用所需的 ADC 通道[参考 SLAU45G sec 20.3.14;是的、它们本可以更明确]。 FR6989中情况并非如此。 添加如下内容:

    > SYSCFG2 |= ADCPCTL9;//启用 A9 (仅限 FR4133)

    未经请求:您正在启动 ADC、但不等待 ADC 完成、因此当您读取 ADCMEM0值时、它可能会过时。 由于您重复只读取一个通道、现在这可能无关紧要、但将来可能会如此。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ali、

    您是否能够解决您的问题?

    谢谢、

    Mitch
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ali、

    我将关闭该线程。

    谢谢!

    Mitch