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.

[参考译文] 编译器 μ C/MSP430FR5949:UCA0TXIFG 无触发 DMA

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/849886/msp430fr5949-uca0txifg-no-trigger-dma

器件型号:MSP430FR5949

工具/软件:TI C / C +编译器 μ F

无法进入 DMA_ISR 中断!

void Init_UART0 (u32 BD){

P2SEL1 |= BIT0 | BIT1;
P2SEL0 &=~(BIT0 | BIT1);//  
//将 USCI_A0配置为 UART 模式
UCA0CTLW0 = UCSWRST;//将 eUSCI 置于复位状态
UCA0CTLW0 |= UCSSEL_ACLK;// SMCLK = ACLK
交换机(BD)

判例1200://1200
UCA0BR0 = 0x01;//接收改用1200波特率
UCA0BR1 = 0x00;
UCA0MCTLW = UCOS16+ UCBRF_11;
中断;


UCA0CTLW0 &=~UCSWRST;//初始化 eUSCI
UCA0IE |= UCRXIE;//启用 USCI_A0 RX 中断

空 UART_DMA_init (u8 len)

//UCA0IE &=~UCTXIE;
DMACTL0 = DMA0TSEL__UCA0TXIFG;
DMA0CTL |= DMADD_1| DMADSTBYTE|DMASRCBYTE| DMADSTINCR_0 | DMASRCINCR_3;
DMA0SZ = len;
__data16_write_addr ((无符号短整型)&DMA0SA、(无符号长整型)&USART.Tx_Buf[0]);//
__data16_write_addr ((无符号短整型)&DMA0DA、(无符号长整型)&UCA0TXBUF);
DMA0CTL |=DMAIE|DMAEN;//

#pragma vector=dma_vector
_interrupt void DMA_ISR (void)


switch (__evo_in_range (DMAIV、6))

案例 DMAIV_NONE:break;//向量0:无中断
案例 DMAIV_DMA0IFG:

DMA0CTL &=~(DMAEN+DMAIE);
}中断;
案例 DMAIV_DMA1IFG:


}中断;
案例 DMAIV_DMA2IFG:中断;
默认值:break;


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

    您好、Shang、

    是否启用全局中断使能位? 我只想进行双击、因为我在您提供的代码中看不到它。

    此外、这里还有指向 FR5949器件示例代码的链接。 您将找到一个 DMA 示例。 它不使用中断、但它可能是查看外设设置方式的良好参考:

    如果您仍有问题或疑问、请告诉我。

    谢谢、

    Mitch

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

    您好、Mitch

    我 启用全局中断使能位、只显示部分代码、不带 DMA 功能的 UART 模块发送数据正常。

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

    当 DMALEVEL=0时、您需要一个上升沿来触发 DMA。 所以:

    1) 1)使用 DMALEVEL=1或

    2) 2)明确地将第一个字节写入 TXBUF 以使序列运行。

    (我承认我从来不喜欢(1)、因为 TXIFG 不是正确的"级别"、但它似乎总是做正确的事情、而且到目前为止、这两者中比较简单。)

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

    大家好、

    你总是知道我要做什么。事实上,我刚刚发现了这个问题并解决了这个问题

    DMA1CTL |= DMADD_4| DMADSTBYTE|DMASRCBYTE| DMALEVEL|DMASRCINCR_3|DMADSTINCR_0

    非常感谢大家。