蓝牙技术
直播中

HTSX

9年用户 786经验值
擅长:可编程逻辑
私信 关注
[问答]

AIROC CYW20820设置GPIO TOGGLE的时间与示波器上的时间不一致是为什么?

我下载了一个RFCOMM_serial _Port的例程,想在里面添加一些GPIO端口反转的程序,程序如下:无效key_deal(uint32_t arg) { uint16_t i = 0,j = 0;而(WICED_TRUE) {          //  wiced_rtos_get_semaphore(key_semaphore, WICED_WAIT_FOREVER);            wiced_hal_gpio_set_pin_output(CS, 1);            // wiced_hal_gpio_set_pin_output(CLK, 1);             wiced_hal_gpio_set_pin_output(CS, 0);                 //wiced_rtos_delay_milliseconds(SLEEP_tiMEOUT, ALLOW_THREAD_TO_SLEEP);                is_thread_running = WICED_FALSE;        }}很简单的程序,我把GPIO的反转当做一个独立的线程,而且优先级很高,没有任何延迟,我的晶振是24Mhz的,其实CYW20820通过锁相环GPIO应该有96Mhz,但是在示波器上看为什么两级反转总是在4us左右,感觉是东西被占用了,或者是时钟没有设置好,但是我看库函数没找到时钟设置的函数此外,我在示波器上看到它一分钟,然后它停止了,然后又开始了

回帖(1)

池鹄展

2024-7-24 17:38:03
首先,我们需要了解问题的关键点。你提到了在AIROC CYW20820上设置GPIO TOGGLE的时间与示波器上的时间不一致。这可能是由于以下几个原因:

1. 代码中的延时问题:在GPIO TOGGLE操作中,可能存在一些延时,导致实际的TOGGLE时间与预期的不一致。

2. 示波器的采样率问题:示波器的采样率可能不足以捕捉到所有的GPIO TOGGLE事件,从而导致测量时间与实际时间不一致。

3. 硬件问题:可能是由于硬件连接或设备本身的问题,导致GPIO TOGGLE的时间与示波器上的时间不一致。

现在,我们来分析你提供的代码片段。这段代码是一个无效的key_deal函数,它接收一个uint32_t类型的参数arg。在while循环中,你使用了wiced_hal_gpio_set_pin_output函数来设置GPIO引脚的输出状态。然而,这段代码并没有提供完整的GPIO TOGGLE操作,也没有包含延时函数。

为了解决这个问题,你可以尝试以下步骤:

1. 在代码中添加延时函数,例如wiced_delay_milliseconds(),以确保GPIO TOGGLE操作有足够的时间间隔。

2. 检查示波器的采样率设置,确保它能够捕捉到所有的GPIO TOGGLE事件。

3. 检查硬件连接和设备,确保没有故障或问题。

4. 如果可能的话,使用其他工具或方法来验证GPIO TOGGLE的时间,以排除示波器的问题。

以下是一个修改后的示例代码,其中添加了延时函数:

```c
void invalid_key_deal(uint32_t arg) {
    uint16_t i = 0, j = 0;
    while (WICED_TRUE) {
        // wiced_rtos_get_semaphore(key_semaphore, WICED_WAIT_FOREVER);
        wiced_hal_gpio_set_pin_output(CS, 1);
        wiced_delay_milliseconds(10); // 添加延时函数,以确保足够的时间间隔
        wiced_hal_gpio_set_pin_output(CS, 0);
        wiced_delay_milliseconds(10); // 同上

        // 可以根据需要添加其他GPIO TOGGLE操作
    }
}
```

希望这些信息能帮助你解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助你。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分