工具与软件:
大家好、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。 相反,我使用了一个forNOP_DELAY内部循环,以防止该过程切换到其他线程。 不过、我注意到输出波形出现了一些异常。 我在延迟前后添加了一个 GPIO 切换开关、并通过使用逻辑分析仪观察该 GPIO、发现低电平时间几乎是高电平时间的两倍。 我在中找不到设置 GPIO 速度的选项syscfg、但简单的for循环应该不会有这种效果。 我还尝试了删除值运算、但低电平时间仍然没有减少。 是否有改进的方法?
此致、
Larry



