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/MSP430F5659:有关 ADC 示例代码的问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/567822/ccs-msp430f5659-questions-about-adc-sample-code

器件型号:MSP430F5659
主题中讨论的其他器件: MSP430WARE

工具/软件:Code Composer Studio

你(们)好。 我目前正在学习 MSP430F5659 CCS、尝试查看 TI 提供的一些示例代码。

我正在努力解决的代码是'430f665x_adc_05.c'、以下是代码。

#include

#define Num_of 结果8.

volatile unsigned int A0results[num_for_results];
volatile unsigned int A1results[num_for_results];
volatile unsigned int A2results[num_for_results];
volatile unsigned int A3results[num_for_results];

int main (空)

WDTCTL = WDTPW+WDTHOLD;//停止看门狗计时器
P6SEL = 0x0F;//启用 A/D 通道输入
ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8;//打开 ADC12、延长采样时间
//以避免结果溢出
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3;//使用采样计时器、重复序列
ADC12MCTL0 = ADC12INCH_0;// ref+=AVcc、channel = A0
ADC12MCTL1 = ADC12INCH_1;// ref+=AVcc、channel = A1
ADC12MCTL2 = ADC12INCH_2;// ref+=AVcc、channel = A2
ADC12MCTL3 = ADC12INCH_3+ADC12EOS;// ref+=AVcc、channel = A3、end seq
ADC12IE = 0x08;//启用 ADC12IFG.3
ADC12CTL0 |= ADC12ENC;//启用转换
ADC12CTL0 |= ADC12SC;//开始转换-软件触发器

_bis_SR_register (LPM0_bits + GIE);//输入 LPM0、启用中断
__no_operation();//用于调试器

#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=ADC12_vector
_interrupt void ADC12ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (ADC12_vector)) ADC12ISR (void)
其他
错误编译器不受支持!
#endif

静态无符号 int 索引= 0;

switch (__evo_in_range (ADC12IV、34))

情况0:中断;//向量0:无中断
情况2:中断;//矢量2:ADC 溢出
情况4:中断;//矢量4:ADC 时序溢出
情况6:中断;//向量6:ADC12IFG0
情况8:中断;//向量8:ADC12IFG1
情况10:中断;//向量10:ADC12IFG2
案例12://向量12:ADC12IFG3
A0Results[索引]= ADC12MEM0;//移动 A0结果、IFG 被清除
A1Results[索引]= ADC12MEM1;//移动 A1结果、IFG 被清除
A2Results[索引]= ADC12MEM2;//移动 A2结果、IFG 被清除
A3Results[索引]= ADC12MEM3;//移动 A3结果、IFG 被清除
index++;//递增结果索引,模;在此处设置 Breakpoint1

如果(索引==8)

(索引= 0);

案例14:中断;//矢量14:ADC12IFG4
情况16:中断;//向量16:ADC12IFG5
情况18:中断;//向量18:ADC12IFG6
情况20:中断;//向量20:ADC12IFG7
情况22:中断;//向量22:ADC12IFG8
情况24:中断;//向量24:ADC12IFG9
情况26:中断;//向量26:ADC12IFG10
情况28:中断;//向量28:ADC12IFG11
情况30:中断;//向量30:ADC12IFG12
情况32:中断;//向量32:ADC12IFG13
案例34:中断;//矢量34:ADC12IFG14
默认值:break;

(很抱歉、读率较差)

当这个程序运行时、ADC12MEM0~3数据在很短的时间内改变、因此、Axresults[]也改变。

