工具/软件:TI-RTOS
您好!
我正在尝试将 MSP430上的2个 UART 与 TI-RTOS UART 驱动程序配合使用。 两个 UART 的 UART_open()都已成功初始化。 但当我再次调用 UART_write()时,它会重置控制器。
下面列出了初始化代码和枚举器
#define Board_UART0 MSP_EM430F67791_UARTA0
#define Board_UART1 MSP_EM430F67791_UARTA1
#define Board_UART2 MSP_EM430F67791_UARTA2
typedef 枚举 MSP_EM430F67791_UARTName{
MSP_EM430F67791_UARTA0 = 0、
MSP_EM430F67791_UARTA1、
MSP_EM430F67791_UARTA2、
MSP_EM430F67791_UARTCOUNT
}MSP_EM430F67791_UARTName;
CONST UARTEUSCI_BAURATEConfig uartEUSCIABAUDRATE[]={
/*{波特率、输入时钟、预分频器、UCBRFx、UCBRSx、 过采样}*/
{
.outputBudrate = 9600、
.inputClockFreq = 16777216、
.prescalar = 109、
hwRegUCBRFx = 3、
hwRegUCBRSx = 181、
过采样= 1.
}、
{9600、16777216、109、3、181、 1}、
{2400、16777216、436、14、170、 1}、
{4800、 16777216、 218、7、68、 1}、
{19200、 16777216、 54、9、238、 1}、
{38400、 16777216、 27、4、251、 1}、
{57600、 16777216、 18、3、68、 1}、
{115200、 16777216、 9、1、181、 1}、
};
CONST UARTEUSCI_HWAttrs uartEUSCIAHWAttrs[MSP_EM430F67791_UARTCOUNT]={
{
baseAddr = EUSCI_A0_BASE、
时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = EUSCI_A_UART_LSB_FIRST、
numBudrateEndries = sizeof (uartEUSCIABAURATEes)/sizeof (UARTEUSCIA_BAUDRAateConfig)、
.budrateLUT = uartEUSCIA波特 率
}、
{
baseAddr = EUSCI_A1_base、
时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = EUSCI_A_UART_LSB_FIRST、
numBudrateEndries = sizeof (uartEUSCIABAURATEes)/sizeof (UARTEUSCIA_BAUDRAateConfig)、
.budrateLUT = uartEUSCIA波特 率
}、
{
baseAddr = EUSCI_A2_base、
时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = EUSCI_A_UART_LSB_FIRST、
numBudrateEndries = sizeof (uartEUSCIABAURATEes)/sizeof (UARTEUSCIA_BAUDRAateConfig)、
.budrateLUT = uartEUSCIA波特 率
}、
};
const UART_Config UART_config[]={
{
.fxnTablePtr =&UARTEUSCIA_fxnTable、
.object = uartEUSCIAObjects[0]、
.hwAttrs = uartEUSCIADHWAttrs[0]
}、
{
.fxnTablePtr =&UARTEUSCIA_fxnTable、
.object = uartEUSCIAObjects[1]、
hwAttrs = uartEUSCIADHWAttrs [1]
}、
{
.fxnTablePtr =&UARTEUSCIA_fxnTable、
.object = uartEUSCIAObjects[2]、
hwAttrs = uartEUSCIADHWAttrs [2]
}、
{NULL、NULL、NULL}
};
/*
* ==== MSP_EM430F67791_initUART ===
*
void MSP_EM430F67791_initUART (void)
{
/* P3.1、0 = EUSCI_A0 TXD/RXD *
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、
GPIO_PIN0);
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P3、
GPIO_PIN1 );
/* P3.5、4 = EUSCI_A0 TXD/RXD *
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、
GPIO_PIN4);
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P3、
GPIO_PIN5 );
/* P3.7、6 = EUSCI_A0 TXD/RXD *
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、
GPIO_PIN6 | GPIO_PIN7);
/*初始化 UART 驱动程序*/
UART_INIT();
}
//任务内
UART_Params uartParams;
const char echoPrompt[]="\fEchoing Characters:\r\n";
/*创建一个数据处理关闭的 UART。 *
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
HDLC_uart1_Handle = UART_OPEN (Board_UART1、&uartParams);
if (hdlc_uart1_handle == NULL){
System_abort ("打开 UART 时出错");
}
HDLC uart0_handle = UART_open (Board_UART0、uartParams);
if (hdlc_uart0_handle == NULL){
System_abort ("打开 UART 时出错");
}
UART_WRITE (HDLC_uart0_handle、echoPrompt、sizeof (echoPrompt)); //大小
UART_WRITE (HDLC_uart1_Handle、echoPrompt、sizeof (echoPrompt));//失败并重置控制器
还需要注意的是、如果我更改 MSP_EM430F67791_UARTName 中的枚举码器、如所示
typedef 枚举 MSP_EM430F67791_UARTName{
MSP_EM430F67791_UARTA2 = 0、
MSP_EM430F67791_UARTA1、
MSP_EM430F67791_UARTA0、
MSP_EM430F67791_UARTCOUNT
}MSP_EM430F67791_UARTName;
那么、即使 UART0失败(导致复位条件)
IAM 使用 tirtos_msp43x_2_20_00_06和 IAR 7.11.2。
请帮助。
提前感谢。
Sreekanth MK