这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » 疯壳AI人脸及语音识别教程2-6PWM

共1条 1/1 1 跳转至

疯壳AI人脸及语音识别教程2-6PWM

菜鸟
2020-11-09 15:41:57     打赏

详情地址:https://fengke.club/GeekMart/views/offline/ai

购买链接:https://fengke.club/GeekMart/su_fKw7Nb7oC.jsp

视频地址:https://fengke.club/GeekMart/su_f9cTSxNsp.jsp

官方QQ群:457586268

PWM

PWMPulse Width Modulation)即脉冲宽度调制。PWM运用非常的广泛,大到航天飞船,小到便携式USB风扇都可以见到PWM的身影。

许多MCU的定时器均带有PWM模式,CC3200也不例外。

1.1寄存器

CC3200通用定时器支持PWM模式。在PWM模式下,定时器被配置为一个24位的减计数器,初始值在GPTMTnILRGPTMTnPR寄存器中进行定义。在该模式中,PWM频率和周期是同步事件,这样可以消除毛刺。PWM模式可以通过向寄存器 GPTMTnMR中的TnAMS位写入0x01TnCMR位写入0x00TnMR位写入0x02。当定时器使能时,装载到定时器寄存器中的值如表1.0.1所示。

1.0.1 装载到定时器的值

寄存器

向下计数模式

向上计数模式

GPTMTnR

GPTMTnILR


GPTMTnV

GPTMTnILR


当通过软件写GPTMCTL寄存器中的TnEN位时,计数器开始进行减计数直到0。在周期模式中的下一个计数循环,计数器从GPTMTnILRGPTMTnPR寄存器中装载初始值,并重新开始计数直到通过软件清除GPTMCTL寄存器中的TnEN位进行关闭。该定时器可以通过上升沿、下降沿和边沿触发这3种类型的事件来产生中断。事件类型通过GPTMCTL寄存器中的TnEVENT位来进行配置。中断通过

GPTMTnMR寄存器中的TnPEMIE位来进行使能。当事件发生时,GPTMRIS寄存器中的CnERIS位被置位。并且一直保持到通过GPTMICR寄存器来进行清除。如果捕捉模式事件中断通过GPTMIMR寄存器进行使能,则通用定时器也要置位GPTMMIS寄存器中的CnEMIS位。需要注意的是中断状态只有在TnPWMIE被置位时才会更新。

另外,通过置位GPTMCTL寄存器中的TnOTE位和GPTMDMAEV寄存器中的

CnEDMAEN位使能DMA触发模式,则当TnPWMIE被置位并且发生捕捉时间时, 定时器自动产生DMA的触发事件。

PWM模式中,GPTMTnRGPTMTnV寄存器始终保持相同的值。

当计数器的值等于GPTMTnILRGPTMTnPR寄存器的值时,输出PWM信号, 当计数器的值等于GPTMTnMATCHRGPTMTnPMR寄存器的值时,信号进行翻转。可以通过软件设置GPTMCTL寄存器中的TnPWML位,来对PWM信号的电平进行翻转。这里要注意的是如果PWM输出翻转使能了,那么边沿检测的行为就会相反,本来上升沿有效的,现在就变成了下降沿有效。

如图1.0.1就是一个产生PWM信号的例子。

 

image.png 

1.0.1 产生PWM信号的例子

GPTMCFG寄存器配置通用定时器模块的全局操作。确定通用定时器工作于32位模式还是16位模式。该寄存器中的值只能是在GPTMCTL寄存器中的TAENTBEN 两位被清零时改变。如1.0.2所示为该寄存器及其位定义。

image.png 

1.0.2 GPTMCFG寄存器及其位定义

即把2~0 位写入0,配置为32位定时器模式;写入4,配置为16位定时器模式。

GPTMTAMR寄存器的配置是基于GPTMCFG寄存器的配置来进行选择的。在 PWM模式中,置位TAAMS位、清除TACMR位和配置TAMR0x01或者0x02。如图1.0.3所示GPTMTAMR寄存器,如图1.0.4为其位定义。

image.png 

1.0.3 GPTMTAMR寄存器

image.pngimage.png 

1.0.4 GPTMTAMR寄存器

 

 

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

image.png 

