TI CC2530基础实验(定时器1查询方式——自由运行模式)
本实验实现通过CC2530的定时器1(16位)查询方式控制LED1以1S的周期性闪烁,此实验使用的三个寄存器T1CTL(定时器1控制寄存器),T1STAT(定时器1状态寄存器),IRCON。
有关CC2530的GPIO基本知识、普通GPIO操作有关寄存器的介绍、IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作——点亮led灯)
电路原理图:
文章图片
寄存器分析: 1、定时器1控制寄存器
文章图片
定时器1的T1CTL寄存器下的模式分析: 【
自由运行模式】: 在自由运行操作模式下,计数器从0x0000开始,每个活动时钟边沿增加1。当计数器达到0xFFFF(溢出)后,计数器重新载入0x0000,继续递增它的值,如下图所示。当达到最终计数值0xFFFF,设置标志IRCON.T1IF和T1STAT.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1EN,将产生一个中断请求。自由运行模式可以用于产生独立的时间间隔,输出信号频率
文章图片
【
模模式】: 当定时器运行在模模式,16位计数器从0x0000开始,每个活动时钟边沿增加1。当计数器达到T1CC0(溢出),寄存器T1CC0H:T1CC0L保存的最终计数值,计数器将复位到0x0000,并继续递增。如果定时器开始于T1CC0以上的一个值,当达到最终计数值(0xFFFF)时,设置标志IRCON.T1IF和T1CTL.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1EN,将产生一个中断请求。模模式可以用于周期不是0xFFFF的应用程序。计数器的操作展示如下图:
文章图片
【正计数/倒计数模式】:
在正计数/倒计数模式,计数器反复从0x0000开始,正计数直达到T1CC0H:T1CC0L保存值。然后计数器将倒计数指导0x0000,如下图所示。这个定时器用于周期必须是对称输出脉冲而不是0xFFF的应用程序,因此允许中心对齐的PWM输出应用的实现。在正计数/倒计数模式,当达到最终计数值时,设置标志IRCON.T1IF和T1CTL.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1EN,将产生一个中断请求。
文章图片
2、定时器1状态寄存器
文章图片
3、中断标志4寄存器
文章图片
程序——定时器1采用自由运行模式:
#include /************************************
* 程序说明:LED1以1S的周期性闪烁
***********************************/#define LED1 P1_0/*********************************************************
* 函数描述:初始化LED1
* 备注:系统不配置工作时钟时使用内部 RC 振荡器,即16MHz
*********************************************************/
void LED1Init(void)
{
P1SEL &= ~0x01;
//功能:普通I/O
P1DIR |= 0x01;
//方向:输出
LED1 = 1;
//使其属于灭状态
}/***********************************
* 函数描述:定时器1初始化
* 设置:分频、运行模式
**********************************/
void T1Init(void)
{
T1CTL |= 0x0c;
//设置为128分频
T1CTL |= 0x01;
//设置为自由运行模式,从0x0000到0xFFFF反复计数
}void main()
{
unsigned char count = 0;
//用来记录定时器溢出次数
LED1Init();
T1Init();
for (;
;
)
{
#if 1
if ((T1STAT & 0x20) > 0)//判断T1STAT的bit5
{
T1STAT &= ~0x20;
if (++count == 1)
{
count = 0;
LED1 = !LED1;
}
}
#else
if ((IRCON & 0x02) > 0)//判断IRCON的bit1
{
IRCON &= ~0x02;
//清除中断标志
IRCON = 0;
if (++count == 1)
{
count = 0;
LED1 = !LED1;
}
}
#endif
}
}
系统在不配置 工作频率时默认为2分频,即32M/2=16M,所以定时器每次溢出时T=1/(16/128)*65536≈0.5s,其中128是设置定时器1的分频,65536是0x0000~0xFFFF总共递增次数,所以总时间Ta=T*count=0.5*1=0.5s切换1次状态,这样看起来才是1S删除1次。
注意:每创建一个新工程都要配置IAR(做基础实验),TI CC2530基础实验(普通GPIO操作——点亮led灯)也有IAR相关配置步骤
总结:
定时器1在采用自由运行模式从0x0000计数开始,到0xFFFF溢出,其当定时器1采用128分频,在默认的工作频率下,一次溢出约为0.5s。
定时器1查询方式是通过判断T1STAT.OVFIF和IRCON.T1IF是否置1来判断定时器是否溢出。
【TI CC2530基础实验(定时器1查询方式——自由运行模式)】
推荐阅读
- Python基础|Python基础 - 练习1
- 【学生作品】温暖的记忆
- Java|Java基础——数组
- Java基础-高级特性-枚举实现状态机
- 营养基础学20180331(课间随笔)??
- iOS面试题--基础
- HTML基础--基本概念--跟着李南江学编程
- typeScript入门基础介绍
- 实验室女王从0到1亿的1001天创业日记第62天
- c++基础概念笔记