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:未进入 UART 接收中断

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1483282/cc2340r5-uart-receive-interrupt-not-entered

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

工具与软件:

你好。


我正在使用 CC2340R5和 UART 模块。
当我们从 SDK 8.20升级到8.40时、我们发现 UART 接收中断不再可行。


虽然仍在分析中、但 UART 本身已启用、并且可以进行 NONBLOKING 传输。
接收使用具有 FIFO 的回调。
其实现方式与驱动程序手册中的示例完全相同。


好像 SDK 更改后引入了一个导致接收中断无法接收的因素、但即使花了几天时间、问题仍然没有得到解决。
我希望得到您的支持。


非常感谢。

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

    您好!

    感谢您联系我们! 我将对此进行探讨、然后回复给您。 同时、您表示您使用的是驱动程序示例。 您使用的是哪个示例?

    此致、

    Tarek

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

    你好。


    未使用 SDK 示例。
    它是通过访问 SDK 中的 docs > drivers > tidriversAPIs.html 并参考 UART2.h 文件参考详细说明创建的。

    谢谢。

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

    您好!

    我正在做这个工作,希望我能在 星期一 (03-10)之前回复. 感谢您的耐心。

    此致、

    Tarek

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

    您好!

    感谢您的耐心等待! 我无法重现问题、即使我尝试了所有可能的模式。 您能否提供一个代码片段、以便帮助我更好地了解正在发生的情况?

    此致、

    Tarek

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

    你好。


    感谢您的确认。
    我将向您发送代码片段。
    我省略了解释这一点、但使用一个 UART 模块在两条通信线路之间进行切换。
    所用的通信线路如下表所示。

    Comm \ 端口 接收 TX
    UART 0 DIO 12 DIO 13.
    UART1 DIO 16. 迪奥17.

    这是在任何时序/条件下切换 UART 的代码片段。

    static void Callback_UART(UART2_Handle Handle, void *Buffer, size_t Count, void *UserArg, int_fast16_t Status);
    static void Callback_UART1(UART2_Handle Handle, void *Buffer, size_t Count, void *UserArg, int_fast16_t Status);
    void UART_InitUART( void );
    void UART_InitUART1( void );
    UART_StopUART( void );
    UART_StopUART1( void );
    
    UART2_Handle Handle;
    UART2_Handle Handle1;
    static uchar UartState = 0U;
    static uchar Uart1State = 0U;
    static uchar UartRDataBuf[UART_DATA_BUF_SIZE];
    
    void switchUART()
    {
        UART_StopUART1();
        UART_Init();
    }
    
    void switchUART1()
    {
        UART_StopUART();
        UART1_Init();
    }
    
    void StopUART( void )
    {
    	if( UartState != 0U )
    	{
    		UART2_close( Handle );
    		UartState = 0U;
    	}
    }
    
    void StopUART1( void )
    {
    	if( Uart1State != 0U )
    	{
    		UART2_close( Handle1 );
    		Uart1State = 0U;
    	}
    }
    
    void UART_Init( void )
    {
    	UART2_Params UartParams;
    	int_fast16_t Status;
    
    	/* Create a UART where the default read and write mode is BLOCKING */
    	UART2_Params_init(&UartParams);
    	UartParams.readMode = UART2_Mode_CALLBACK;
    	UartParams.writeMode = UART2_Mode_NONBLOCKING;
    	UartParams.readCallback = Callback_UART;
    	UartParams.baudRate = 38400U;
    
    	// initialize a given UART peripheral
    	if( UartState == 0U )
    	{
    		Handle = UART2_open(0, &UartParams);
    		UartState = 1U;
    		if (Handle == NULL)
    		{
    			while(1);
    		}
    
    		UART2_rxEnable(Handle);
    		Status = UART2_read(Handle, &UartRDataBuf, UART_DATA_BUF_SIZE, NULL);       // Don't remove for read callback
    		if( Status != UART2_STATUS_SUCCESS )
    		{
    			while(1);
    		}
    	}
    }
    
    void UART1_Init( void )
    {
    	UART2_Params UartParams;
    
    	int_fast16_t Status;
    
    	/* Create a UART where the default read and write mode is BLOCKING */
    	UART2_Params_init(&UartParams);
    	UartParams.readMode = UART2_Mode_CALLBACK;
    	UartParams.writeMode = UART2_Mode_NONBLOCKING;
    	UartParams.readCallback = Callback_UART1;
    	UartParams.baudRate = 9600U;
    
    	if( Uart1State == 0U )
    	{
    		Handle1 = UART2_open(1, &UartParams);
    		Uart1State = 1U;
    		if (Handle1 == NULL)
    		{
    			while(1);
    		}
    
    		UART2_rxEnable(Handle1);
    		Status = UART2_read(Handle1, &UartRDataBuf, UART_DATA_BUF_SIZE, NULL);       // Don't remove for read callback
    		if( Status != UART2_STATUS_SUCCESS )
    		{
    			while(1);
    		}
    	}
    
    }

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

    您好 Kei、

    感谢您提供代码! 这段代码对我来说很好。 UART 在 SDK 中可以完全正常工作、因此我仍然不了解导致此问题的原因。 回调函数在做什么? 您能否提供该函数的说明或者可能的代码片段?

    此致、

    Tarek

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

    你好。

    回调函数接收数据并检查是否存在错误。


    callback_UART
    UART2_read (handle、&UartRDataBuf、UART_DATA_BUF_SIZE、NULL);


    callback_UART1
    UART2_read (Handle1、&UartRDataBuf、UART_DATA_BUF_SIZE、NULL);

    谢谢你。

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

    您好 Kei、

    感谢您提供此功能! 为了澄清一点、您说的是、永远不会调用回调函数?

    此致、

    Tarek

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

    您好!

    有。
    您的理解是正确的。

    此致、

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

    您好 Kei、

    非常感谢您的耐心! 我无法重现此问题、因为我最后的 UART 回调运行正常 您能否尝试测试 SDK 中提供的 uart2callback 示例、看看是否可行? 该工程位于 SDK 内部的以下位置:

    示例-> RTOS -> LP_EM_CC2340R5 ->驱动程序-> uart2callback

    请对此进行测试、并告知我它是否起作用。

    此致、

    Tarek

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

    您好!

    我明白了。
    用一个例子来重新审视一个现象的意义是什么?
    我想尝试一下、但我没有足够的时间来实施。


    是否有其他方法可以解决此问题?
    例如、simplelink_lowpower_f3_sdk 8.20和8.40中进行的任何可能导致此问题的更改?

    此致、

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

    您好 Kei、

    进一步了解这一点、您是对的! 新的 SDK (8.40)进行了一些更改。 我附上了一个执行 UART 切换的项目。 我相信基于该函数构造 UART 调用会很有帮助! 如果您有任何其他问题、请告诉我。

    e2e.ti.com/.../uart2switching_5F00_echo_5F00_CC2340R53.zip

    此致、

    Tarek

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

    感谢你的帮助。

    我想知道要从 SWD 引脚更改为 UART1的源代码。

    此外、从 UART1引脚改为 SWD 引脚的源代码是否正确?
    如果有问题、请进行修复。

    以下是源代码。

    #define UART1_RX 16
    #define UART1_TX 17
    
    void SetPortUART( void );
    void SetPortSWD( void );
    
    // Change from SWD to UART1
    void SetPortUART( void )
    {
    	GPIO_resetConfig(UART1_RX);
    	GPIO_resetConfig(UART1_TX);
    
    	(void)GPIO_setConfig(UART1_RX, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_NONE );
    	(void)GPIO_setConfig(UART1_TX, GPIO_CFG_OUTPUT_INTERNAL | GPIO_CFG_OUT_STR_MED | GPIO_CFG_OUT_HIGH);
    	HWREG(DBGSS_BASE + DBGSS_O_DBGCTL) = 0U;
    }
    
    // Change from UART1 to SWD
    void SetPortSWD( void )
    {
    	GPIO_resetConfig(UART1_RX);
    	GPIO_resetConfig(UART1_TX);
    
    	HWREG(DBGSS_BASE + DBGSS_O_DBGCTL) |= DBGSS_DBGCTL_SWDCEN_EN;
    }

    此致、

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

    您好!

    如附加的示例所示、GPIO 配置应如下所示:

       GPIO_setConfigAndMux(newTxPin, GPIO_CFG_OUTPUT_INTERNAL | GPIO_CFG_OUT_STR_MED | GPIO_CFG_OUT_HIGH, newTxMux);
       GPIO_setConfigAndMux(newRxPin, GPIO_CFG_INPUT_INTERNAL | GPIO_CFG_IN_INT_NONE | GPIO_CFG_PULL_DOWN_INTERNAL, newRxMux);

    UART 1 -> DIO13和 DIO12
    UART 2 -> DIO20和 DIO22

    设置如上所述的引脚后、开关应起作用。

    此致、

    Tarek

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

    您好、Tarek、

    我检查了您的建议和源代码。
    我们在定制板上进行了再现测试。
    不幸的是,这个问题没有解决。


    为了解决此问题、我还可以考虑其他什么因素吗?

    [报价 userid="640363" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1483282/cc2340r5-uart-receive-interrupt-not-entered/5716135 #5716135"]

    进一步了解这一点、您是对的! 新的 SDK (8.40)进行了一些更改。 我附上了一个执行 UART 切换的项目。 我相信基于该函数构造 UART 调用会很有帮助! 如果您有任何其他问题、请告诉我。

    uart2switching_echo_CC2340R53.zip

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

    您好 Kei、

    很抱歉耽误你的时间。 我正在研究这个问题!

    此致、

    Tarek

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

    您好 Kei、

    感谢您的耐心。 是否会在 LaunchPad 上出现此行为? 如果您尚未进行测试、能否测试我之前随附的示例并告知我?

    此致、

    Tarek

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

    您好、Tarek、

    感谢您的考虑。
    我在下面的线程中进行了更改、问题已解决。
    将 SysConfig 从1.20版升级到1.22版时、缺少更改。

    https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1491981/cc2340r5-swdio-and-swdck-are-also-used-as-uart/5731021#5731021

    谢谢你。