【已解决】BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲
详情描述:我用的是CBU模组,芯片是BK7231,DEMO版本是BK7231N_3.3.4。有个产品控制原理是这样的:按一次按键后,触发一个IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平,我想用PWM的方式来实现,可是不知道如何才能具体操作,能不能帮忙说明一下,或者有没有DEMO。
详情描述:我用的是CBU模组,芯片是BK7231,DEMO版本是BK7231N_3.3.4。有个产品控制原理是这样的:按一次按键后,触发一个IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平,我想用PWM的方式来实现,可是不知道如何才能具体操作,能不能帮忙说明一下,或者有没有DEMO。
框架内有pwm相关的example,example的使用,请参考该帖:viewtopic.php?t=357
针对单个波形的输出PWM做不到的。建议使用定时器+GPIO的输出组合实现
直接用GPIO输出,就是用贵公司的GPIO接口函数,哪怕不用延时,输出时间都在2US以上,如果要输出1US以下的波形,有没有什么输出函数或者什么语句能实现?
15988991229 2023年 Apr 4日 07:50直接用GPIO输出,就是用贵公司的GPIO接口函数,哪怕不用延时,输出时间都在2US以上,如果要输出1US以下的波形,有没有什么输出函数或者什么语句能实现?
7231N主频80MHZ,理论上单个机器指令的执行时间在1/80MHZ,大概1/80 US,建议直接采用循环空指令的方式,估算大概多少条指令的延时可以满足你的需求,然后通过示波器来验证。
niezheyuan 2023年 Apr 4日 08:4815988991229 2023年 Apr 4日 07:50直接用GPIO输出,就是用贵公司的GPIO接口函数,哪怕不用延时,输出时间都在2US以上,如果要输出1US以下的波形,有没有什么输出函数或者什么语句能实现?
7231N主频80MHZ,理论上单个机器指令的执行时间在1/80MHZ,大概1/80 US,建议直接采用循环空指令的方式,估算大概多少条指令的延时可以满足你的需求,然后通过示波器来验证。
单指令执行周期应该是跟您说的一样,但有个问题,目前我还不清楚直接IO口输出的原函数,用的都是贵公司的接口函数
头文件是#include "tkl_gpio.h",接口函数是OPERATE_RET tkl_gpio_write(TUYA_GPIO_NUM_E pin_id, TUYA_GPIO_LEVEL_E level);
但是经过实际测试
for(i=0;i<60000;i++)
{
tkl_gpio_write(8, TUYA_GPIO_LEVEL_LOW);
tkl_gpio_write(8, TUYA_GPIO_LEVEL_HIGH);
}
结果得到的是8口输出了2.5US的方波,也就是说进入和退出接口函数是不是占用了比较长的时间,按照您的方法应该使用7231 IO口直接输出的原函数,然后再用循环空指令。所以我想请教帮忙看看,应该引用哪个函数或者哪个指令能做到?(使用的是tuyaos-bk7231n-3.3.4版本,用的DEMO是“tuyaos_demo_quickstart”)
IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平.......我之前用常规MCU写这样的电平脉冲是比较简单能实现的,只要MCU速度够快,就是IO口直接语句输出,再加空循环延时实现。
所以我想请教怎么样才能用BK7231N_3.3.4直接IO口输出高低电平?麻烦帮忙看看应该用哪个函数或者指令实现?
15988991229 2023年 Apr 4日 10:46IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平.......我之前用常规MCU写这样的电平脉冲是比较简单能实现的,只要MCU速度够快,就是IO口直接语句输出,再加空循环延时实现。
所以我想请教怎么样才能用BK7231N_3.3.4直接IO口输出高低电平?麻烦帮忙看看应该用哪个函数或者指令实现?
好的,输出延时的问题我们内部在确认和验证。
hearge 2023年 Apr 4日 11:1515988991229 2023年 Apr 4日 10:46IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平.......我之前用常规MCU写这样的电平脉冲是比较简单能实现的,只要MCU速度够快,就是IO口直接语句输出,再加空循环延时实现。
所以我想请教怎么样才能用BK7231N_3.3.4直接IO口输出高低电平?麻烦帮忙看看应该用哪个函数或者指令实现?
好的,输出延时的问题我们内部在确认和验证。
好的,引用接口函数是方便了我们,但这个IO接口函数的输出有超过2US的延时,请尽量帮我们解决这个问题,这样我们再设计产品的时候IO口能能灵活使用.
*((volatile unsigned int *)(0x0802800 +(8 * 4))) = 0x2;
*((volatile unsigned int *)(0x0802800 +(8 * 4))) = 0x0;
您好,可以使用上面直接操作寄存器试下效果,8对应gpio号。