工具与软件:
大家好、TI 专家:
我使用带 FreeRTOS 的 AM2431作为系统。 在一个线程中、我需要控制多个 GPIO 高电平/低电平信号作为控制信号来管理外设。 我使用 for 环路输出连续信号、但我注意到信号设为低电平时延迟更长。
void my_delay(uint32_t ticks) { volatile uint32_t delay; hGpio1->BANK_REGISTERS[0].SET_DATA = 0x00000400; for (delay = 0; delay < ticks; delay++) { NOP_DELAY; } hGpio1->BANK_REGISTERS[0].CLR_DATA = 0x00000400 } for (scanline = 18; scanline > 0; scanline--) { / for (channel = 16; channel > 0; channel--) { for (driver = 20; driver > 0; driver--) { value = hGpio1->BANK_REGISTERS[0].OUT_DATA; value |= (((Value1 << 1); value |= (((Value2 << 10); value |= (((Value3 << 13); value |= (((Value4 << 21); value |= (((Value5 << 22); value |= (((Value6 << 30); hGpio1->BANK_REGISTERS[0].OUT_DATA = value; my_delay(delayTime); } } }
为了使我的 GPIO 控制尽可能稳定、我没有使用vTaskDelay
。 相反,我使用了一个for
NOP_DELAY
内部循环,以防止该过程切换到其他线程。 不过、我注意到输出波形出现了一些异常。 我在延迟前后添加了一个 GPIO 切换开关、并通过使用逻辑分析仪观察该 GPIO、发现低电平时间几乎是高电平时间的两倍。 我在中找不到设置 GPIO 速度的选项syscfg
、但简单的for
循环应该不会有这种效果。 我还尝试了删除值运算、但低电平时间仍然没有减少。 是否有改进的方法?
此致、
Larry