我在这里想知道的是、'P6SEL'有任何特定的作用。 即使我只是进行该行注释(//P6SEL = 0x0F;//启用 A/D 通道输入、主函数的第二行),也没有任何变化。

是否有人知道 PxSEL 的角色(以及关于 PxOUT 的角色)? 我查看了用户指南、但找不到答案。

谢谢!

/*-版权所有-、BSD_EX *版权所有(c) 2012、德州仪器(TI)公司 *保留所有权利。  * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: *  *源代码的重新分发必须保留上述版权 声明*  、此条件列表和以下免责声明。  * ** *二进制形式的再发行必须在      *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。  * *** 未经      事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。  * *本软件由版权所有者和贡献者"按原样"提供 *、  不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润;  *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。  * ***  * *            MSP430代码示例免责声明 * * MSP430代码示例是自包含的低级程序 ,通常*以 高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认 值*寄存器值和时钟配置等设置、 并且在组合多个示例中的代码时必须*小心以避免潜在的副作用 *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware *了解外设配置的 API 函数库方法。  * *--/版权--*//********* // MSP430F665x 演示- ADC12、重复转换序列// 说明:此示例展示了如何 使用“重复通道序列”模式执行重复转换序列//。  AVCC 用于// 基准、并在通道 A0、// A1、A2和 A3上执行重复的转换序列。 每个转换结果 分别存储在 ADC12MEM0、ADC12MEM1、// ADC12MEM2和 ADC12MEM3中。 在每个序列之后、4个转换// 结果通过 向通道 A0 - A3施加电压移至 A0results[]、A1results[]、A2results[]和 A3results[]。//测试。 在 //调试器中打开监视窗口并查看结果。 在索引增量行//中设置 Breakpoint1 以查看数组值按顺序变化、而 Breakpoint2以查看 A0results[]、A1Results[]、A2results[]和// A3results[]中指定 Num_for_results 的转换结果的整数//数组。////        MSP430F665x/       -------- //     /|\|         |//      ||         |//      -|RST        |//       |         //Vin0  ->|P6.0/cB0/A0   |//  Vin1 ->|P6.1/CB1/A1   |//  Vin2 ->|P6.2/CB2/A2   |//  Vin3 ->|P6.3/CB3/A3   |//       |         /// P.Thanigai//  Texas Instruments Inc.// 2012年5月// 使用 IAR Embedded Workbench 构建版本:5.40 & CCS v5.2//********* #include
#define Num_of 结果 8.
volatile unsigned int A0results[num_for_results];volatile unsigned int A1results[num_for_results];volatile unsigned int A2results[num_for_results];volatile unsigned int A3results[num_for_results];
int main (void){ WDTCTL = WDTPW+WDTHOLD;          //停止看门狗计时器 P6SEL = 0x0F;               //启用 A/D 通道输入 ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8;//打开 ADC12,延长采样时间                       //为了避免结果溢出 ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3;   //使用采样计时器、重复序列 ADC12MCTL0 = ADC12INCH_0;         // ref+=AVcc、channel = A0 ADC12MCTL1 = ADC12INCH_1;         // ref+=AVcc、channel = A1 ADC12MCTL2 = ADC12INCH_2;         // ref+=AVcc、channel = A2 ADC12MCTL3 = ADC12INCH_3+ADC12EOS;    // ref+=AVcc、channel = A3、end seq  ADC12IE = 0x08;              //启用 ADC12IFG.3 ADC12CTL0 |= ADC12ENC;           //启用转换 ADC12CTL0 |= ADC12SC;           //开始转换-软件触发器
 _bis_SR_register (LPM0_bits + GIE);   //输入 LPM0、启用中断 _no_operation ();             //用于调试器

#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)#pragma vector=ADC12_vector__interrupt void ADC12ISR (void)#Elif defined (__Gnu__) void __attribute__((interrupt (ADC12_vector)))) ADC12ISR (void = static!#index!
 switch (__evo_in_range (ADC12IV、34)) { case 0:break;              //向量 0: 无中断 情况 2:中断;              //向量 2: ADC 溢出 情况 4:中断;              //向量 4: ADC 时序溢出 情况 6:中断;              //向量 6: ADC12IFG0 情况 8:中断;              //向量 8: ADC12IFG1 大小写10:break;              //向量10: ADC12IFG2 情况12:                  //向量12: ADC12IFA0G3 Results[  索引]= ADC12MEM0;      //移动 A0结果、IFG 被清除  A1Results[索引]= ADC12MEM1;      //移动 A1结果、IFG 被清除  A2Results[索引]= ADC12MEM2;      //移动 A2结果、IFG 被清除  A3Results[索引]= ADC12MEM3;      //移动 A3结果,IFG 被清除  index++;                 //将结果索引递增,取模;在此处设置 Breakpoint1
  if (index =8)  {   (index =0);  } case 14:break;              //向量14: ADC12IFG4 情况16:中断;              //向量16: ADC12IFG5 情况18:中断;              //向量18: ADC12IFG6 案例20:中断;              //向量20: ADC12IFG7 case 22:break;              //向量22: ADC12IFG8 case 24:break;              //向量24: ADC12IFG9 大小写26:break;              //向量26: ADC12IFG10 case 28:break;              //向量28: ADC12IFG11 case 30:break;              //向量30: ADC12IFG12 大小写32:break;              //向量32: ADC12IFG13 case 34:break;              //向量34: ADC12IFG14 默认值:break; }

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

    P6SEL 寄存器将相应的管脚设置为其输入模拟功能、在这种情况下、PxOUT 不会完成任何操作、因为管脚不会被初始化为通用输出。 数据表的表64对此进行了介绍。 如果移除 P6SEL 命令、ADC 将继续工作、但由于输入引脚设置不当、采集和存储的样本将不正确。

    此致、
    Ryan