我将尝试获取多个模拟通道样片、如本文末尾所述 。https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1208935/msp430f6779-msp430f6779-measuring-voltage-of-pwm-signal
我尝试使用 DMA 示例代码修改我的代码、以便对多个模拟通道进行采样。 但是、DMA ISR 会触发、但代码永远不会进入 DMA ISR 中以粗体显示的 switch 语句中。 此外、我注释掉了 ADC ISR、并将代码放置在如下所示的 DMA ISR 中。
/*准备 ADC10A 进行配置*/
ADC10CTL0 &=~ADC10ENC;
/*清除挂起的中断以确保 DMA 的触发*/
ADC10IFG = 0;
/* ADC 打开、ADC10等待来自 SD24的触发、采样时间2us 8xADCclk、自动下一个转换 */
ADC10CTL0 = ADC10SHT0 | ADC10ON | ADC10MSC;
/*由 SD24触发、SMCLK/6 = 4MHz、脉冲采样模式*/
ADC10CTL1 = ADC10SHP | ADC10SHS_2 | ADC10DIV_0 | ADC10SSEL_0 | ADC10CONSEQ_1;/*单通道、单次转换*/
/* 10位转换结果*/
ADC10CTL2 |= ADC10RES;
/*启用 ADC 转换完成中断*/
ADC10IE |= ADC10IE0;
/* A3 ADC 输入选择;Vref=AVCC */
ADC10MCTL0 |= ADC10INCH_3 | ADC10SREF_0;// A0、A1、A2、A3 (EOS)
/*启动 ADC 并等待软件启动转换触发器*/
ADC10CTL0 |= ADC10ENC;//+ ADC10SC;
//设置 DMA0 (ADC10IFG 触发)
DMACTL0 = DMA0TSEL_24;// ADC10IFG 触发器
DMA0SZ = 0x04;// 4次转换
_data20_write_long ((uintptr_t)&DMA0SA、(uintptr_t)&ADC10MEM0);//源单个地址
_data20_write_long ((uintptr_t)&DMA0DA、(uintptr_t)&ADC_result [0]);//目标数组地址
DMA0CTL = DMADT_4 | DMADSTINCR_3 | DMAEN | DMAIE;//重复单次传输、递增目的地、在转换序列后启用 int
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=dma_vector
__interrupt void DMA0_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (DMA_vector))) DMA0_ISR (void)
#else
#错误编译器不受支持!
#endif
{
开关(__even_in_range (DMAIV、16))
{
情况 DMAIV_NONE:break;//无中断
情况 DMAIV_DMA0IFG:// DMA0IFG = DMA 通道0
//转换序列完成
ADC10CTL0 &=~ADC10ENC;
ADC10CTL1 ^= ADC10ISSH;//切换 ISSH 以在每个周期提供触发(EQU0)
ADC10CTL0 |= ADC10ENC;
//_ bic_SR_register_on_exit (LPM0_bits);//在返回时退出 LPM0
中断;
情况 DMAIV_DMA1IFG:中止;// DMA1IFG = DMA 通道1
情况 DMAIV_DMA2IFG:break;// DMA2IFG = DMA 通道2
案例8:中断;//保留
案例10:中断;//保留
案例12:中断;//保留
案例14:中断;//保留
案例16:中断;//保留
默认值:中断;
}
}