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.

[参考译文] TDA2E:处理器论坛

Guru**** 2465890 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1475068/tda2e-processors-forum

器件型号:TDA2E

工具与软件:

案例 A:

//将 GPIO_1配置为输出模式

GPIODIRModeSet (GPIO_1、GPIO_DIR_OUTPUT);

//将 GPIO_1设置为高电平

GPIOPinWrite (GPIO_1、GPIO_PIN_HIGH)

//示波器会将此处的高电平持续时间设置为350ms。  

//它与软件中定义的100ms 不一致。

BspOsal_Sleep (100u);  

//将 GPIO_1设置为低电平

GPIOPinWrite (GPIO_1、GPIO_PIN_LOW)

//示波器会将此处的低电平持续时间设置为150ms。  

//它与软件中定义的50ms 不一致。

BspOsal_Sleep (50U);  

//将 GPIO_1设置为高电平

GPIOPinWrite (GPIO_1、GPIO_PIN_HIGH)

情况 B:

//睡眠1500ms

BspOsal_Sleep (1500U);   

//将 GPIO_1配置为输出模式

GPIODIRModeSet (GPIO_1、GPIO_DIR_OUTPUT);

//将 GPIO_1设置为高电平

GPIOPinWrite (GPIO_1、GPIO_PIN_HIGH)

//示波器会将此处的高电平持续时间设置为100ms。  

BspOsal_Sleep (100u);  

//将 GPIO_1设置为低电平

GPIOPinWrite (GPIO_1、GPIO_PIN_LOW)

//示波器会将此处的低电平持续时间设置为50ms。  

BspOsal_Sleep (50U);  

//将 GPIO_1设置为高电平

GPIOPinWrite (GPIO_1、GPIO_PIN_HIGH)

如何在不引入冗余等待时间的情况下使睡眠时间尽可能准确?

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

    您在此内核上运行了什么吗? 然后、这可能会因其他 优先级任务而延迟、并且当它发生时、无法获得精确的100或50us 延迟/睡眠。  

    此致、

    Brijesh

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

    还有另一个具有相同优先级的任务、在大多数时间里它正在等待从 SPI 总线接收数据(Utils_mbxRecvMsg)。

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

    好的、但在这种情况下 、当 SPI 未被阻止时、它可能会延迟 GPIO 任务并导致睡眠需要更多的时间。  

    此致、

    Brijesh  

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

    为了消除 SPI 任务阻止的潜在影响、我们尝试在 SPI 任务的初始阶段添加睡眠阶段并降低其优先级。 如以下所示:

    //优先级低于 task_gpio

    void task_spi (void){

    //等待 TASK_GPIO 完成

    BspOsal_Sleep (1500U);  

    spi_init();

    while (1)

    WAIT_FOR_DATA_FROM_SPI ();

    }

    }

    void task_gpio (void){

    //将 GPIO_1配置为输出模式

    GPIODIRModeSet (GPIO_1、GPIO_DIR_OUTPUT);

    //将 GPIO_1设置为高电平

    GPIOPinWrite (GPIO_1、GPIO_PIN_HIGH)

    //示波器会将此处的高电平持续时间设置为350ms。  

    //它与软件中定义的100ms 不一致。

    BspOsal_Sleep (100u);  

    //将 GPIO_1设置为低电平

    GPIOPinWrite (GPIO_1、GPIO_PIN_LOW)

    //示波器会将此处的低电平持续时间设置为150ms。  

    //它与软件中定义的500ms 不一致。

    BspOsal_Sleep (50U);  

    //将 GPIO_1设置为高电平

    GPIOPinWrite (GPIO_1、GPIO_PIN_HIGH)

    }

    但问题仍然存在。 您是否可以建议任何其他故障排除方法?

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

    您是否可以先尝试完全禁用 SPI 任务、然后再 检查输出?  

    此致、

    Brijesh