主题中讨论的其他器件: MATHLIB
大家好、
IAM 尝试使用 MSP430FR2355 Launchpad 的 ADC 使用计时器触发器对两个 SAC (即 SAC0和 SAC2)的输出进行采样。
根据 Launchpad 的用户指南、OA0 OUT 可在内部连接到 ADC 输入、OA20 OUT 需要在外部连接到 ADC 输入。
我已按照这些示例操作、并尝试编写以下代码、如图所示
/******* SAC0配置 / P1SEL0 |= BIT1|BIT2; //选择 P1.2 P1.1作为 OA0输出 OA0-引脚功能 P1SEL1 |= BIT1 | BIT2; //选择 P1.2 OA0-引脚功能 SAC0DAC = DACSREF_1; //选择2.5V 内部 Vref 作为 DAC 基准 SAC0DAT = 2048; //将 SAC DAC 数据设置为1.25V SAC0DAC |= DACEN; //启用 DAC SAC0OA |= NMUXEN | PMUXEN | PSEL_1 | NSEL_0;//选择正输入作为 DAC、选择负引脚输入作为外部 // SAC0PGA |= MSEL_0; //反相 PGA 模式 SAC0OA &=~OAPM; //选择高速和高功率模式 SAC0OA |= SACEN + OAEN; //启用 SAC 和 OA /********* SAC2配置为反相 PGA ***** / P3SEL0 |= BIT1; //选择 P3.1 OA2输出功能 P3SEL1 |= BIT1; //选择 P3.1 OA2输出功能 SAC2DAC = DACSREF_1; //选择2.5V 内部 Vref 作为 DAC 基准 SAC2DAT = 2048; // DAC 为放大器提供偏置 SAC2DAC |= DACEN; //启用 DAC SAC2OA |= NMUXEN | PMUXEN | PSEL_1 | NSEL_1;//选择正输入作为 DAC、选择负引脚输入作为 OA0的 O/P SAC2PGA |= GAIN0 + GAIN2 + MSEL_3;//设置增益= 16的反相 PGA 模式 SAC2OA &=~OAPM; //选择高速和高功率模式 SAC2OA |= SACEN | OAEN;//启用 SAC 和 OA
/*** ADC 配置*** / ADCCTL0 &=~ADCENC; //禁用 ADC ADCCTL0 |= ADCSHT_4 | ADCMSC | ADCON;//0000010010010;64个 ADCLK 周期、MSC 位高电平、ADC 打开 ADCCTL1 |= ADCSHP | ADCSHS_1 | ADCCONSEQ_1_ADCSSEL_1;//0000010010010010; ADCCTL2 &=~ADCRES;//清除分辨率 ADCCTL2 |= ADCRES_2;//12位分辨率 ADCMCTL0 |= ADCSREF_1|ADCINCH_1|ADCINCH_3;// OA0输出作为 A1 ADC 输入,VR+= VREF+,OA2输出从外部连接到 A3 ADC 输入 ADCIE |= ADCIE0;//启用转换完成中断 __enable_interrupt ();//启用可掩码 /******** 配置计时器 / TB0CTL = TBSSEL_ACLK + TBCLR;//ACLK 和复位定时器 TB0CCTL1 = OUTMOD_2;//切换和复位 TB0CCTL0 = CCIE;//中断使能 TB0CCR0 = 31;//采样率为512SPS TB0CCR1 = 10;//在采样前留出足够的时间使信号变得稳定 TB0CTL |= MC_1;//向上计数模式 ADCCTL0 |= ADCENC;//启用转换并在 (1) { } //在主函数 #if defined (__TI_Compiler_version__)||Defined (__IAR_systems_ICC__) #pragma vector=ADC_vector __interrupt #ADC_ISR ( supported)#Elif Compiler_version__(supporteded)#elif_void (void)(void)_ adc_agc (void)(void)(void)(void _transl_interrupt! #endif { ADCIFG &=~ADCIFG0;//清除中断标志 } //主引脚 #pragma vector=TIMER0_B0_vector __interrupt void Timer0_B0_ISR (void) { x = ADCMEM0; Y= ADCMEM0; }之外的计时器 B0中断服务例程
我尝试在 ADC ISR 中放入断点、但它从未包含在 ADC ISR 中。 定时器 ISR 正在运行、但 X& Y 两个值始终为1。 两个 SAC 都在工作、因为我已检查示波器上的 SAC 输出。
我在哪里做错了?

