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.

[参考译文] CCS/MSP432P401R:DMA_UART EUSCIA0_IRQHandler 错误

Guru**** 2560390 points
Other Parts Discussed in Thread: MSP432WARE

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/598730/ccs-msp432p401r-dma_uart-euscia0_irqhandler-error

器件型号:MSP432P401R
主题中讨论的其他器件:MSP432WARE

工具/软件:Code Composer Studio

大家好、我使用来自以下来源的代码:

LINK_UART_DMA

我更改了 EUSCI_A0_BASE 中的 EUSCI_A0_MODULE:

#include "rom_map.h"
#include "driverlib.h"
#include 
#include 
#include 

#define zCHAN_DMA_UART_TX DMA_CHANGE_0

//*********
// DMA 控制表
//*********
#ifdef ewarm
#pragma DATA_alignment=1024
#else
#pragma DATA_ALIGN (controlTable、1024)
#endif
uint8_t controlTable[1024];

//*********
// UART 参数
//*********
#define zUART_BAUD_RATE 9600
/* UART 配置参数。 'zUART_BAUD_RATE '波特率。
*射频。 TI 在线计算器、网址
为:* software-dl.ti.com/.../index.html
*/
const eUSCI_UART_Config uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
78、 // BRDIV = 78
2、 // UCxBRF = 2
0、 // UCxBRS = 0
EUSCI_A_UART_NO_奇 偶校验、 //无奇偶校验
EUSCI_A_UART_LSB_FIRST、 // LSB 优先
EUSCI_A_UART_One_stop_bit、 //一个停止位
EUSCI_A_UART_MODE、 // UART 模式
EUSCI_A_UART_oversampling_BAUDRATE_generation //无过采样
};

//*********
//乒乓数据缓冲
器//*********
#define Size_buff _a_TX 512
#define Size_buff B_TX 512
static uint8_t zUI8_buff _a_TX[size_buff _a_TX];
static uint8_t zUI8_buff B_TX[size_b_TX];

//*********
//功能
//*********
void ConfigSysClk (void)
{
/*为 DCO 频率计算启用 FPU */
map_fpu_enableModule();

/*将 DCO 设置为48MHz (升级 Vcore)*/
MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 12);

/*等待模块初始化*/
uint32_t indConfgClk;
对于(indConfgClk = 0;indConfgClk < 1000;indConfgClk++);
}

void ConfigLED_Pins (void)
{
/* LED1:红色*/
MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);

/* LED RGB:P2.0:红色、P2.1:绿色、P2.2:蓝色*/
MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN0);

MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN1);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1);

MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN2);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN2);

}

void ConfigUart (void)
{
/*在 UART 模式下选择 P1.2和 P1.3 */
MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);

/*配置 UART 模块*/
MAP_UART_initModule (EUSCI_A0_BASE、uartConfig);

/*启用 UART 模块*/
MAP_UART_enableModule (EUSCI_A0_BASE);

MAP_Interrupt_enableInterrupt (INT_EUSCIA0);
}

void ConfigDma4Uart (void)
{
/*配置 DMA 模块*/
map_dma_enableModule();
MAP_DMA_setControlBase (controlTable);

/*将通道0分配给 EUSCIA0TX*/
MAP_DMA_赋 值通道(DMA_CH0_EUSCIA0TX);

/*禁用将不在基本 DMA 模式中使用的备用 DMA 通道的通道属性*/
MAP_DMA_disableChannelAttribute (DMA_CH0_EUSCIA0TX、UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK);

/*设置控制参数:选择"UDMA_SIZE_8"和"UDMA_SRC_INC_8"是因为 UART TX/RX 数据缓冲区大小限制为一个字符*/
//主通道
MAP_DMA_setChannelControl (DMA_CH0_EUSCIA0TX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);
//次通道
MAP_DMA_setChannelControl (DMA_CH0_EUSCIA0TX | UDMA_ALT_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);

/*设置信道传输*/
//主通道
MAP_DMA_setChannelTransfer (DMA_CH0_EUSCIA0TX | UDMA_PRI_SELECT、UDMA_MODE_Pingpong、zUI8_buff_A_TX、(void*) MAP_UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、SIZE_buff_A_TX);
//次通道
MAP_DMA_setChannelTransfer (DMA_CH0_EUSCIA0TX | UDMA_ALT_SELECT、UDMA_MODE_Pingpong、zUI8_buff_B_TX、(void*) MAP_UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、Size_buff_B_TX);

/*分配中断*/
MAP_DMA_赋 值中断(DMA_INT1、zCHAN_DMA_UART_TX);
MAP_DMA_clearInterruptFlag (zCHAN_DMA_UART_TX);

/*进行此操作、以便在中断结束时返回休眠状态*/
MAP_Interrupt_enableSlepOnIsrExit();

/*启用 DMA 通道*/
MAP_DMA_enableChannel (zCHAN_DMA_UART_TX);

/*为两个 DMA 通道启用中断*/
/*在 TIM-TI 中,我们需要在启用 DMA 通道后启用中断
*确保我们不会陷入"死锁"状态*/
MAP_Interrupt_enableInterrupt (DMA_INT1);

}

