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.

[参考译文] LP-CC2652R7:Display_open()和 UART2_open()同时打开?

Guru**** 2465890 points


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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1159834/lp-cc2652r7-display_open-and-uart2_open-simultaneously

器件型号:LP-CC2652R7

我希望使用 TI 显示驱动程序将 Display_printf()从 UART 中输出。 我让它工作。
我希望使用 UART2驱动程序来读取进入 UART 的字符。 我让它工作。
但是、两者不同时存在。 它是一个或另一个。 换言之,系统似乎不可能同时执行 Display_open()和 UART2_open(),即使前者仅用于将字节从 UART 中写入,后者则用于从 UART 中读取字节。 如何解决此约束?

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

    注意:几个小时后、我终于到达了以下逻辑、似乎为我提供了我想要的东西。 这可以解决我的问题。

    #include
    #include
    #include
    #include "ti_drivers_config.h"

    typedef void (* IncomingUartChar_CallBackType)(char IncomingUartChar);
    display_handle display;//由各种 Display_printf()宏使用
    静态 char rxBuf[20];
    静态 IncomingUartChar_CallBackType CachedClientCallback;

    静态空 uartRxCallback (UART2_Handle handle、void * buf、size_t count、void * userArg, int_fast16_t status)

       /*注意:此回调在中断上下文中运行。 *
       memcpy (rxBuf、buf、count);
       CachedClientCallback (rxBuf[0]);//将传入字符沿... *
       UART2_READ (handle、&rxBuf、1、NULL);


    空 SetupSystemPrintf (IncomingUartChar_CallBackType ClientCallback_ForAnyIncomingUartBytes)

       {  //注:这样设置的目的是为了 Display_printf()将字节从 UART 中推出。 *
           display_init();//需要自动派生的 ti_drivers_config.c 源文件的 Display_config 结构。
           Display = Display_open (Display_Type_UART、NULL);
       }
       {  //注:此处我们调整了 Display_open()设置的 UART,例如更改读取
                    将模式更改为 UART2_Mode_callback 并设置 readCallback、以便我们可以查看
                    任何字符。 Display 驱动程序不关心传入
                    字符,因为它仅根据 Display_printf()将字符发送出去
                    调用。 但是、进入的字符是客户可能想要处理的内容;如果是
                    呼叫者提供了一个 ClientCallback、我们将在其上转发这些字符。 是的
                    用户在提供输入的外部终端窗口键入的字符
                    UART。
           *
           if (显示&& ClientCallback_ForAnyIncomingUartBytes){
               CachedClientCallback = ClientCallback_ForAnyIncomingUartBytes;
               DisplayUart2_Object *对象=(DisplayUart2_Object *)显示->对象;
               UART2_Handle Uart2Handle = object->hUart;
               UART2_Object* uart2Object = UART2Handle->object;
               if (uart2Object){
                   uart2Object->readCallback = uartRxCallback;
                   uart2Object->state.readMode = UART2_Mode_callback;
                   {  /*使用 UART2_read()来进行主函数处理。 然后、每当第一个时
                          char 到达 readCallback()将保持运行。
                       *
                       UART2_READ (UART2Handle、&rxBuf、1、NULL);
                   }
               }
           }
       }

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

    您好!

    感谢您分享您的解决方案。

    此致、