栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

MSP430-GRACE 实战(三):定时器中断

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MSP430-GRACE 实战(三):定时器中断

文章目录
  • MSP430-GRACE 实战(三):定时器中断
    • 一、开发平台
      • 1.1 硬件平台
      • 1.2 软件平台
    • 二、原理分析
    • 三、GRACE 配置
      • 3.1 新建工程(通用步骤)
      • 3.2 配置时钟(通用步骤)
      • 3.3 关闭看门狗(通用步骤)
      • 3.4 GPIO 配置
      • 3.5 开启定时器
    • 四、代码编写
      • 4.1 代码编写位置
      • 4.2 逻辑代码编写
      • 4.3 程序下载(通用步骤)
    • 五、实验现象

MSP430-GRACE 实战(三):定时器中断

Grace 是 Graphical Code Engine 的缩写,是 TI 为了方便用户开发 MSP430 提供的图形化代码配置工具,但是目前只有部分 MSP430 的型号支持 Grace,如 G2 系列

本系列文章使用 Grace 配置 MSP430 外设,快速实现功能,帮助大家进一步了解 MSP430

文章侧重点是功能的使用,寄存器原理只有部分的阐述,适合有一定基础同学(不论是 STM32还是MSP430基础),深入的原理需要自行探索

工程中有所有实践 Demo 都有通用步骤,熟悉的同学可以直接跳过

一、开发平台 1.1 硬件平台

MSP430G2553 口袋实验平台:

1.2 软件平台

是 TI 公司推出的集成开发环境:CCS V5.5(Code Composer Studio)

仅 5 和 6 版本支持

二、原理分析

MSP430 单片机中 Timer_A 定时器就是一种辅助功能强大的定时器,具备 捕获和 PWM输出等 极其有用功能,Timer_A 模块的整体构造如图:

此处呢我们使用的不是 PWM 模式也不是输入捕获模式,使用的是定时中断模式,进行配置主要有以下步骤:

  1. 设置系统时钟树
  2. 设置定时器 CLK 的来源、分配值
  3. 设置定时器的计数模式,开启定时器中断
  4. 生成中断代码,编写中断代码函数
三、GRACE 配置 3.1 新建工程(通用步骤)

点击新建 CCS 工程:

配置工程信息:

工程建立完成:

3.2 配置时钟(通用步骤)

点击 main.cfg 下面的 Device Overview,进去后 Device Overview 颜色会变淡:

我们看到设备界面有个 DVCC 的设置,默认显示 1.8V,这个根据实际单片机供电设置,我这里设置 3.3V,因为 Grace 要知道单片机的实际供电电压,因为在低电压情况下,某些外设不能使用,Grace 会自动屏蔽配置该外设的功能,之后点击 BCS+(Basic Clock System+) 模块配置时钟,点击后弹出 Overview 界面如下:

其中 introduction 是关于该模块的介绍,下面两个则是两个代码使用例子用作参考

在 Overview 旁边有 BasicUser、Power User、Regisiter三个配置项,区别如下:

Grace 的 Basic User 模式配置时钟,可以配置最基础的功能,界面简单,可以瞬间即可完成高速时钟和低速时钟配置:

Power User 是基于 MSP430 的时钟树,列出了关键的分频倍频等寄存器配置接口,方便我们详细开发:

这里配置我们可以根据 MSP430 的时钟树进行配置:

至于 Regisiter 模式则是以图像化的方式配置 BCS+ 的各个寄存器,适合对寄存器非常了解的人进行开发:

这里我们直接选择第一项进行时钟配置,高速时钟选 12M,低速的的话因为没有 32.768K 晶振,配置 12K 就行,配置后如下:

然后我们 Crtl + S 保存一下配置再编译一下,Grace 会自动根据配置,生成代码:

到这时钟配置完成

3.3 关闭看门狗(通用步骤)

看门狗实际就是一个定时器,只不过在定时到达时,如果 CPU 没有去操作看门狗寄存器,看门狗就会复位单片机,这里我们没有使用到,但系统自动把它使能了,所以要把它关闭,否则会影响程序正常执行,点击看门狗配置项,取消选 Enable 就行,这里我们开启和关闭其他模块都是一样的操作,勾选 Enable 开启,不勾选则关闭:

3.4 GPIO 配置

我们开启 LED 灯的 GPIO 配置:

3.5 开启定时器

点击 Timer 0 进入到 Power User - CCR0 设置基础时钟参数:

设置时钟源和时钟分频,使输出频率是 1000khz,这样每次计数就是 1us:

然后设置计数模式为向上计数模式(Up Mode)

MCx模式描述
00停止Stop.停止计数
01增计数Up重复从 0 计数到 TACCR0
10连续计数 Continuous重复从 0 计数到OFfFFF
11增减计数 Up/down重复的从 0 增计数到 TACCR0 又减计数到 0

该模式下,计数器计数到 TACCR0 一样的值就会溢出复位重新装载,我们同时开启溢出中断,当他中断时就会回调函数:

下面我们再设置 CCR0 的比较值,这里我们计数是 1us 一次,我们设置 9999 (从 0 计数,相当于计数 10000 次),也就是 10ms 中断一次:

到此周期性中断定时 Grace 配置就完成了,我们保存编译一下,生成代码

四、代码编写 4.1 代码编写位置

Grace 在生成的代码中给用户预留了代码编写位置,用户可以在 Grace 生成的初始化代码中自行添加代码,具体位置在如下的注释之间,这样二次生成代码不会覆盖用户代码:

    
    
    
4.2 逻辑代码编写

在 InterruptVectors_init.c 文件中编写中断服务函数 ,不断的对 count 自加:


extern unsigned int count;



#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR_HOOK(void)
{
    
    
	count++;
   	TA0CTL &= ~BIT0;//清除中断标志
    
}

编写 main.c 函数主循环代码判断计数有没有计数到100,计数到 100 就把 LED 灯进行反转,相当于 1s 反转一次灯光

unsigned int count;
int main(void)
{
    Grace_init();                   // Activate Grace-generated configuration
    
    // >>>>> Fill-in user code here <<<<<
    while(1)
    {
    	if(count >= 100)
    	{
    		count = 0;
    		P1OUT^=BIT6;
    	}
    	__delay_cycles(10000);
    }
    return (0);
}
4.3 程序下载(通用步骤)

代码编写完成后,构建代码,然后连接开发板调试仿真程序:

五、实验现象

LED 灯按照 1s 的间隔频率闪动:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676052.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号