IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MSP430 5xx/6xx 定时器A增计数模式编程实例 -> 正文阅读

[嵌入式]MSP430 5xx/6xx 定时器A增计数模式编程实例

Timer_A是一个16位定时器/计数器,最多有7个捕获/比较寄存器。Timer_A可支持多个捕获/比较、PWM输出和间隔定时。Timer_A还具有广泛的中断功能。计数器的溢出和每个捕获/比较寄存器都可以产生中断。

Timer_A有以下性能特点:

  • 具有四种工作模式的异步16位定时器/计数器
  • 可选择和可配置的时钟源
  • 最多七个可配置的捕获/比较寄存器
  • 具有脉宽调制(PWM)功能的可配置输出
  • 异步输入输出闭锁
  • 中断向量寄存器,用于快速解码所有定时器中断

TAxR:

16位定时器/计数器寄存器,随时钟信号的每个上升沿递增或递减(取决于操作模式)。TAxR可以用软件读写。此外,定时器在溢出时可以生成中断。

定时器有四种工作模式:停止、增、连续和增/减。使用TAxCTL.MC位选择操作模式。

?增计数模式:

如果定时器周期必须与0FFFFh不同,则使用‘增计数’模式。定时器重复计数到比较寄存器 TAxCCR0的值,它定义了周期(见下图)。期间内定时器计数的数量是TAxCCR0+1。当定时器值等于TAxCCR0时,定时器重新从0开始计数。如果在定时器值大于TAxCCR0时选择了‘增计数’模式,则定时器将立即从0开始计数。

?增计数模式

当定时器计数到TAxCCR0值时,置位TAxCCTL0.CCIFG中断标志。当定时器从TAxCCR0计数到0时,置位TAxCTL.TAIFG中断标志。下图显示标志设置循环

MSP430 5xx/6xx 定时器A增计数模式编程实例

增计数模式标志设置

在定时器运行时更改TAxCCR0时,如果新时段大于或等于旧时段或大于当前计数值,则定时器将向上计数到新时段。如果新时段小于当前的计数值,定时器将归0。但是,在归0之前,可能会出现一个额外的计数。

?

工程介绍:

MCU型号: MSP430F6736A

编译平台: IAR for MSP430 6.40.1

实验项目: Timer0_A: 增计数模式

? ? ? ? ? ? ? ? ?计数: TA0R 从0增计数到TA0CCR0 ; TA0R归0 ;?

? ? ? ? ? ? ? ? ? ? ? ? ? TA0R从0增计数到TA0CCR0 ; TA0R?归0 ; 如此循环

? ? ? ? ? ? ? ? ?时钟: REFOCLK(典型频率为32.768 kHz) 作为 ACLK SMCLK MCLK

? ? ? ? ? ? ? ? ? ? ? ? ? Timer0_A时钟 = ACLK

? ? ? ? ? ? ? ? ?中断: Timer0_A 溢出 (中断标志: TA0CTL.TAIFG)

? ? ? ? ? ? ? ? ? ? ? ? ? TA0R 从 TA0CCR0 归 0 时 产生

? ? ? ? ? ? ? ? 中断: 捕获/比较模块0 (中断标志: TA0CCTL0.CCIFG)

? ? ? ? ? ? ? ? ? ? ? ? ?TA0R 从 (TA0CCR0-1) 到 TA0CCR0 时 产生

#include "msp430.h"
#include "msp430f6736a.h"

void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;   // 禁止看门狗
    __bic_SR_register(GIE);     // 禁止所有中断

    // 选择 REFO (内部校准的低频振荡器, 典型频率为32.768 kHz): 作为 ACLK SMCLK MCLK
    UCSCTL4 = SELA__REFOCLK | SELS__REFOCLK | SELM__REFOCLK;

    //---------------------------------------------------------------------------------------------
    // Timer0_A设置
    //---------------------------------------------------------------------------------------------
    // 时钟选择: ACLK
    // 计数模式: 增计数 (TA0R 从0增计数到TA0CCR0 ; TA0R归0 ; TA0R再从0增计数到TA0CCR0 ; TA0R归0 ; 如此循环)
    // TA0R清0
    // 溢出中断允许, 溢出时间 = TA0CCR0 / ACLK = 4096 / 32768 = 125ms
    TA0CTL = TASSEL__ACLK | MC__UP | TACLR | TAIE;

    //---------------------------------------------------------------------------------------------
    // 捕获/比较模块0设置
    //---------------------------------------------------------------------------------------------
    // 比较模式
    // 捕获/比较模块0 中断允许, 中断周期 = TA0CCR0 / ACLK = 4096 / 32768 = 125ms
    TA0CCTL0 = CCIE;

    // 捕获/比较模块0 与TA0R相比较的数值,
    // 改变此值可以改变这2个中断的中断周期, 从而可以得到不同的定时时间
    TA0CCR0 = 4096;

    //---------------------------------------------------------------------------------------------
    // PORT 3 : P3.7 P3.6 P3.5 P3.4用作流水灯输出, 管脚功能:I/O  模式:输出
    //---------------------------------------------------------------------------------------------
    P3SEL = 0;
    P3DIR = 0xf0;
    P3OUT = 0xf0;

    //---------------------------------------------------------------------------------------------
    // PORT J : Timer0_A 溢出中断一次            PJ.0 电平切换一次
    //          Timer0_A 捕获/比较模块0 中断一次 PJ.1 电平切换一次
    //---------------------------------------------------------------------------------------------
    PJSEL = 0;
    PJDIR = 0x0f;
    PJOUT = 0x0f;

    // 中断总使能
    __bis_SR_register(GIE);

    while(1);
}

//*************************************************************************************************
// Timer0_A 溢出中断服务程序 (中断标志: TA0CTL.TAIFG)
//*************************************************************************************************
#pragma vector=TIMER0_A1_VECTOR         /* 0xFFEC Timer0_A CC1-CC2, TA */
__interrupt void TIMER0_A1_ISR(void)
{
    TA0CTL &= ~TAIFG;   // 复位 Timer0_A 溢出中断标志(TAIFG)

    P3OUT ^= BIT7;
    
    PJOUT ^= BIT0;
}

//*************************************************************************************************
// Timer0_A 捕获/比较模块0 中断服务程序 (中断标志: TA0CCTL0.CCIFG)
//*************************************************************************************************
#pragma vector=TIMER0_A0_VECTOR         /* 0xFFEE Timer0_A CC0 */
__interrupt void TIMER0_A0_ISR(void)
{
    P3OUT ^= BIT6;

    PJOUT ^= BIT1;
}

?PJ.0: Timer0_A溢出中断(每125ms,电平切换一次,所以频率=4Hz)

MSP430 5xx/6xx 定时器A增计数模式编程实例

PJ.1: 捕获/比较模块0 中断(每125ms,电平切换一次,所以频率=4Hz)

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:43:26  更:2021-11-09 19:44:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:32:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码