Page 1 of 2

【已解决】BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 3日 08:23
by 15988991229

详情描述:我用的是CBU模组,芯片是BK7231,DEMO版本是BK7231N_3.3.4。有个产品控制原理是这样的:按一次按键后,触发一个IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平,我想用PWM的方式来实现,可是不知道如何才能具体操作,能不能帮忙说明一下,或者有没有DEMO。


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 3日 17:32
by yingtao_33

框架内有pwm相关的example,example的使用,请参考该帖:viewtopic.php?t=357


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 3日 18:24
by hearge

针对单个波形的输出PWM做不到的。建议使用定时器+GPIO的输出组合实现


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 4日 07:50
by 15988991229
hearge 2023年 Apr 3日 18:24

针对单个波形的输出PWM做不到的。建议使用定时器+GPIO的输出组合实现

直接用GPIO输出,就是用贵公司的GPIO接口函数,哪怕不用延时,输出时间都在2US以上,如果要输出1US以下的波形,有没有什么输出函数或者什么语句能实现?


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 4日 08:48
by niezheyuan
15988991229 2023年 Apr 4日 07:50
hearge 2023年 Apr 3日 18:24

针对单个波形的输出PWM做不到的。建议使用定时器+GPIO的输出组合实现

直接用GPIO输出,就是用贵公司的GPIO接口函数,哪怕不用延时,输出时间都在2US以上,如果要输出1US以下的波形,有没有什么输出函数或者什么语句能实现?

7231N主频80MHZ,理论上单个机器指令的执行时间在1/80MHZ,大概1/80 US,建议直接采用循环空指令的方式,估算大概多少条指令的延时可以满足你的需求,然后通过示波器来验证。


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 4日 10:35
by 15988991229
niezheyuan 2023年 Apr 4日 08:48
15988991229 2023年 Apr 4日 07:50
hearge 2023年 Apr 3日 18:24

针对单个波形的输出PWM做不到的。建议使用定时器+GPIO的输出组合实现

直接用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”)


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 4日 10:46
by 15988991229

IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平.......我之前用常规MCU写这样的电平脉冲是比较简单能实现的,只要MCU速度够快,就是IO口直接语句输出,再加空循环延时实现。

所以我想请教怎么样才能用BK7231N_3.3.4直接IO口输出高低电平?麻烦帮忙看看应该用哪个函数或者指令实现?


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 4日 11:15
by hearge
15988991229 2023年 Apr 4日 10:46

IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平.......我之前用常规MCU写这样的电平脉冲是比较简单能实现的,只要MCU速度够快,就是IO口直接语句输出,再加空循环延时实现。

所以我想请教怎么样才能用BK7231N_3.3.4直接IO口输出高低电平?麻烦帮忙看看应该用哪个函数或者指令实现?

好的,输出延时的问题我们内部在确认和验证。


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 4日 11:28
by 15988991229
hearge 2023年 Apr 4日 11:15
15988991229 2023年 Apr 4日 10:46

IO口发一个1US高电平,2US低电平,然后再发一个500NS高电平,1US低电平.......我之前用常规MCU写这样的电平脉冲是比较简单能实现的,只要MCU速度够快,就是IO口直接语句输出,再加空循环延时实现。

所以我想请教怎么样才能用BK7231N_3.3.4直接IO口输出高低电平?麻烦帮忙看看应该用哪个函数或者指令实现?

好的,输出延时的问题我们内部在确认和验证。

好的,引用接口函数是方便了我们,但这个IO接口函数的输出有超过2US的延时,请尽量帮我们解决这个问题,这样我们再设计产品的时候IO口能能灵活使用.


Re: BK7231N_3.3.4如何用PWMIO口连续发不同评率的高速电平脉冲

Posted: 2023年 Apr 4日 11:43
by hearge

*((volatile unsigned int *)(0x0802800 +(8 * 4))) = 0x2;
*((volatile unsigned int *)(0x0802800 +(8 * 4))) = 0x0;
您好,可以使用上面直接操作寄存器试下效果,8对应gpio号。