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.

cc2650 4线串口 无法正常工作

Other Parts Discussed in Thread: CC2650

平台: 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