主题:SysConfig 中讨论的其他器件
工具/软件:
此问题的源代码如下所示:
#include "ti_msp_dl_config.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
volatile bool gCheckUART = false;
volatile bool gDMADone = false;
#define LOG_MAX_LENGTH 128
void UART_Console_Write(const char *data, ...)
{
char log_buf[LOG_MAX_LENGTH] = { 0 };
va_list args;
va_start(args, data);
vsnprintf(log_buf, LOG_MAX_LENGTH, data, args);
va_end(args);
DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t)(log_buf));
DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t)(&UART_0_INST->TXDATA));
DL_DMA_setTransferSize(DMA, DMA_CH0_CHAN_ID, strlen(log_buf));
DL_SYSCTL_disableSleepOnExit();
DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);
DL_UART_Main_enableDMATransmitEvent(UART_0_INST);
while (false == gDMADone) {
__WFE();
}
DL_UART_Main_disableDMATransmitEvent(UART_0_INST);
while (false == gCheckUART) {
__WFE();
}
gCheckUART = false;
gDMADone = false;
}
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(UART_0_INST_INT_IRQN);
DL_SYSCTL_disableSleepOnExit();
UART_Console_Write("%s: %s\r\n", __FUNCTION__, __TIMESTAMP__);
while (1) {
;
}
}
void UART_0_INST_IRQHandler(void)
{
switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {
case DL_UART_MAIN_IIDX_EOT_DONE:
gCheckUART = true;
break;
case DL_UART_MAIN_IIDX_DMA_DONE_TX:
gDMADone = true;
break;
default:
break;
}
}










