[问题] 如何打出MHz等级的方波

楼主: knight30115 (无敌人)   2015-11-01 15:47:31
各位好,
目前小弟正在尝试使用AR9331+openwrt的系统实作一个方波,
目的是为了看这个系统打出来的方波可以到多快,最终会用这个波去控制RGB LED灯。
我使用的方法是用hrtimer写一个module,
hrtimer的interrupt时间我设为5000(5us),
每一次进入interrupt就反向gpio_out,并且用gpio_set_value指定出去。
但是我看示波器量到的结果,
他反向的时间有时候会是3us,有时候是8us,且是随机的,
有时候是high转low时为3us有时是8us,low转high时也是,
但如果把interrupt设到8000以上的话,示波器上看到的结果是正确的(反向频率125Khz)。
所以我想会不会是这两个function实际上跑的指令跟想像中不太一样,
我有试着让这个module在编译时留下assembly code,
但是加上-save-temps也没办法,所以没办法追到它实际执行的指令是哪些。
目前还想尝试的是..不使用interrupt而是直接用while loop,
看看他最快可以到哪里..但是这样之后openwrt如果有跑其他process,
再排程下来,好像就更难捉摸它的速度会变成什么了。
所以目前我算是没有别的办法了orz
请问各位有其他方法可以帮助我再逼出这个CPU的速度吗?
谢谢
作者: james732 (好人超)   2015-11-01 15:59:00
没有硬件的PWM可以用吗?
楼主: knight30115 (无敌人)   2015-11-01 16:02:00
好像没有 我反复看了几次datasheet没看到PWM的关键字google后好像都是用gpio来实作的
作者: wtchen (没有存在感的人)   2015-11-01 16:37:00
gpio+dma ? RPi印象中可以这样弄,google pigpio
楼主: knight30115 (无敌人)   2015-11-01 16:59:00
!! 好像可行 看到有人最快做到15MHz感谢!! 我研究一下看看怎么写的 谢谢!!

Links booklink

Contact Us: admin [ a t ] ucptt.com