请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5529 我目前正在尝试使用 MSP430F5529读取模拟值并将其填充到数组中。 我已将 MSP430配置为从 TimerA0开始采样转换、如数据表中所示、但目前没有从 ADC 获得任何响应。 请参阅下面的代码。 如果对我配置错误的内容提出任何建议、我们将不胜感激
#include static void setup_adc (); void setup_TimerA0 (void); void setClocks (); void SetVcoreUp (unsigned int level); #define Num_Of_Results 2000 volatile unsigned int results[Num_Of_Results]; //存储500个字,或在100ksps 的1kHz 正弦最佳采样下, //5个数据周期的值 unsigned char 索引= 0; void main (void){ WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 setClocks(); //将 ACLK 设置为 REF0 = 32.768kHz、将 MCLK 和 SMCLK 设置为 DCO = 20MHz Setup_TimerA0(); setup_adc (); infinite_loop: { _bis_SR_register (GIE); // LPM0,启用全局中断 __no_operation(); //对于调试器 } 转至 infinite_loop; } //函数// // Timer1中断服务例程 #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=Timer1_A0_vector __interrupt void Timer1_A0_Compiler (void) #Elif define ISR (__GISR_INCE_1 )(void 1)(nvoid Timer1_A0 )(void Timer1)(void Timer1)(nif_interrupt 1)(void 1)(nu_interrupt 1) #endif { P1OUT ^= 0x01; //切换 P1.0 TA1CCR0 += 50000; //将偏移添加到 CCR0 } // ADC 中断 #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=ADC12_vector __interrupt void ADC12ISR (void) #Elif defined (__GIC_) void __attribute__((void)(void ADC12_vector (void) ADC12ISR (void)#error !ADC12vector (void)不支持 ADC12! #endif { 结果[索引]= ADC12MEM0; //移动结果 索引++; //将结果索引递增,取模;在此处设置 Breakpoint1 if (索引== 2000) 索引= 0; ADC12IFG = 0x0000; } 静态空 setup_ADC (void){ // DAC 缓冲器(OPA735)的输出阻抗为125欧姆,因此从用户指南的第28.2.5.3节 * t_SAMP >(125+1800)*2^13*25p + 800n 或 t_SAMP > 1.234us。 MCLK/4周期为200ns 、*所以所需的采样周期为7个时钟(?) * ADC12CTL0 = ADC12SHT0_1 | ADC12ENC | ADC12ON; //采样计时器为8个时钟、启用转换、打开 ADC12 ADC12CTL1 = ADC12SSEL_2 | ADC12DIV_3 | ADC12SH_1 | ADC12SHP; //选择 MCLK (20MHz)作为参考时钟 //将时钟除以4。 新时钟变为 MCLK/4 = 5MHz //SHI 源是计时器 A CCR1 //SAMPCON 由采样定时器提供(8个时钟) P6SEL |= 0x01; // P6.0 ADC 通道 A0选择 ADC12IE = 0x01; //启用 ADC 中断 } void setClocks(void){ void SetVcoreUp (unsigned int level); //将 Vcore 设置增加到3级以支持 fsystem=20MHz //注意:一次改变一个电平内核电压。 SetVcoreUp (0x01); SetVcoreUp (0x02); SetVcoreUp (0x03); UCSCTL3 = SELREF_2; //设置 DCO FLL 基准= REFO UCSCTL4 |= SE拉美 经济体系2; //设置 ACLK = REFO _bis_SR_register (SCG0); //禁用 FLL 控制环路 UCSCTL0 = 0x0000; //设置可能的最低 DCOx、MODx UCSCTL1 = DCORSEL_5; //选择 DCO 范围20MHz 操作 UCSCTL2 = 610; //将 DCO 乘法器设置为20MHz //(N + 1)* FLLRef = Fdco //(610 + 1)* 32768 = 20MHz _BIC_SR_register (SCG0); //启用 FLL 控制环路 // DCO 范围位已经存在时、DCO 的最坏情况稳定时间 //已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章 // UG 进行优化。 // 32 x 32 x 25 MHz/32、768Hz ~ 780k MCLK 周期、DCO 才能稳定 _DELAY_CYCLES (625000); //循环直到 XT1、XT2和 DCO 稳定-在这种情况下、只有 DCO 必须稳定 操作 { UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG); //清除 XT2、XT1、DCO 故障标志 SFRIFG1 &=~OFIFG; //清除故障标志 } while (SFRIFG1&OFIFG); //测试振荡器故障标志 } void SetVcoreUp (无符号整型) { //打开 PMM 寄存器进行写入 PMMCTL0_H = PMMPW_H; //设置 SVS/SVM 高侧新电平 SVSMHCTL = SVSHE + SVSHRVL0 *电平+ SVMHE + SVSMHRRL0 *电平; //将 SVM 低电平设置为新电平 SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 *电平; //等待 SVM 稳定 时间((((PMMIFG & SVSMLDLYIFG)=0); //清除已设置的标志 PMMIFG &=~(SVMLVLRIFG + SVMLMRYIFG) = 0;//将 PMMCL0设置为新电平 //如果 ((PMMIFG & SVMLIFG))、则等待达到新的电平 while (((PMMIFG & SVMLVLRIFG)=0); //将 SVS/SVM 低电平设置为新的电平 SVSMLCTL = SVSLE + SVSLRVL0 *电平+ SVMLE + SVSMLRRL0 *电平; //锁定 PMM 寄存器以进行写入访问 PMMCTL0_H = 0x00; } void (timerA0) TA0CTL = tassel_2 + MC_1; // SMCLK、向上计数模式、清零 TAR TA0CCR0 = 200-1; //200时钟@5MHz = 100ksps TA0CCTL1 = OUTMOD_3; //set、在 TA1上复位 TA0CCR1 = 99; ADC 的//触发 //代码检查 GPIO 上的采样 PW 周期 P1SEL |= BIT2; // P1.2选项选择 P1DIR |= BIT2; // P1.2输出 }