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.

[参考译文] CC3200:我无法使用 CC3200 UART1中的中断来传输多个字节

Guru**** 2562120 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/882628/cc3200-i-am-not-able-to-transfer-multiple-bytes-using-interrupt-in-cc3200-uart1

器件型号:CC3200

您好!

我希望在 UART1中接收到命令后发送多个字节。 我已经成功执行了接收部分 、但是响应无法通过 TX 中断传输。

请与我分享参考代码、基于回波的传输除外。

我很困惑、我们应该使用哪个 API 通过主  子例程的中断来传输多个数据。

此致、

GK

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在这里 、您可以找到具有 UART 的 TX 示例。 该示例使用 UART0、需要自行将其更改为 UART1。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Jan 的快速回复。

    我不明白为什么我们也需要从主例程和 Tx 中断处理程序发送相同的数据缓冲区。

    如果我们要通过 MAP_UARTCharPutNonBlocking ()在 UARTDT 缓冲区中加载数据、则它应该在该中断之后触发 剩余数据的中断、同样的事情应该只发生在主例程中。  

    我只是想了解非阻塞功能的概念。

    此致、

    GK

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    有许多关于如何使用 UART 发送数据的概念。 在该示例中、使用了外设的硬件 FIFO 缓冲器。 由于 FIFO 缓冲区只有几个字节、您需要发送更多字节、因此您需要多次填充该 FIFO。 在开始时、您会在某些任务中填充缓冲器缓冲器以开始传输。 其余的 TX 数据在 UART 中断处填充。

    我检查了我的最新代码、当我在任务中填充 TX FIFO 时、似乎也禁用了 UART TX 中断:

    MAP_UARTIntDisable (serial_UART、UART_INT_TX);
    while ((MAP_UARTSpaceAvail (serial_UART))&&(cmdTxToSendLen > 0){
    MAP_UARTCharPutNonBlocking (serial_UART、cmdEngRespBuffer[cmdTxPos+]);cmdTxToSendLUNT_UARTxTxTxN
    
    };UARTxIntUART-
    (serial_UARTxPos+) 

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我的情况下、我不使用 FIFO、因为我希望发送更多字节、FIFO 限制为16字节。 因此、我正在寻找这样的解决方案、而不是使用 FIFO、而是如何通过中断发送多个数据。  

    我在发送数据时触发函数下面的函数、因此在发送数据时、如果我在调试模式下将断点置入、则会起作用、但在运行模式下不起作用。 在中断处理程序中、我只是清除 Tx 中断标志、没有其他东西。

    void UART_SendData (unsigned char * TransData、unsigned char ullengthofdata)

    while ((map_UARTSpaceAvail (device))&&(ullengthofdata >0))

    //map_UARTCharPutNonBlocking (device、* TransData);
    MAP_UARTCharPut (器件、*传输数据);
    TransData++;
    超长数据--;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果您需要发送超过16个字节、您可以使用 FIFO、如我的上述代码所示。

    为什么在不使用 UART TX 中断并且只从任务(函数 UART_SendData())发送数据时注册了它们? 这毫无意义。

    BTW... 很明显、您的函数不起作用的原因。 通过该函数填充 FIFO、当 FIFO 已满时、您停止发送数据。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此函数的目的是加载数据并触发 UART 中断。 在您的代码中,当我想发送 数据时,如何触发 TX 中断?

    由于该 SDK 混淆了如何使用 UART 寄存器。
    请帮助我如何通过 UART 中断从主任务发送数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以在 TRM 找到 CC3200中的 UART 硬件工作原理。 上面我的代码显示了通过中断从主任务发送数据。 TX 中断在发送主任务中填充的数据的第一部分后被触发。 在该 UART TX 中断中、您将填充其余数据。

    我不确定您在寻找什么、因为第一个答案的链接会准确显示您所要求的内容。

    1月