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.

[参考译文] CC2340R5:UART2、回调模式连续读取

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1363778/cc2340r5-uart2-callback-mode-continuous-read

器件型号:CC2340R5
主题中讨论的其他器件:SysConfig

是否可以使用此驱动程序进行连续的数据接收? 问题是、由于缺少 RAM、我无法缓冲整个帧。 目前、我对 UART - 32B 使用一个小缓冲区、在 Rx 回调中、我将数据复制到环缓冲区、并从回调中再次开始数据接收。 问题是、有时会有1字节的数据丢失。


阿尔杜尔

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

    您好 Artur Watala、

    如果您尚未参考这些示例、我们在此处提供了一些很好的 UART 示例: UART2.h 文件参考。

    我们还可以尝试将缓冲器增加到33。

    你是谁?

    您从项目的哪个基础示例开始?

    谢谢。
    Akex F

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

    静态 void init_function()
    {
    //在回调读取模式中创建 UART
    UART2_PARAMS_INIT (&uartParams);
    uartParams.readMode = UART2_Mode_callback;
    uartParams.writeMode = UART2_Mode_callback;
    uartParams.readCallback = callbackFxnRx;
    uartParams.writeCallback = callbackFxnTx;
    uartParams.baudrate =波特率;
    uartParams.userArg = NULL;

    uart = UART2_open (portIndex、&uartParams);

    if ( uart != NULL )
    {
    UART2_READ (uart、dmaRxBuffer、UART_DMA_READ_BUF_SIZE、NULL);//启动 DMA Rx
    返回 true;


    静态 void callbackFxnRx (UART2_handle handle,void *buffer,size_t count,void *userArg,int_fast16_t status)
    {
    if ( status != UART2_STATUS_SUCCESS )
    {
    /* UART2_READ()中发生 RX 错误*/

    if ( cbuffer_write (&cbuffer_rx, dmaRxBuffer, count )< count )
    {
    /* cbuffer 溢出*/

    UART2_READ (uart、dmaRxBuffer、UART_DMA_READ_BUF_SIZE、NULL);//开始下一个 DMA 传输

    它看起来是这样的。 如果缓冲区在发送期间被填满、数据似乎会在 DMA 重新启动期间丢失。 但并非总是如此。 将缓冲区增加1个字节会有什么变化吗?

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

    您好 Artur  

    您是否在任何地方设置了返回模式?  

    您可以根据应用程序专门定义完整或部分、以查看其他设置是否有助于解决问题。  

    您是否尝试使用信标来保护回调或数据以便让缓冲区正确放电?

    谢谢。
    A·F

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

    您好!

    对、我忘记设置 ReadReturMode 参数、但遗憾的是、这没有解决问题。  我将缓冲区读数包含在关键段中、但这并没有什么帮助。  使用逻辑分析仪、可以看到程序处于 Rx 回调模式时发送的字节丢失。  

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

    您好 Artur、

    我想问您在 SysConfig 中将 RX Ring 缓冲区大小设置为什么、是否会有问题:  

    有一些可能值得一读的 E2E 帖子:  

    https://e2e.ti.com/f/1/t/1325156/

    https://e2e.ti.com/f/1/t/1275776/

    谢谢。
    A·F