查看: 880|回复: 0

【LeMaker Guitar】GoS500库 -- 3.PWM

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-5-19 09:08:17 | 显示全部楼层 |阅读模式
    分享到:
    要使用炬力S500的PWM,需要先指定端口的复用功能,然后选择合适的时钟源,最后还要再打开对应的时钟。这些都不是问题,因为一般不管是大ARM还是小ARM都有可能会有这几步操作,只是炬力S500的设计比较怪异,PWM寄存器没有单独成为一种外设,而是和GPIO混在了一起。而且这还不是最主要的问题,更要命的是在粗略的看了下参考手册之后我居然没有看懂怎样设置IO和其他功能的设置方法。
        打开手册,找到引脚功能说明的地方,每个引脚各种功能都被详细的列出来了,这个不错,看着挺清晰的

        在这里可以看到PWM对应的各个引脚和IO口,功能1就是GPIO,所有的PWM都是功能2。
        然后回到GPIO寄存器说明部分,找到功能复用寄存器

        同样在说明里看到了PWM的设置。然而问题来了,以这个LCD0_D18为例,先不管它到底是PWM2还是PWM4,这里只有其他功能的设置方法,如果我想把它变回GPIO,找不到对应的值了,百思不得其解。仔细阅读手册之后才发现端倪,也就是炬力S500比较特别的地方

        还记得在上一节使用GPIO时用到的两个寄存器吗,OUTEN和INEN,这里的意思是说如果这两个寄存器只要其中的一个为Enable,那么这个端口就是IO口,如果全Disable了,那么它才能配置成复用的功能。而且无论在任何时候,只要打开了这两个寄存器的任意一个,马上就变回了GPIO。
        看到这里终于明白了复用寄存器里为什么没有GPIO对应的值了,真不知道这样的设计应该称赞为巧妙还是视为异类,至少和一般开发者的思路不一样,就理解为S500自己的特点吧,亦或是我孤陋寡闻少见多怪了,呵呵。不过确实给像我这样的只看寄存器不看说明的初学者造成了麻烦,而且也给代码编写带来了不便。
        复用问题解决了,其他相关的还有时钟的指定


    指定时钟源和分频,别忘了还要打开时钟。
        所有的东西搞明白了,继续编写程序,这次不得不在这个库里增加另外两个文件MFP.go和CMU.go。MFP.go里实现了所有复用功能设置的函数;CMU.go实现了各种功能的时钟设置。不过因为功能太多,现在只是用到了哪个写哪个,其他的没有包含进来,可以随时自己添加,而且这两个文件在写用户程序时用不到,所以可以暂时不用考虑。
        代码就不列出来了,可以到https://github.com/tjCFeng/GoS500/tree/master/S500中查看。
        真正面向开发者的,还是PWM.go这个文件。由于同一个引脚,可能会包括多个PWM功能,只是通道不一样,我不得不写成这样,先创建一个GPIO,然后再创建基于这个GPIO的PWM,给调用带来了麻烦

        没有办法,我也不想这样,先这样凑合吧:-)。
        剩下的东西就很简单了什么分频、周期、占空比的,是多少就原封不动的设置成多少,然后再通过指定打开关闭Clock来当成Start、Stop就完了。
        程序写完了要测试一下,Guitar很好,板载的两个灯里蓝色的那个就可以当成PWM来用


        调用程序就这么几句话,没什么好说的。效果图也不发了,动态的拍不下来,和GPIO一样,只不过一闪一闪的,自己改改频率试试吧。所有的程序包括示例都在https://github.com/tjCFeng/GoS500里,请参考。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 08:39 , Processed in 0.113924 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.