工具/软件:TI-RTOS
我尝试让EUSCI_A1or EUSCI_A3正常工作,以便与具有UART接口的设备通信。 我开始尝试让UART在外部环回模式下工作,但没有成功。 我一直使用TI-RTOS项目"uartecho_MSP_EXP430FR5994_TI"作为起点。 为了使UART正常运行,我添加了以下内容:
在Board.h中,我添加了以下定义:
#define Board_UART1 MSP_EXP430FR5994_UARTA1 #define Board_UART2 MSP_EXP430FR5994_UARTA2 #define Board_UART3 MSP_EXP430FR5994_UARTA3
在MSP_EXP430FR5994.h中,我添加了一些定义并更改了UART init的定义,如下所示:
/*!
*@def MSP_EXP430FR5994_UARTName
*@MSP_EXP430FR5994开发板
上UART名称的简要枚举*/
typedef enum MSP_EXP430FR5994_UARTName {
MSP_EXP430FR5994_UARTA0 = 0,
MSP_EXP430FR5994_UARTA1 = 1,
MSP_EXP430FR5994_UARTA2 = 2,
MSP_EXP430FR5994_UARTA3 = 3,
MSP_EXP430FR5994_UARTCOUNT
} MSP_EXP430FR5994_UARTName;
/*!
*@def MSP_EXP430FR5994_UARTEnable
*@简要枚举UART模式的UART到初始化GPIO
*/
typedef enum MSP_EXP430FR5994_UARTEnable {
MSP_EXP430FR5994_UART0_ENABLE =(1U <0),
MSP_EXP430FR5994_UART1_ENABLE =(1U <1),
MSP_EXP430FR5994_UART2_ENABLE =(1U<< 2),
MSP_EXP430FR5994_UART3_ENABLE =(1U <3)
} MSP_EXP430FR5994_UARTEnable;
...
外部无效MSP_EXP430FR5994_INITUART (无符号int uartEnable);
在MSP_EXP430FR5994.c中,我更新了init,如下所示:
const UARTEUSCIA_HWAttrs uartEUSCIHWAttrs[MSP_EXP430FR5994_UARTCOUNT]={
{
.baseAddr = EUSCI_A0_BASE,
.clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
bitOrder = EUSCI_A_UART_LSB First,
numBaudrateEntries = sizeof(uartEUSCIABAUdrates)/sizeof(UARTEUSCIA_BaudrateConfig),
.baudrateLUT = uartEUSCIAUdrates
},
{
baseAddr = EUSCI_A1_BASE,
.clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
bitOrder = EUSCI_A_UART_LSB First,
numBaudrateEntries = sizeof(uartEUSCIABAUdrates)/sizeof(UARTEUSCIA_BaudrateConfig),
.baudrateLUT = uartEUSCIAUdrates
},
{
baseAddr = EUSCI_A2_BASE,
.clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
bitOrder = EUSCI_A_UART_LSB First,
numBaudrateEntries = sizeof(uartEUSCIABAUdrates)/sizeof(UARTEUSCIA_BaudrateConfig),
.baudrateLUT = uartEUSCIAUdrates
},
{
baseAddr = EUSCI_A3_BASE,
.clockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
bitOrder = EUSCI_A_UART_LSB First,
numBaudrateEntries = sizeof(uartEUSCIABAUdrates)/sizeof(UARTEUSCIA_BaudrateConfig),
.baudrateLUT = uartEUSCIaBaudrates
}
};
const UART_Config UART_CONFIG[]={
{
.fxnTablePtr =&UARTEUSCIA_fxnTable,
.object =&uartEUSCIAObjects[0],
.hwAttrs =&uartEUSCIAHWAttrs[0]
},
{
.fxnTablePtr =&UARTEUSCIA_fxnTable,
.object =&uartEUSCIAObjects[1],
.hwAttrs =&uartEUSCIHWAttrs[1]
},
{
.fxnTablePtr =&UARTEUSCIA_fxnTable,
.object =&uartEUSCIAObjects[2],
.hwAttrs =&uartEUSCIAHWAttrs[2]
},
{
.fxnTablePtr =&UARTEUSCIA_fxnTable,
.object =&uartEUSCIAObjects[3],
.hwAttrs =&uartEUSCIAUWAttrs[3]
},
{NULL, NULL, NULL}
;
/*
==== MSP_EXP430FR5994_initUART =========
*/
void MSP_EXP430FR5994_initUART (无符号int uartEnable)
{
IF (uartEnable和MSP_EXP430FR5994_UART0_ENABLE)
{
/* WFP 2.0 1 = EUSCI_A0 TXD/RXD */
GPIO _setAsPeripheralModuleFunctionOutputPin (GPIO_PORT_P2,
GPIO _PIN0,GPIO辅助模块功能);
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P2,
GPIO_PIN1,GPIO辅助模块功能);
}
IF (uartEnable和MSP_EXP430FR5994_UART1_ENABLE)
{
/* WFP 2.5 6 = EUSCI_A1 TXD/RXD */
GPIO _setAsPeripheralModuleFunctionOutputPin (GPIO_PORT_P2,
GPIO _PIN5,GPIO辅助模块功能);
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P2,
GPIO_PIN6,GPIO辅助模块功能);
}
IF (uartEnable和MSP_EXP430FR5994_UART2_ENABLE)
{
/* WFP 5.4 ,5= EUSCI_A2 TXD/RXD */
GPIO _setAsPeripheralModuleFunctionOutputPin (GPIO_PORT_P5,
GPIO _PIN4,GPIO主要模块功能);
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P5,
GPIO _PIN5,GPIO主要模块功能);
}
IF (uartEnable和MSP_EXP430FR5994_UART3_ENABLE)
{
/* WFP 6.0 1 = EUSCI_A3 TXD/RXD */
GPIO _setAsPeripheralModuleFunctionOutputPin (GPIO_PORT_P6),
GPIO _PIN0,GPIO主要模块功能);
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P6),
GPIO _PIN1,GPIO主要模块功能);
}
/*初始化UART驱动程序*/
UART_INIT();
}
我按此方式设置它,以便我选择要启用和禁用的UART。 我已单独尝试了每个,并且已尽我所能验证每个UART的GPIO已正确设置。 然后,我将以下内容添加到TI-RTOS XCD配置文件中:
halHWI.CREATE (24,"&UARTEUSCIA_hwiIntFxn",hwiParams);// UARTA3 halHWI.CREATE (43,"&UARTEUSCIA_hwiIntFxn", hwiParams);// UARTA1
为每个UART建立ISR。 然后,我将echoFxn任务更改如下:
void echoFxn (UArg arg0,UArg arg1)
{
UART_handle uartLog;
UART_HANDLE uartLoopback;
UART_Params uartParams;
/*创建数据处理关闭的UART。 */
UART_PARAM_INIT (&uartParams);
uartParams.writeDataMode = UART_DATA_binary;
uartParams.readDataMode = UART_DATA_binary;
uartParams.readReturnMode = UART_RETURE_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
uartLog = UART_OPEN (Board_UART0,&uartParams);
/*创建数据处理关闭的UART */
UART_PARAM_INIT (&uartParams);
uartParams.writeDataMode = UART_DATA_binary;
uartParams.readDataMode = UART_DATA_binary;
uartParams.readReturnMode = UART_RETURE_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
uartLoopback = UART_OPEN (Board_UART3,&uartParams);
IF((uartLog != NULL)&&(uartLoopback != NULL))
{
同时(1)
{
字符c;
CHAR数据='k';
UART_WRITE (uartLoopback,&DATA,1);
UART_READ (uartLoopback,&c,1);
UART_WRITE (uartLog,&c,1);
}
}
否则
{
/*如果UART打开,请关闭其中一个UART */
IF (uartLog!= NULL)
{
UART_CLOSE (uartLog);
}
IF(uartLoopback !=空)
{
UART_CLOSE (uartLoopback;
}
}
}
在本例中,我正在测试UART 3上的环回。 我在MSP-EXP430FR5994板上将WFP 6.0 和WFP 6.1 连接在一起。 上述代码成功地调用UART_WRITE到环回UART,但随后将在UART_READ上无限期阻止。 我也尝试过UART1,在这种情况下,我将WFP 2.5 和WFP 2.6 连接到MSP-EXP430FR5994板上。 无论哪种情况,我都无法传输UART1或UART3,然后读取发送的内容。 我的UART1和UART3设置中缺少什么?