工具/软件:Code Composer Studio
尊敬的团队
我的客户正在使用 MSP430FR2353和 ADC12。 他们希望使用序列模式。
但我无法在 ADCMCTL0寄存器中找到 EOS 位。 那么、我如何配置它呢? MSP430FR2353仅具有 ADCMCTL0、ADC12MCTL0~x 与往常一样。 为什么?
此外、我们 在示例中以以下代码的形式对 A2/A1/A0进行采样。 但我的客户希望使用 A8和 A12。 有可能吗? 如何配置它?
BR、
Susan
/*-版权所有-、BSD_EX *版权所有(c) 2016、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 * *** * * MSP430代码示例免责声明 * * MSP430代码示例是自包含的低级程序 ,通常*以 高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认 值*寄存器值和时钟配置等设置、 并且在组合多个示例中的代码时必须*小心以避免潜在的副作用 *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware *了解外设配置的 API 函数库方法。 * *--/版权--* //********* // 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 | // //// Cash Hao // Texas Instruments Inc. // 2016年11月 //使用 IAR 嵌入式工作平台 v6.50.0和 Code Composer Studio v6.2.0构建 //********* #include unsigned int adc_result[3]; // 12位 ADC 转换结果数组 unsigned char i; int main (void) { 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 trig、单序列 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 #else error 编译器#void (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 } 其他 { i--; } 中断; 默认值: 中断; } }

