CC2530定时器配置笔记2(比较输出功能配置)

前言

最近再用CC2530做PWM调光,使用到了定时器的输出比较功能,CC2530的定时器配置比较简单,只需要配置几个寄存器就能够实现了。

定时器比较输出功能寄存器配置

本人把定时器比较输出功能当做PWM发生器来使用,大体思路是当定时器的计数值小于比较寄存器的设定值时,定时器比较输出端口电平保持不变,而当定时器的计数值等于或大于比较寄存器的设定值时,定时器比较输出端口的电平发生翻转,因此需要在一个定时器周期内调节比较寄存器的设定值就能够完成对输出波形的占空比的修改,从而实现PWM无级调光。

以定时器4、输出端口为P2.0口为例,想要通过定时器3完成比较输出功能需要配置T4CCTL0寄存器、T4CC0寄存器、T4CTL寄存器。可以通过查看数据手册得知P2.0端口为定时器第0通道(第二位置),因此需要配置PERCFG寄存器、P2SEL寄存器。

IO端口配置

PERCFG寄存器简介

PERCFG寄存器是一个8位寄存器,主要用于配置定时器、串口的复用引脚。

名称复位值读写权限配置
4T4CFG0读/写配置定时器4的复用引脚
----0 :配置定时器4的复用引脚地址在P1端口(P1.0为通道0引脚、P1.1为通道1引脚)
----1 :配置定时器4的复用引脚地址在P2端口(P2.0为通道0引脚、P2.1为通道1引脚)

P2SEL寄存器简介

P2SEL寄存器是一个8位的寄存器,主要用于配置P2端口的功能以及端口1的外设控制优先级。

名称复位值读写权限配置
0SELP2_00读/写配置P2.0引脚的功能
----0 :配置P2.0为通用IO口
----1 :配置P2.0为外设引脚

定时器配置

T4CTL寄存器介绍

T4CTL是一个8位寄存器,主要用于进行定时器4的时钟分频、运行模式、计数器复位、定时器启动、溢出中断使能等功能的配置。

名称复位值读写权限配置
7:5DIV[2:0]000读/写定时器分频系数
----000 :系统时钟1分频
----001 :系统时钟2分频
----010 :系统时钟4分频
----011 :系统时钟8分频
----100 :系统时钟16分频
----101 :系统时钟32分频
----110 :系统时钟64分频
----111 :系统时钟128分频
4START0读/写定时器启动标志
----0 :关闭定时器
----1 :开启定时器
3OVFIM1读/写定时器溢出中断使能标志
----0 :关闭定时器溢出中断
----1 :开启定时器溢出中断
2CLR0读/写定时器计数值清除位,读取该位时只能读到0
----0 :无效
----1 :清除定时器计数值
1:0MODE[1:0]00读/写定时器工作模式配置
----00 :自由运行,从0x00到0xFF反复计数
----01 :向下计数模式,从T3CC0到0x00计数
----10 :向上计数模式,从0x00到T3CC0反复计数
----11 :上下计数模式,从0x00到T3CC0在到0x00反复计数

T4CCTL0寄存器介绍

T4CCTL0是一个8位的寄存器,主要用于定时器4通道0的输入捕获、输出比较功能的控制。

名称复位值读写权限配置
7-0保留
6IM1读/写定时器通道中断使能标志
----0 :关闭该通道中断
----1 :开启该通道中断
5:3CMP[2:0]000读/写配置该通道比较输出功能的工作模式
----000 :在比较(定时器计数值小于比较寄存器设定值时)输出高电平
----001 :在比较(定时器计数值小于比较寄存器设定值时)输出低电平
----010 :在比较(定时器计数值小于比较寄存器设定值时)翻转输出电平
----011 :在比较正计数时输出高电平,在0输出低电平
----100 :在比较正计数时输出低电平,在0输出高电平
----101 :在比较(定时器计数值小于比较寄存器设定值时)输出高电平,在0xFF输出低电平
----110 :在0x00输出高电平,在比较(定时器计数值小于比较寄存器设定值时)输出低电平
----111 :初始化输出引脚,CMP[2:0]不变
2MODE0读/写定时器通道模式选择
----0 :该通道工作在输入捕获模式
----1 :该通道工作在输出比较模式
1:0CAP[1:0]00读/写配置该通道输入捕获功能的工作模式
----00 :关闭捕获功能
----01 :开启上升沿捕获
----10 :开启下降沿捕获
----11 :开启双边沿捕获

T4CC0寄存器介绍

T4CC0寄存器是一个8位寄存器,在比较输出模式中主要作为比较设定值的来使用。

名称复位值读写权限配置
7:0VAL[7:0]0x00读/写在比较输出功能中主要作为比较设定值来用

演示程序

    #include <ioCC2530.h>

    void Timer4_PWM_Init( void )
    {
        // 配置定时器3的IO位置为备用位置2
        PERCFG |= 0x10;
        // 配置P2_0为外设IO
        P2SEL |= 0x01;

        // 定时器输出比较配置
        T4CCTL0 = 0xAC;
        // 定时器比较寄存器配置
        T4CC0 = 0x00;
        // 启动定时器3 128时钟分频
        T4CTL = 0xF4;
    }

    int main( void )
    {
        Timer4_PWM_Init();
        while(1);
    }

参考资料

[1]. CC2530数据手册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值