che****com
您好,
最近在调试WS2812E,由于GR551X的PWM不能实现对其的驱动,所以用延时的方式实现。所以请问一个NOP()大概是多长时间?还有就是如图,如果中间没有NOP,那么一个GPIO从SET到RESET之间的时间是多少?能达到WS2812E所需要的时间吗?
Darren
1.NOP为单周期指令,执行时间为一个系统时钟,如果系统时钟为64MHz,则NOP执行时间为1/64M
2.如果需要快速翻转IO可以在初始化完成后调用ll层函数如:ll_gpio_set_output_pin\ll_gpio_reset_output_pin,ll_gpio_toggle_pin,AON_GPIO\MSIO同理,此外函数放在SRAM执行可以进一步提高速率,在函数名前加SECTION_RAM_CODE即可。
3.根据所提供的时序图,所需IO最大翻转速率约为2MHz,可以使用GR551X系列实现(GR551X IO翻转最快约为4MHz)。
如下为GPIO PIN2输出指定个数脉冲波形参考代码,您可以实测一下:
SECTION_RAM_CODE void output_n_pulse(uint32_t pulse_num)
{
while(pulse_num--)
{
ll_gpio_set_output_pin(GPIO0, LL_GPIO_PIN_2);
__nop();
ll_gpio_reset_output_pin(GPIO0, LL_GPIO_PIN_2);
__nop();
}
}
打开微信,使用“扫一扫”即可关注