当前课程知识点:ARM微控制器与嵌入式系统 > 第五章 ARM微控制器的各种外设 > E3 实验三 定时器中断编程实操 > E3 实验三 定时器中断编程实操
各位同学大家好
我是清华大学工程物理系的曾鸣老师
欢迎大家回到我们
ARM微控制器与嵌入式系统的MOOC课堂
进行每周一次的嵌入式系统之旅
那么在这个单元里呢
我们紧接着刚刚学习的关于时钟中断的知识
进行我们第三次的实验
我们在前面若干次实验里呢
熟悉了我们嵌入式系统
进行了串行的通讯
进行了IO的点灯
那么在时钟中断这个实验内容里头
我们将进行一些既简单
又不那么简单的实验任务
首先回顾一下我们实验所涉及到的知识
从我们MOOC课程的学习结构来讲
我们在第三章 第二节
大家回忆一下学习过关于中断的
若干个基本概念和知识
那么在刚刚完成的
第五章第四节这个单元里头呢
我们学习了对于IRQ的这个时钟中断
这一类中断的一些基本知识
那么这些知识如果大家按照曾老师的要求
去好好的学习阅读芯片手册的话
关于寄存器的地址定义
大家可以在KL25的芯片手册的第四章找到
而关于Sys Tick这样一个系统时钟这样一个外设
它是由ARM公司所定义的
所有ARM公司通用的内核外设
所以它的内容呢
应该在ARM公司
ARMCortexM0+的通用芯片手册的
第四章第四节System timer
也就是Sys Tick这个单元里头
可以找到它的详细功能定义和说明
所以大家应该把芯片手册和老师讲的内容
对应起来看和学习
好 我们看一看我们的实验内容
这个实验我们把第一个实验任务
和第二个实验任务直接就一起给出来了
因为在我们学习的课程内容里
我已经讲的非常的详细
第一个任务呢
就是大家学习使用Sys Tick这样一个系统时钟
来改一改我们以前最最简单一个闪灯的程序
还是每秒钟让LED闪烁一次
但是把它改成用Sys Tick的时钟中断来驱动
那么与之相关的第二个任务呢
其实就是把我们原来通过一个按键
来控制灯的闪烁模式切换这个任务变一变
希望我们能够通过一个按键
比如我们面板上的下这个按键
来控制我们的灯的闪烁频率发生变化
按一下 按一赫兹来闪烁
一秒钟一次
再按一下 按两赫兹来闪烁
一秒钟两次 这样周而复始
那么这两个任务
为什么我直接一次性给出来呢
因为我们实验在不断进步
大家编程能力应该越来越强
大家回忆一下我们在课上给大家讲过的
编程的思想和这个主程序的结构
这两个任务其实非常容易的
应该能够在那个框架上修改
自己就能写出来
我带着大家简单的看一看
我们有了一个主程序
一个main函数
当我们用中断的方式来写这个程序的时候
大家牢牢记住
中断是一种什么样的工作模式
是设置好了中断发生的条件
当这个条件无论是定时还是通讯
还是按键满足的时候
从硬件通知CPU自动去调用对应的函数
加以执行
所以我们的main函数就像
现在大家所看到的这样
变得非常的简洁
除了一些最基本的初始化
加的这些红色的代码呢
就是把我们要用到的时钟中断
包括任务二要用到的IO的按键中断
给初始化好
main函数里头的最后一个for循环
基本上是空的
我在这里说的是
做一些比较慢的不需要时间严格的任务
日后大家可以在这里添加
但是在目前我们完成了初始化
和中断的初始化
主函数
特别是主函数的循环
它是空的
这是一个重要的编程思想
大家应该要回忆起来
那么有了这样一个main函数以后
我们是不是就把我们任务一和任务二的
要做的事情适当的分配到我们的中断里头
用中断来实现
这就是这一次实验的精髓
那对于任务一点灯
我们是不是就应该到定时器的定时中断的
那个时间间隔发生的那个
中断函数里头去定时
去做点灯这件事
而对于按键改变点灯的频率
我们应该在对应的按键中断里去做这件事
所以这两个函数的框架
就跟我们在讲课的时候给出来大家一样的
分别在Sys Tick的这个Handler和这个IRQHandler
这两个中断处理函数里头
大家去填写自己应该编写的代码
来把它加以完成
当我们的实验进行到实验3的时候
曾老师不会再给大家一个详细的
让大家可以直接照着敲的代码
大家应该锻炼自己把它编写出来的能力
那么大家可以在这里停一下
花一些时间
自己去把这个任务完成
然后再看看我们这个实验
我们这次实验非常的简单
一共就三个任务
最后一个任务是什么呢
它有点小小的难度
最后一个任务就是希望大家学会灵活的
使用Sys Tick这个时钟
在你的微控制器内部
维持一个实时钟
什么叫实时钟
就是最小限度保持 时 分 秒
就是几点几分几秒这样的时间值
你要维持这样一个时间值自己不停的运行
不停的刷新
并且呢
结合我们上上次实验做的串行通讯
然后把这个时间值通过一个UART的
异步串行通讯程序不停的从串口发送出去
换言之让你的计算机每秒一次收到一个字符串
带换行的
显示现在是几点几分几秒
于是我们在超级终端里
去看串口收到的数据的时候
曾老师希望这个程序写完以后
能收到的效果是
不停的收到
现在是比如说10点5分35秒
10点5分36秒
但是大家做这个程序一开始
你可能无法对时
你至少实现从00时00分00秒
开始计时不断的累加
那么这里给大家一些提示
就是你的Sys Tick这个系统时钟
要保证你这样一个内部数据结构
每秒钟逐一
逐渐的加一
然后这个逐渐的加一
你需要在一个变量上进行存储
而这个变量又需要在你的中断里不断的更新
又需要在你的主程序里
不断的通过串口来发送
所以大家要想清楚两件事
一个是你可能要设置一个全局变量
来分别保存你的时分秒这些值
另外呢 就是你除了在中断里
定时的去更新这些值
你可能还要学会在主程序
刚才那个空着的for循环里
去写你的串口通讯函数
把这些值从数字转换成ASCII码
再把它发送出去
大家注意我给的这两个提示
一个是全局变量
一个是在中断里改变全局变量的值
在主程序里用串口的通讯函数
把这个数据变成ASCII码
以每秒钟一次的间隔发送出去
对不对
那当然这个程序的前后台
他们之间如何调度
你这个串口发送是放在主程序
还是放在中断
其实每个同学还可以灵活
然后呢
然后曾老师没有然后了
在这个任务里
我不会再给大家一个完整的程序
甚至连程序框架都不给
这是给大家的
第一个challenge 第一个挑战
我们逐渐从第三次实验大家要过渡到
有了一个任务凝练思想
自己用代码把它写出来
当然如果大家有困难的话
欢迎大家看我们的微信群
和我们MOOC的这个讨论区里来进行讨论
大家一起来分析问题来进行学习
这就是这次实验的内容
大家好好试一试吧
-1.1 课程概览
--1.1 课程概览
-1.2 如何学好嵌入式系统
-2.1 计算机的基本概念、发展历史
-2.2 从晶体管到CPU
-2.3 概念CPU、微控制器MCU和嵌入式系统
-2.4 八卦计算机史
-2.5 不同领域、不同系列的嵌入式系统
-2.6 ARM历史与MKL25Z128 MCU
--2.6 ARM历史与MKL25Z128 MCU【习题】
-3.1 CPU的基本结构和运行机制
-3.2.1 堆栈的概念
--3.2.1 堆栈的概念【习题】
-3.2.2 堆栈的概念-头脑体操
-3.3.1 ARM的体系结构
--3.3.1 ARM的体系结构【习题】
-3.3.2 ARM的体系结构-头脑体操
-3.4.1 中断的概念和机制
-3.4.2 中断子程的概念和编程
-3.5 复位、时钟、存储器和总线
--3.5 复位、时钟、存储器和总线【习题】
-3.6 小结:MCU的总体结构和程序运行机制
--3.6 小结:MCU的总体结构和程序运行机制【习题】
-4.1 第一种外设:IO
-4.2 IO外设的编程实操-点亮LED
-4.3 IO外设的进阶知识
-4.4 嵌入式开发的基本概念与工具链
-4.5 嵌入式开发的进阶知识
-4.6 嵌入式开发中的C语言(上)
--4.6 嵌入式开发中的C语言(上)【习题】
-4.7 嵌入式开发中的C语言(下)
--4.7 嵌入式开发中的C语言(下)【习题】
-E0.1 实验零 开发板的初步认识与工具链的安装
-E0.2 实验零 体验一个例程的编译与下载
-E0.3 实验零 编写第一个程序:点亮核心板LED
-E1 实验一 点灯秘籍
-5.1 ARM微控制器外设学习概述
-5.2.1 ARM微控制器外设:通讯
-5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)
--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)
--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)【习题】
-5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)
--5.2.3 ARM微控制器的外设:异步串行通讯UART的原理(下)
--5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)【习题】
-5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口
--5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口
-5.2.5 ARM微控制器外设:UART的寄存器编程(上)
--5.2.5 ARM微控制器外设:UART的寄存器编程(上)
-5.2.6 ARM微控制器外设:UART的寄存器编程(下)
--5.2.6 ARM微控制器外设:UART的寄存器编程(下)
--5.2.6 ARM微控制器外设:UART的寄存器编程(下)【习题】
-E2 实验二 UART编程实操
-5.3.1 ARM微控制器外设:IO的中断编程(上)
-5.3.2 ARM微控制器外设:IO的中断编程(下)
-5.4.1 ARM微控制器外设:定时器的原理
-5.4.2 ARM微控制器外设:定时器的编程
--5.4.2 ARM微控制器外设:定时器的编程【习题】
-E3 实验三 定时器中断编程实操
-5.5.1 ARM微控制器外设:PWM的原理
-5.5.2 ARM微控制器外设:PWM寄存器与编程
-5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
--5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
-E4 实验四 数码管显示编程实操
-5.6.1 ARM微控制器外设:SPI通讯简介
--5.6.1 ARM微控制器外设:SPI通讯简介【习题】
-5.6.2 ARM微控制器外设:SPI寄存器与编程
-5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动
--5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动
-5.7.1 ARM微控制器外设:I2C通讯简介
-5.7.2 ARM微控制器外设:I2C的通讯协议
-5.7.3 ARM微控制器外设:I2C寄存器与编程
--5.7.3 ARM微控制器外设:I2C寄存器与编程【习题】
-5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器
--5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器
-5.8.1 ARM微控制器外设:ADC简介
-5.8.2 ARM微控制器外设:ADC基础
-5.8.3 ARM微控制器外设:ADC寄存器与编程
-E5 实验五 ADC编程实操
-E6 挑战实验
--E6 挑战实验
-6.1 嵌入式系统的接口与设计
-6.2 嵌入式系统的实例