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 模式也不是输入捕获模式,使用的是定时中断模式,进行配置主要有以下步骤:
- 设置系统时钟树
- 设置定时器 CLK 的来源、分配值
- 设置定时器的计数模式,开启定时器中断
- 生成中断代码,编写中断代码函数
三、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 生成的初始化代码中自行添加代码,具体位置在如下的注释之间,这样二次生成代码不会覆盖用户代码:
/* USER CODE START (section: GPIO_graceInit_prologue) *//* User initialization code *//* USER CODE END (section: GPIO_graceInit_prologue) */
4.2 逻辑代码编写
在 InterruptVectors_init.c 文件中编写中断服务函数 ,不断的对 count 自加:
/* USER CODE START (section: InterruptVectors_init_c_prologue) */
/* User defined includes, defines, global variables and functions */
extern unsigned int count;
/* USER CODE END (section: InterruptVectors_init_c_prologue) *//** ======== Timer0_A3 Interrupt Service Routine ======== */
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR_HOOK(void)
{/* USER CODE START (section: TIMER0_A1_ISR_HOOK) *//* replace this comment with your code */count++;TA0CTL &= ~BIT0;//清除中断标志/* USER CODE END (section: TIMER0_A1_ISR_HOOK) */
}
编写 main.c 函数主循环代码判断计数有没有计数到100,计数到 100 就把 LED 灯进行反转,相当于 1s 反转一次灯光
/** ======== main ========*/
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 的间隔频率闪动:
MSP430-GRACE 实战(三):定时器中断相关推荐
- STM32CubeMX 实战教程:定时器中断实验(LL 库)
1.资源的获取:关注博主并点赞对应博客,并在文章下留言邮箱索取: 2.资源的类型:获取资源仅限于免费公开文章或粉丝免费专享文章,不包括付费文章: 博主分享不易,请给三连哦(关注 + 点赞 + 收藏 ...
- 51单片机学习笔记之中断(外部中断、定时器中断、中断嵌套)
要学习51单片机中断的朋友,拥有这一篇博文就够了,深入浅出,里面包含了寄存器,外部中断.定时器中断.中断嵌套等的讲解,还有代码实战.快一万字,写得不容易,还请大家点赞支持一下,后续持续更新 (一)寄存 ...
- stm32定时器中断_stm32F4之定时器的基本使用
概述 上一篇说了stm32F4GPIO的使用,这篇说说定时器的使用 一. stm32F407的定时器资源介绍: STM32F407有14个定时器,其中有12个16位的定时器,2个32位的定时器 这 ...
- 单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字)
目录 一.实验要求 二.知识要点 (一)单片机定时器/计数器 (二)相关的特殊功能寄存器 1.工作方式寄存器TMOD 2.定时器/计数器控制寄存器TCON (三)定时器/计数器的工作方式 1.工作方式 ...
- ARM(I.MX6ULL) EPIT定时器中断实验、定时器按键消抖
参考:Linux之ARM (I.MX6ULL) EPIT定时器详解 作者:一只青木呀 发布时间: 2020-09-20 10:03:37 网址:https://blog.csdn.net/weixin ...
- STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时
参考:stm32 超声波模块 原理 实现测距 +舵机使用 作者:点灯小哥 发布时间: 2021-03-10 19:37:16 网址:https://blog.csdn.net/weixin_46016 ...
- 51单片机学习笔记(郭天祥版)(3)——引脚讲解、数码管静态显示、中断系统(外部中断,定时器中断)...
学习引脚的功能 9引脚 复位管脚,当给2个机器周期(24个时钟振荡周期)的高电平时会复位,单片机正常工作时会给0.5v的低电平 VPD备用电源的输入端,当主电源VCC发生故障降低到某一规定的低电平时, ...
- 【STM32】HAL库 STM32CubeMX教程六----定时器中断
前言: 今天我们来学习定时器,32的定时器有着非常丰富的功能, 输入捕获/输出比较,PWM,中断等等.是我们学习STM32最频繁使用到的外设之一,所以一定要掌握好,这节我们讲解定时器中断,本系列教程将 ...
- STM32之定时器中断控制LED闪烁
上篇博客我们是用延时函数实现了LED的闪烁,今天我们使用STM32的定时器来使LED闪烁. 关于32的定时器的种类,今天我在这先不做过多的说明,有时间我会再另写一篇博客来专门介绍32的定时器.今天我们 ...
最新文章
- 从面试官角度观察到的程序员工资瓶颈,同时给出突破瓶颈的建议
- LeakDiag 微软一款检测memory leak的工具
- custom Idp sapdev 申请用户
- 华字后面配什么字比较好_女孩叫华什么名字好听 华字和什么字搭配取名最好...
- html提交表单给php邮件发送,在HTML表单中通过PHP自动发送电子邮件
- Python笔记-安装python虚拟环境及配置opencv及通过opencv识别颜色
- python kivy kv模板调用_正确使用.kv文件进行Kivy并将其导入到Python...
- IDEA 当前项目jdk版本查看
- mysql 事务 库存_库存事务处理临时表
- 关于pr(Premiere)的记录
- 用户sa登录失败的解决办法
- win7共享文件提示输入网络密码
- selenium模拟登录163邮箱,定位账号及密码输入框问题和iframe嵌套
- 电子宠物小狗-内部结构是什么?
- 细菌,真菌,病毒——感染,免疫反应以及治疗用药差异
- 基于Spark的电影推荐系统(推荐系统~5)
- 魔兽世界怀旧服显示从服务器断开,魔兽世界怀旧服服务器断开连接该怎么办_怀旧服服务器断开连接解决方法_3DM网游...
- 怎么删除桌面上多余的ie浏览器图标?
- 利用Android传感器开发指南针
- 微软培训 解决ASP.NET TreeView断线问题