详情地址:https://fengke.club/GeekMart/views/offline/ai
购买链接:https://fengke.club/GeekMart/su_fKw7Nb7oC.jsp
视频地址:https://fengke.club/GeekMart/su_f9cTSxNsp.jsp
官方QQ群:457586268
C3200包含4个32位用户可编程通用定时器(TimerA0~3),通用定时器可以对定时器输入引脚的外部事件进行计数或定时。每个定时器模块包含2 个16位的定时/计数器(TimerA和TimerB),可以作为定时器或事件计数器独立工作,也可以作为一个32位定时器工作。
CC3200的定时器具有多种操作模式:16位或32位可编程单次定时器;16位或32位可编程周期定时器;16位通用定时器,带8位预分频器;16位输入边沿计数或时间捕捉模式,带8位预分频器;16位脉冲宽度调制模式(PWM),带8位预分频器和软件可编程输入。具有以下特性:
a、向上或向下计数;
b、16个16位或32位捕捉比较PWM(CCP)引脚;
c、可以确定产生定时器中断到进入中断服务程序(ISR)的时间;
d、可以触发使用 DMA 的高效传输;
e、系统时钟运行(80MHz)。
GPTMCFG寄存器主要是配置通用定时器模块的全局操作。确定通用定时器工作于32位模式还是16位模式。该寄存器中的值只能是在GPTMCTL寄存器中的TAEN和TBEN两位被清零时改变。如图1.0.1所示。
图1.0.1 GPTMCFG寄存器
2~0位:写入0,配置为32位定时器模式;写入4,配置为16位定时器模式。
GPTMTAMR寄存器配置是基于GPTMCFG寄存器的配置来进行选择的。在PWM模式中,置位TAAMS位、清除TACMR位和配置TAMR为0x01或者0x02。寄存器如图1.0.2所示,位定义如图1.0.3所示。
图1.0.2 GPTMTAMR寄存器
图1.0.3 GPTMTAMR寄存器位定义 |
GPTMTBMR寄存器控制独立定时器B的工作模式。当定时器A和定时器B一起使用时该寄存器被忽略,而是通过GPTMTAMR来控制定时器A和定时器B的工作模式。注意:除了TCACT位,其它位都必须在GPTMCTL寄存器中的TBEN位清零时进行配置。GPTMTBMR寄存器如图1.0.4所示,位定义如图1.0.5所示。
图1.0.4 GPTMTBMR寄存器
图1.0.5 GPTMTBMR寄存器位定义
GPTMCTL寄存器该寄存器为定时器的控制寄存器,如图1.0.6所示:
图1.0.6 GPTMCTL寄存器
|
图1.0.7 GPTMCTL寄存器位定义 |
GPTMIMR寄存器可以软件使能/关闭定时器的控制电平中断。置位可以打开对应的中断,清零可以关闭对应的中断。寄存器如图1.0.8所示,该寄存器位定义如图1.0.9所示
图1.0.8 GPTMIMR寄存器
|
图1.0.9 GPTMIMR寄存器位定义 |
GPTMRIS寄存器为中断源状态寄存器,通过该寄存器可以获取中断源。GPTMRIS寄存器如下图1.1.0所示,寄存器位定义如图1.1.1所示。
图1.1.0 GPTMRIS寄存器
|
图1.1.1 GPTMRIS寄存器位定义 |
GPTMMIS寄存器为中断掩码状态寄存器,可以检测是否产生中断。如图1.1.3所示为其寄存器,图1.1.4为寄存器的位定义。
图1.1.3 GPTMMIS寄存器
|
图1.1.4 GPTMMIS寄存器位定义 |
GPTMICR寄存器用于清除GPTMRIS和GPTMIS寄存器中的状态位,写入1则清除对应的中断。GPTMICR寄存器如图1.1.5所示,GPTMICR寄存器位定义如图1.1.6所示。
图1.1.5GPTMICR寄存器
图1.1.6 GPTMICR寄存器位定义 |
当通用定时器被配置为32位模式,GPTMTAILR作为一个32位寄存器(高16位对应与定时器B装载值寄存器的内容)。在16位模式,寄存器的高16位读取值为0,并且对GPTMTBILR寄存器的状态没有影响。如图1.1.7所示为其寄存器及位定义。
图1.1.7 GPTMTAILR寄存器及位定义
当通用定时器配置为32位模式时,GPTMTBILR寄存器中[15:0]位的内容被装载到GPTMTAILR 寄存器的高16位。读取该寄存器,则返回定时器B的当前值,写操作无效。在 16 位模式,[15:0]位用于装载值。[31:16]位保留不使用。如图1.1.8所示为GPTMTBILR寄存器及其位定义。
图1.1.8 GPTMTBILR寄存器及其位定义
当通用定时器被配置为32位模式时,GPTMTAMATCHR作为32位寄存器(高16位对应GPTMTBMATCHR寄存器的内容)。在16位模式,寄存器的高16位读取为0,并且对GPTMTBMATCHR的状态没有影响。如图1.1.9所示为GPTMTAMATCHR及其位定义。
图1.1.9 GPTMTAMATCHR及其位定义
当通用定时器配置为32位模式时,GPTMTBMATCHR寄存器的[15:0]位被装载到寄存器GPTMTAMATCHR寄存器的高16位。读取该寄存器得到定时器B的当前值,写操作无效。在16位模式中,[15:0]位用于匹配值。[31:16]位保留不使用。如图1.2.0所示GPTMTBMATCHR寄存器及其位定义。
图1.2.0 GPTMTBMATCHR寄存器及其位定义
GPTMTAPR寄存器通过软件来扩展独立定时器的范围。在单次或者周期减计数模式, 该寄存器作为定时计数器的预分频器。如1.2.1所示。
图1.2.1 GPTMTAPR寄存器
GPTMTBPR寄存器通过软件来扩展独立定时器的范围。在单次或者周期减计数模式, 该寄存器作为定时计数器的预分频器。如图1.2.2所示。
图1.2.2 GPTMTBPR寄存器
GPTMTAPMR寄存器扩展独立定时器GPTMTAMATCHR的范围。当寄存器工作于 16 位模式时,该寄存器表示[23:16]位。如图1.2.3所示。
图1.2.3 GPTMTAPMR寄存器
GPTMTBPMR寄存器扩展独立定时器GPTMTAMATCHR的范围。当寄存器工作于16位模式时,该寄存器表示[23:16]位。如图1.2.4所示。
图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寄存器及其位定义。
图1.2.5 GPTMTAR寄存器及其位定义。
当通用定时器配置为32位模式时,GPTMTBR寄存器的[15:0]位被装载到GPTMTAR寄存器的高16位。读取该寄存器发挥定时器B的当前值。在16位模式,[15:0] 位包含计数器的值,[23:16]位包含在输入边沿计数、边沿定时和PWM模式下的预分频。[31:24]位读取为0。可以通过读取GPTMTBV寄存器中的[23:16]位可以获取16位单次和周期模式的预分频值。读取GPTMTBPS寄存器可以获取周期快照模式下的预分频。如图1.2.6所示为GPTMTBR寄存器及其位定义。
图1.2.6 GPTMTBR寄存器及其位定义
当定时器配置为32位模式时,GPTMTAV作为32位寄存器(高16位对应GPTMTBV寄存器的内容)。在 6位模式,[15:0]位包含计数器的值,[23:16]位包含分频值。在单次或周期减计数模式,[23:16]位存储真实的预分频值,意味着[15:0]位的值之前,先减[23:16]位的值。[31:24]位读取始终为0。如图1.2.7所示为GPTMTAV寄存器及其位定义。
图1.2.7 GPTMTAV寄存器及其位定义
当通用定时器配置为32位模式,GPTMTBV寄存器[15:0]位的值被装载到GPTMTAV寄存器的高16位。读取该寄存器,则返回定时器B的当前值。在16位模式,[15:0]位包含计数器的值,[23:16]位包含当前的预分频值。在单次或周期模式,[23:16]位为真实的预分频值,意味着在[15:0]位减数之前,[23:16]位先进行减数。[31:24]位读取值为0。如图1.2.8所示为GPTMTBV寄存器及其位定义。
图1.2.8 GPTMTBV寄存器及其位定义
GPTMDMAEV寄存器允许软件使能和关闭定时器DMA触发事件。置位则对应的DMA触发使能,清零则关闭。如图1.2.9所示GPTMDMAEV寄存器,图1.3.0为其位定义。
图1.2.9 GPTMDMAEV寄存器
图1.3.0 GPTMDMAEV寄存器位定义 |
1.2 实验现象
本实验在官方CC3200SDK_1.2.0中 timer例程代码的基础上修改过来的,用IAR打开Timer_Demo里的工程,编译下载(参考GPIO小节),从程序可以看到是利用CC3200的定时器Timer A0和Timer A1去控制GPIO_9和GPIO_11亮灭时间。如图1.3.1所示为该工程的main函数。
图1.3.1 Timer_Demo的main函数
在main函数中通过PinMuxConfig()函数初始化了GPIO_9和GPIO_11,通过Timer_IF_Init()初始化了TimerA0和TimerA1,频率和系统时钟一致(不分频),在Timer_IF_Start()函数中对TimerA0装载了500这一参数,TimerA1装载了1000,实际上就是TimerA0定时500ms进入中断函数TimerBaseIntHandler()、TimerA1定时1000ms进入中断函数TimerRefIntHandler(),进入中断后对IO口输出状态进行反转。
打开UniFlash下载bin文件到板子上(参考GPIO小节),把D5、D7拨码开关拨到ON(程序中使用的是D5、D7),按下复位键,可以看到D5和D7交替闪烁,如图1.3.2为实验现象。
图1.3.2 Timer_Demo实验现象
使用逻辑分析仪可以看到GPIO_9端为1000ms(1s)的脉宽,如图1.3.3所示。
图1.3.3 GPIO_9脉宽
如图1.3.4可以看到GPIO_11端的脉宽为500ms(0.5s)。
图1.3.4 GPIO_11脉宽