平台: cc2650,
SDK: 2.21.0.06
例程:uartecho_CC2650_launchxl_TI
硬件:cc2650 launchpad 1.2
连线:
boardA RX <----->boardB TX
boardA TX <----->boardB RX
boardA CTS <----->boardB RTS
boardA RTS <----->boardB CTS
配置流控方式工作:
const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650_LAUNCHXL_UARTCOUNT] = {
{
.baseAddr = UART0_BASE,
.powerMngrId = PowerCC26XX_PERIPH_UART0,
.intNum = INT_UART0_COMB,
.intPriority = ~0,
.swiPriority = 0,
.txPin = Board_UART_TX,
.rxPin = Board_UART_RX,
#if 0
.ctsPin = PIN_UNASSIGNED,
.rtsPin = PIN_UNASSIGNED,
#else
.ctsPin = Board_UART_CTS,
.rtsPin = Board_UART_RTS,
#endif
.ringBufPtr = uartCC26XXRingBuffer[0],
.ringBufSize = sizeof(uartCC26XXRingBuffer[0])
}
};
const PIN_Config BoardGpioInitTable[] = {
Board_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX via debugger back channel */
Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX via debugger back channel */
Board_UART_CTS | PIN_INPUT_EN | PIN_PULLUP,
Board_UART_RTS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL,
PIN_TERMINATE
};
2个lanunchpad一个只收,一个只发。
#define BUF_SIZE 1
Void echoFxn(UArg arg0, UArg arg1)
{
char input[BUF_SIZE];
UART_Handle uart;
UART_Params uartParams;
const char echoPrompt[] = "\fEchoing characters:\r\n";
/* Create a UART with data processing off. */
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 = 115200;
uart = UART_open(Board_UART0, &uartParams);
if (uart == NULL) {
System_abort("Error opening the UART");
}
//UART_write(uart, echoPrompt, sizeof(echoPrompt));
/* Loop forever echoing */
while (1) {
UART_write(uart, &input, 1);
//UART_read(uart, &input, 1);
}
}
现象:
不配置流控时,使用CCS仿真,在接收处打断点,launchpad接收正常,确定接线没有问题。
当配置为流控方式时,UART_read(uart, &input, 1);无法读出数据,仿真发现,UART_write(uart, &input, 1);返回值为0,没有发送成功。阻塞在
/* Pend on semaphore and wait for Hwi to finish. */
if (!Semaphore_pend(Semaphore_handle(&(object->writeSem)), object->writeTimeout)) {

测量CTS和RTS都为低,发现在uart_open时被UARTCC26XX_initIO置低
static bool UARTCC26XX_initIO(UART_Handle handle)
{
...
if(isFlowControlEnabled(hwAttrs)) {
PINCC26XX_setMux(object->hPin, hwAttrs->ctsPin, IOC_PORT_MCU_UART0_CTS);
PINCC26XX_setMux(object->hPin, hwAttrs->rtsPin, IOC_PORT_MCU_UART0_RTS);
}
...
}
疑问:
1. 4线串口如何才能正常工作?有例程吗?
2. 我的4线串口配置有什么问题吗?
3. 网上资料说RTS, CTS, 空闲时应该都为高,为什么open_uart后RTS,CTS就变低了?
4. 为什么硬件没有触发中断,阻塞在Semaphore_pend