//*********
//'DAM_INT1'的 ISR 例程
//*********
void dma_UART_TX_IntHndlr (void)
{
uint32_t ui32模式;
MAP_DMA_clearInterruptFlag (0);

//检查乒乓"A"传输是否完成。
ui32Mode = MAP_DMA_getChannelMode (DMA_CH0_EUSCIA0TX | UDMA_PRI_SELECT);
if (ui32Mode = uDMA_MODE_STOP)
{
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P2、GPIO_PIN1);
MAP_DMA_setChannelTransfer (DMA_CH0_EUSCIA0TX | UDMA_PRI_SELECT、UDMA_MODE_Pingpong、zUI8_buff_a_TX、(void*) MAP_UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、Size_buff_a_TX);
}

//检查乒乓"B"传输是否完成。
ui32Mode = MAP_DMA_getChannelMode (DMA_CH0_EUSCIA0TX | UDMA_ALT_SELECT);
if (ui32Mode = uDMA_MODE_STOP)
{
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P2、GPIO_PIN2);
MAP_DMA_setChannelTransfer (DMA_CH0_EUSCIA0TX | UDMA_ALT_SELECT、UDMA_MODE_Pingpong、zUI8_buff_B_TX、(void*) MAP_UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、Size_buff_B_TX;
}
}

//*********
//针对 DMA 错误的 ISR (DMA_ERR ISR)
//*********
void uDMAErrorHandler (void)
{
uint32_t ui32Status;

//检查 uDMA 错误位
ui32Status = map_dma_getErrorStatus();

//如果存在 uDMA 错误,则清除错误并递增错误计数器
IF (ui32Status)
{
map_dma_clearErrorStatus();

//切换 LED 以指示 DMA 错误
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
}
}

int main (void)
{
/*停止 WDT */
MAP_WDT_A_HOLDTimer();

/*初始化缓冲区*/
memset (zUI8_buff _a_TX、'A'、size_buff _a_TX);
memset (zUI8_buff _B_TX、"B"、size_buff _B_TX);

/*Config Sys Clk*/
ConfigSysClk();

/*配置 LED */
ConfigLED_Pins ();

/*配置 UART */
ConfigUart();

/*配置 DMA */
ConfigDma4Uart();

/*配置 LPM */
MAP_PCM_gotoLPM0 ();
}

我的问题是:

如何解决此问题? 项目文件为:e2e.ti.com/.../Uart_5F00_Dma.zip

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

    启动文件中的中断处理程序称为 EUSCIA0_IRQHandler、而在代码中、函数 EUSCIA0_IRQHandler 不在那里。 因此、编译后、链接器无法确定函数的位置。 此外、zip 文件中附加的代码库似乎与论坛帖子中粘贴的代码不匹配。

    您需要做的是在主代码中创建中断处理程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Thx 寻求帮助、如何做到这一点? 你可以告诉我吗?

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

    主代码中的中断处理程序函数应与启动文件中的名称函数相同。 您是否还在项目中使用 MSP432Ware、因为该模板看起来与 SimpleLink SDK 中提供的模板不同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以为我提供包含修改文件的配置单元吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、3.14改型

    您是否意味着提供具有相同功能的项目? 如果是、我建议检查 MSP432的 simpleLink 示例