查看: 1147|回复: 0

[资料] 【开发教程8】疯壳·AI语音人脸识别-PWM

[复制链接]
  • TA的每日心情
    开心
    2022-4-17 15:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2022-7-21 13:49:48 | 显示全部楼层 |阅读模式
    分享到:
    CC3200AI实验教程
    ——疯壳·开发板系列
    PWM




        PWM(Pulse Width Modulation)即脉冲宽度调制。PWM运用非常的广泛,大到航天飞船,小到便携式USB风扇都可以见到PWM的身影。
        许多MCU的定时器均带有PWM模式,CC3200也不例外。
        1.1寄存器
        CC3200通用定时器支持PWM模式。在PWM模式下,定时器被配置为一个24位的减计数器,初始值在GPTMTnILR和GPTMTnPR寄存器中进行定义。在该模式中,PWM频率和周期是同步事件,这样可以消除毛刺。PWM模式可以通过向寄存器 GPTMTnMR中的TnAMS位写入0x01,TnCMR位写入0x00,TnMR位写入0x02。当定时器使能时,装载到定时器寄存器中的值如表1.0.1所示。
        表1.0.1 装载到定时器的值

    表1.png    
        表1
        当通过软件写GPTMCTL寄存器中的TnEN位时,计数器开始进行减计数直到0。在周期模式中的下一个计数循环,计数器从GPTMTnILR和GPTMTnPR寄存器中装载初始值,并重新开始计数直到通过软件清除GPTMCTL寄存器中的TnEN位进行关闭。该定时器可以通过上升沿、下降沿和边沿触发这3种类型的事件来产生中断。事件类型通过GPTMCTL寄存器中的TnEVENT位来进行配置。中断通过
        GPTMTnMR寄存器中的TnPEMIE位来进行使能。当事件发生时,GPTMRIS寄存器中的CnERIS位被置位。并且一直保持到通过GPTMICR寄存器来进行清除。如果捕捉模式事件中断通过GPTMIMR寄存器进行使能,则通用定时器也要置位GPTMMIS寄存器中的CnEMIS位。需要注意的是中断状态只有在TnPWMIE被置位时才会更新。
        另外,通过置位GPTMCTL寄存器中的TnOTE位和GPTMDMAEV寄存器中的
        CnEDMAEN位使能DMA触发模式,则当TnPWMIE被置位并且发生捕捉时间时, 定时器自动产生DMA的触发事件。
        在PWM模式中,GPTMTnR和GPTMTnV寄存器始终保持相同的值。
        当计数器的值等于GPTMTnILR和GPTMTnPR寄存器的值时,输出PWM信号, 当计数器的值等于GPTMTnMATCHR和GPTMTnPMR寄存器的值时,信号进行翻转。可以通过软件设置GPTMCTL寄存器中的TnPWML位,来对PWM信号的电平进行翻转。这里要注意的是如果PWM输出翻转使能了,那么边沿检测的行为就会相反,本来上升沿有效的,现在就变成了下降沿有效。
        如图1.0.1就是一个产生PWM信号的例子。

    1.png    
        图1.0.1 产生PWM信号的例子
        图1
        GPTMCFG寄存器配置通用定时器模块的全局操作。确定通用定时器工作于32位模式还是16位模式。该寄存器中的值只能是在GPTMCTL寄存器中的TAEN和TBEN 两位被清零时改变。如图1.0.2所示为该寄存器及其位定义。

    2.png    
        图1.0.2 GPTMCFG寄存器及其位定义
        图2
        即把2~0 位写入0,配置为32位定时器模式;写入4,配置为16位定时器模式。
        GPTMTAMR寄存器的配置是基于GPTMCFG寄存器的配置来进行选择的。在 PWM模式中,置位TAAMS位、清除TACMR位和配置TAMR为0x01或者0x02。如图1.0.3所示为GPTMTAMR寄存器,如图1.0.4为其位定义。

    3.png    
        图1.0.3 GPTMTAMR寄存器
        图3

    4.0.png
    4.1.png    
        图1.0.4 GPTMTAMR寄存器
        图4
        GPTMTBMR寄存器控制独立定时器B的工作模式。当定时器A和定时器B一起使用时,该寄存器被忽略,而是通过GPTMTAMR来控制定时器A和定时器B的工作模式。注意:除了TCACT位,其它位都必须在GPTMCTL寄存器中的TBEN 位清零时进行配置。如图1.0.5所示为GPTMTBMR寄存器,如图1.0.6为其位定义。

    5.png    
        图1.0.5 GPTMTBMR寄存器
        图5

    6.png    
        图1.0.6 GPTMTBMR寄存器位定义
        图6

        GPTMCTL寄存器为定时器的控制寄存器,如图1.0.7为GPTMCTL寄存器,如图1.0.8为其位定义。

       7.png   
        图1.0.7 GPTMCTL寄存器
        图7

    8.png    
        图1.0.8 GPTMCTL寄存器位定义
        图8
        GPTMIMR寄存器可以软件使能/关闭定时器的控制电平中断。置位可以打开对应的中断,清零可以关闭对应的中断,如图1.0.9所示为GPTMIMR寄存器,如图1.1.0为其位定义。

    9.png
        图1.0.9 GPTMIMR寄存器
        图9

    10.png    
        图1.1.0 GPTMIMR寄存器位定义
        图10
        GPTMRIS寄存器为中断源状态寄存器,通过该寄存器可以获取中断源。如图1.1.1为GPTMRIS寄存器,如图1.1.2为其位定义。

    11.png    
        图1.1.1 GPTMRIS寄存器
        图11

    12.png    
        图1.1.2GPTMRIS寄存器位定义
        图12
        GPTMMIS寄存器为中断掩码状态寄存器,可以检测是否产生中断。如图1.1.3所示为GPTMMIS寄存器,如图1.1.4为其位定义。

    13.png    
        图1.1.3 GPTMMIS寄存器
        图13

    14.png    
        图1.1.4 GPTMMIS寄存器位定义
        图14
        GPTMICR寄存器用于清除GPTMRIS和GPTMIS寄存器中的状态位,写入1则清除对应的中断。如图1.1.5所示为GPTMICR寄存器,如图1.1.6所示为其位定义。

    15.png    
        图1.1.5 GPTMICR寄存器
        图15

    16.png    
        图1.1.6 GPTMICR寄存器位定义
        图16
        当通用定时器被配置为32位模式,GPTMTAILR作为一个32位的寄存器(高16位对应与定时器B装载值寄存器的内容)。在16位模式,寄存器高16位读取值为0,并且对GPTMTBILR寄存器的状态没有影响。如图1.1.7所示为GPTMTAILR寄存器及其位定义。

    17.png    
        图1.1.7 GPTMTAILR寄存器及其位定义
        图17
        当通用定时器配置为32位模式时,GPTMTBILR寄存器中[15:0]位的内容被装载到GPTMTAILR寄存器的高16位。读取GPTMTBILR寄存器,则返回定时器B的当前值,写操作无效。在16位模式,[15:0]位用于装载值。[31:16]位保留不使用。如图1.1.8所示为GPTMTBILR寄存器及其位定义。

    18.png    
        图1.1.8 GPTMTBILR寄存器及其位定义
        图18
                当通用定时器被配置为32位模式时,GPTMTAMATCHR作为32位寄存器(高16位对应与GPTMTBMATCHR寄存器的内容)。在16位模式,寄存器的高16位读取为0,并且对GPTMTBMATCHR的状态没有影响。如图1.1.9所示为寄存器GPTMTAMATCHR及其位定义。

    19.png    
        图1.1.9 GPTMTAMATCHR及其位定义
        图19
        当通用定时器配置为32位模式时,GPTMTBMATCHR寄存器的[15:0]位被装载到寄存器GPTMTAMATCHR寄存器的高16位。读取GPTMTBMATCHR寄存器得到定时器B的当前值,写操作无效。在16位模式中,[15:0]位用于匹配值。[31:16]位保留不使用。如图1.2.0所示为GPTMTBMATCHR寄存器及其位定义。

    20.png    
        图1.2.0 GPTMTBMATCHR寄存器及其位定义
        图20
        GPTMTAPR寄存器通过软件来扩展独立定时器的范围。在单次或者周期减计数模式下该寄存器作为定时计数器的预分频器。如图1.2.1所示为GPTMTAPR寄存器及其位定义。

    21.png    
        图1.2.1 GPTMTAPR寄存器及其位定义
        图21
        GPTMTBPR寄存器通过软件来扩展独立定时器的范围,在单次或者周期减计数模式下该寄存器作为定时计数器的预分频器。如图1.2.2所示为GPTMTBPR寄存器及其位定义。

    22.png    
        图1.2.2 GPTMTBPR寄存器及其位定义
        图22
        GPTMTAPMR寄存器扩展独立定时器GPTMTAMATCHR的范围。当寄存器工作于16位模式时,该寄存器表示[23:16]位。如图1.2.3所示为GPTMTAPMR寄存器及其位定义。

    23.png    
        图1.2.3 GPTMTAPMR寄存器及其位定义
        图23
        GPTMTBPMR寄存器扩展独立定时器GPTMTAMATCHR的范围。当寄存器工作于16位模式时,该寄存器表示[23:16]位。如图1.2.4所示为GPTMTBPMR寄存器及其位定义。

    24.png    
        图1.2.4 GPTMTBPMR寄存器及其位定义
        图24
        当定时器配置为32位模式时,GPTMTAR作为32位寄存器使用(高16位对应 GPTMTBR寄存器的内容)。在16位输入边沿计数,输入边沿定时和PEM模式,[15:0]位包含计数器的值,[23:16]位包含预分频高8位的值。[31:24]位读取值始终为0。可以读取[GPTMTAV]的[23:16]位来获取16位模式单次和周期模式的预分频值。读取GPTMTAPS寄存器可以获取定期快照模式下的预分频值。如图1.2.5所示为GPTMTAR寄存器及其位定义。

    25.png    
        图1.2.5 GPTMTAR寄存器及其位定义
        图25
        当通用定时器配置为32位模式时,GPTMTBR寄存器的[15:0]位被装载到 GPTMTAR寄存器的高16位。读取GPTMTBR寄存器得到定时器B的当前值。在16位模式下,[15:0]位包含计数器的值,[23:16]位包含在输入边沿计数、边沿定时和PWM模式下的预分频。[31:24]位读取为0。可以通过读取GPTMTBV寄存器中的[23:16]位可以获取16位单次和周期模式的预分频值。读取GPTMTBPS寄存器可以获取周期快照模式下的预分频。如图1.2.6所示为GPTMTBR寄存器及其位定义。

    26.png    
        图1.2.6 GPTMTBR寄存器及其位定义
        图26
        当定时器配置为32位模式时,GPTMTAV作为32位寄存器(高16位对应GPTMTBV寄存器的内容)。在16位模式,[15:0]位包含计数器的值,[23:16]位包含分频值。在单次或周期减计数模式,[23:16]位存储真实的预分频值,意味着在减[15:0]位的值之前,先减[23:16]位的值,[31:24]位读取始终为0。如图1.2.7所示为GPTMTAV寄存器及其位定义。

    27.png    
        图1.2.7 GPTMTAV寄存器及其位定义
        图27
        当通用定时器配置为32位模式,GPTMTBV寄存器[15:0]位的值被装载到 GPTMTAV寄存器的高16位。读取GPTMTBV寄存器,则返回定时器B的当前值。在16位模式,[15:0]位包含计数器的值,[23:16]位包含当前的预分频值。在单次或周期模式,[23:16]位为真实的预分频值,意味着在[15:0]位减数之前,[23:16]位先进行减数。[31:24]位读取值为0。如图1.2.8所示为GPTMTBV寄存器及其位定义。

    28.png
        图1.2.8 GPTMTBV寄存器及其位定义
        图28
        GPTMDMAEV寄存器允许软件使能和关闭定时器DMA触发事件。置位则对应的DMA触发使能,清零则关闭。如图1.2.9所示为GPTMDMAEV寄存器,如图1.3.0所示为其位定义。

    29.png    
        图1.2.9 GPTMDMAEV寄存器
        图29

    30.png
        图1.3.0 GPTMDMAEV寄存器位定义
        图30
        1.2 实验现象
        打开Pwm_Demo,在该次工程中主要是实现板子上三颗LED的“呼吸灯”效果,即要把GPIO_9、GPIO_10、GPIO_11三个IO口配置为PWM模式,逐次增加或降低该些端口的占空比即可使LED“呼吸”。如图1.3.1为Pwm_Demo的main函数。

    31.png    
        图1.3.1 Pwm_Demo的main函数
        图31
        首先看到mian函数中的PinMuxConfig()函数,如图2.x所示为该函数的代码。
        在该代码中,先使能时钟,然后把Pin64(GPIO_9)、Pin01(GPIO_10)、Pin02(GPIO11)分别配置为模式3,即PWM模式。为什么呢?在datasheet中可以里看到,如图1.3.2所示的端口复用图,在该图中可以看到Pin64(GPIO_9)在模式3下会被复用为PWM_05;Pin01(GPIO_10)在模式3下会被复用为PWM_06;Pin02(GPIO_11)在模式3下会被复用为PWM_07。

    32.png    
        图1.3.2 PinMuxConfig0函数代码
        图32

    33.png    
        图1.3.3 端口复用图
        图33
        配置好PWM输出引脚后,就该把定时器与该输出引脚关联起来,在main函数中的InitPWMModules()函数是关键,如图1.3.4为InitPWMModules()函数。

    34.png    
        图1.3.4 InitPWMModules()函数
        图34
        在该函数中的SetupTimerPWMMode()把Timer2的Timer B与PWM_5即GPIO_9关联起来;把Timer3的Timer B与PWM_6即GPIO_10关联起来;把Timer3的Timer A与PWM_7即GPIO_11关联起来。问题来了,为什么这样就能关联起来了呢?打开CC3200的《Technical Reference Manual》即常说的参考手册,可以看到一个定时器与引脚映射图,如图1.3.5所示。

    35.png    
        图1.3.5 定时器与引脚映射图
        图35
        在该图中可以清楚的看到PWM_5正是对应着Timer2的Timer B;PWM_6正是对应着Timer3的Timer A;PWM_7正是对应着Timer3的Timer B。
        回到main函数中,实现LED呼吸的部分代码,如图1.3.6所示。

    36.png    
        图1.3.6 LED“呼吸”实现部分代码
        图36
        该代码主要就是不断地改变输出端的占空比,从而实现LED的“呼吸”。编译代码,打开UniFlash,把Bin文件下载到板子上(参考GPIO小节)。把拨码开关D5、D6、D7拨到“ON”,按下复位,可以看到如图1.3.7所示的LED“呼吸”效果。

    37.png    
        图1.3.7 LED“呼吸”效果
        图37


    完整配套资料:http://www.fengke.club
    对应开源套件地址:http://shop115904315.taobao.com/
    文件下载请点击: 【6】PWM.pdf (3.73 MB, 下载次数: 0)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 14:30 , Processed in 0.139753 second(s), 19 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.