1.0.5 GPTMTBMR寄存器

image.png 

 

image.png 

1.0.6 GPTMTBMR寄存器位定义

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

image.png 

1.0.7 GPTMCTL寄存器

image.png 

image.png 

1.0.8 GPTMCTL寄存器位定义

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

image.png 

1.0.9 GPTMIMR寄存器

image.pngimage.png 

1.1.0 GPTMIMR寄存器位定义

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

image.png 

1.1.1 GPTMRIS寄存器

image.png 

image.png 

1.1.2GPTMRIS寄存器位定义

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

image.png 

1.1.3 GPTMMIS寄存器

image.png 

image.png 

1.1.4 GPTMMIS寄存器位定义

 

GPTMICR寄存器用于清除GPTMRISGPTMIS寄存器中的状态位,写入1则清除对应的中断。如图1.1.5所示为GPTMICR寄存器,如图1.1.6所示为其位定义。

image.png 

1.1.5 GPTMICR寄存器

image.png 

image.png 

1.1.6 GPTMICR寄存器位定义

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

image.png 

1.1.7 GPTMTAILR寄存器及其位定义

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

image.png 

1.1.8 GPTMTBILR寄存器及其位定义

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

image.png 

1.1.9 GPTMTAMATCHR及其位定义

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

image.png 

1.2.0 GPTMTBMATCHR寄存器及其位定义

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

image.png 

1.2.1 GPTMTAPR寄存器及其位定义

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

image.png 

1.2.2 GPTMTBPR寄存器及其位定义

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

image.png 

1.2.3 GPTMTAPMR寄存器及其位定义

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

image.png 

1.2.4 GPTMTBPMR寄存器及其位定义

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

image.png 

1.2.5 GPTMTAR寄存器及其位定义

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

image.png 

1.2.6 GPTMTBR寄存器及其位定义

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

image.png 

1.2.7 GPTMTAV寄存器及其位定义

当通用定时器配置为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寄存器及其位定义。

image.png 

1.2.8 GPTMTBV寄存器及其位定义

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

image.png 

1.2.9 GPTMDMAEV寄存器

 

 

image.png 

image.png 

1.3.0 GPTMDMAEV寄存器位定义

1.2 实验现象

打开Pwm_Demo,在该次工程中主要是实现板子上三颗LED的“呼吸灯”效果,即要把GPIO_9GPIO_10GPIO_11三个IO口配置为PWM模式,逐次增加或降低该些端口的占空比即可使LED“呼吸”。如图1.3.1Pwm_Demomain函数。

image.png 

1.3.1 Pwm_Demomain函数

首先看到mian函数中的PinMuxConfig()函数,如图2.x所示为该函数的代码。

在该代码中,先使能时钟,然后把Pin64GPIO_9)、Pin01GPIO_10)、Pin02GPIO11)分别配置为模式3,即PWM模式。为什么呢?在datasheet中可以里看到,如图1.3.2所示的端口复用图,在该图中可以看到Pin64GPIO_9)在模式3下会被复用为PWM_05Pin01GPIO_10)在模式3下会被复用为PWM_06Pin02GPIO_11)在模式3下会被复用为PWM_07

 

image.png 

1.3.2 PinMuxConfig0函数代码

image.pngimage.png 

1.3.3 端口复用图

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

image.png 

1.3.4 InitPWMModules()函数

在该函数中的SetupTimerPWMMode()Timer2Timer BPWM_5GPIO_9关联起来;把Timer3Timer BPWM_6GPIO_10关联起来;把Timer3Timer APWM_7GPIO_11关联起来。问题来了,为什么这样就能关联起来了呢?打开CC3200的《Technical Reference Manual》即常说的参考手册,可以看到一个定时器与引脚映射图,如图1.3.5所示。

image.png 

1.3.5 定时器与引脚映射图

在该图中可以清楚的看到PWM_5正是对应着Timer2Timer BPWM_6正是对应着Timer3Timer APWM_7正是对应着Timer3Timer B

回到main函数中,实现LED呼吸的部分代码,如图1.3.6所示。

image.png 

1.3.6 LED“呼吸”实现部分代码

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

image.png 

 

1.3.7 LED“呼吸”效果





关键词: 语音     识别     人脸     识别     教程    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]