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
你(们)好。 我目前正在学习 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; }