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.

[参考译文] MSP430F5438A:使用 DMA 将 ADC 值传输到 UART 配置问题

Guru**** 2553450 points
Other Parts Discussed in Thread: MSP430F5438A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/709630/msp430f5438a-using-dma-to-transfer-adc-values-to-uart-configuration-issue

器件型号:MSP430F5438A
主题中讨论的其他器件: MSP430WARE

您好!

我正在尝试配置 DMA0来将数据从 ADC 传输到缓冲器、配置 DMA1来将数据从循环缓冲器0传输到 UART。 ADC 根据计时器触发器进行采样。

当正确调试 ADC 采样时、我可以通过 UART 发送和接收信息、但是没有 DMA 从 ADC 结果存储器传输到缓冲区和 UART。

我是否正确初始化了 DMA?

谢谢、

Vlad

#include 
#include 

#define No_Buf_Samples 1376 //定义要存储在缓冲

区中的样本数易失性 int 循环缓冲区0[No_Buf_Samples];

void DMA_Init()
{

DMACTL0 |= DMA0TSEL_24;//从 ADC12IFGx 触发 DMA0

//测试-在测试数组中读取
= DMACTL4;/ DMAMB0_SIZE

= DMADCMOS4;//测试样本数组; //读取-修改-写入禁用
DMA0CTL &&~DMAIFG;//清除 DMA 中断标志
// DMA0CTL |= DMADT_4 + DMASRCINCR_0 + DMADSTINCR_3 + DMASBDB + DMAIE;//重复单次传输,源地址常数,目标地址,

// DMADSTINCR_3 + DMADSTINCR_3 + DMADABBDB + DMADMA0递增
;// DMADTMA0 | DMA0 = DMTMA1;// DMADTMA0 = DMTMA1 // DMA1从 DMA0IFG
DMA1CTL 触发|= DMADD_6 + DMASRCINCR_3+ DMADSTINCR_0 + DMASBDB + DMALEVEL;//突发块传输、递增源地址、








无符号地址不变、启用、电平敏感}void DMA_ADC_Transfer(){__DMA0CL_SHORT_DMAD0_DMA016 (DMA0_SHORT)|无符号地址无符号地址不变、无符号 ADDRES0_D0_D0_ADDRESD0_TRD (短整型);AD0_AD0_DMA0_AD0_DMA0_DMA0_TRK (短整型)

//启用 DMA0

DMA0CTL |= DMAREQ;//触发块传输
}

// DMA UART 传输函数

void DMA_UART_Transfer ()
{
DMA1SZ = sizeof (循环缓冲器0);//块大小
__unsigned data16_write_addr (unsigned short)&DMA1SA (
_循环缓冲器1);_ DMA1DA_long
(_)| DMA1DA_DMA1)| EN/Unsigned data1 (无符号 DMA1MA1)&DMA1)| DMA1 (无符号 DMA1MA1)| DMA1 (无符号 DMA1)&DMA1)+ DMA1 (无符号 DMA1)+ DMA1 (无符号 DMA1) DMA1 (无符号 DMA1)+ DMA1)
//触发块传输
}



void Timer_B_Init (void)
{
//TB0CCTL0 = CCIE;//启用 CCR0中断
TB0CCR0 = 80;//启用 TBCCR0、采样周期
TB0CCR1 = 40;// ADC12采样转换的触发
TB0CCTL1 = OUTMOD_4; //触发 ADC 转换模式 OutMOD 置位/复位
TB0CTL |= tassel_2 + MC_1 + TACLR;// SMCLK,向上计数模式
}

void UART_Init (void)

{

P5SEL |= 0xC0;// P5.6,7 = USCI_A1 TEL/RXD

UCA1CTL1 |= UCSWCTL|= UCS1ST**状态机/复位 UCS1CTL1**
// SMCLK

// 16MHz 波特115200
UCA1BR0 = 0x45;//时钟16MHz、波特115200
UCA1BR1 = 0x00;//时钟16MHz、波特115200
UCA1MCTL |= UCBRS_4 + UCBRF_0;//


** UCBRSx=4、UCB1RFx=UCA0;//初始化 UCB1RCI= UCAST= UCA0;// UCCR0 = UCCR0 ~UCC1 = UCA0;// UCAST= UCCR0 = UCC1 = UCA0;// UCC1 = UCC1 = UCA0;// UCA0
//启用 USCI_A1 RX 中断

}



void ADC_Init (int ADC_Sampling_Channel、int ADC_Sampling_Mode)
{


P6SEL |=(1< 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vlad、

    调试 DMA 传输可能很复杂。 我建议将 DMA - UART 传输和 ADC-DMA 传输分开、并单独进行调试。 话虽如此、我们确实提供了一个 DMA -ADC12代码示例、您可以使用该示例与代码进行比较。 我要重点介绍的是确保 DMA 触发器正确无误。

    我所指的代码示例可在 TI Resource Explorer -> SW -> MSP430Ware ->器件-> MSP430F5xx_6xx -> MSP430F5438A ->外设示例->寄存器级别-> msp430x54xA_DMA_04.c 中找到

    您可以在 CCS 中或在下面链接的云版本中找到 TI Resource Explorer 和 MSP430Ware。
    dev.ti.com/.../