CC2530的中断系统和定时器原理
- 格式:ppt
- 大小:2.03 MB
- 文档页数:25
通过本次实验将会掌握定时器T1的一些简单用法。
本次实验学习到的新寄存器:T1STAT:定时器1的状态寄存器,D4~D0为通道4~通道0的中断标志,D5为溢出标志位,当计数到最终技术值是自动置1。
源代码:#include <ioCC2530.h>#define uint unsigned int#define uchar unsigned char#define LED1 P1_0 //定义LED1为P10口控制#define LED2 P1_1 //定义LED2为P11口控制#define LED3 P1_4 //定义LED3为P14口控制uint counter=0; //统计溢出次数uintLEDFlag; //标志是否要闪烁void InitialT1test(void); //初始化函数声明void InitialT1test(void){//初始化LED控制端口P1P1DIR = 0x13; //P10 P11 P14为输出P0DIR = 0x02;LED1 = 1;LED2 = 1;LED3 = 1;//初始化计数器1T1CTL = 0x05; //通道0,中断有效,8分频;自动重装模式(0x0000->0xffff)}void main(){InitialT1test(); //调用初始化函数while(1){if(IRCON==0x02) //查询溢出中断标志,是否有中断并且为定时器1发出的中断{IRCON = 0; //清溢出标志counter++;if(counter==30) //中断计数,约0.25s{counter =0;LED2 = LED1;LED3 = !LED2;LED1 = !LED1;LEDFlag = !LEDFlag;}}if(LEDFlag){LED2 = LED1;LED3 = !LED2;LED1 = !LED1; // 每1s LED灯闪烁一下LEDFlag = !LEDFlag; // 闪烁标志变量置0}}}实验总结:定时器1的工作原理:这次实验中定时器1工作在自由运行方式下,定时器1开始工作后从0x0000开始做加1计算,一直到0xffff。
CC2530实验指导书合肥市博焱科技有限公司目录一、CC2530基础实验部分 (3)1。
1 输入输出I/O 控制实验 (3)1.1.1 CC2530 基础实验1 :LED自动闪烁 (3)1.1。
2 CC2530 基础实验2 :按键控制LED开关 (5)1.2 中断实验 (6)1.2.1CC2530 基础实验3 :外部中断 (6)1。
3 定时/ 计数器实验 (8)1.3.1CC2530 基础实验4:T1使用 (8)1。
3.2CC2530 基础实验5 :T2使用 (9)1.3.3CC2530 基础实验6:T3使用 (12)1。
3.4 CC2530 基础实验8 :T4使用 (15)1.4 串口UART (17)1.4.1CC2530 基础实验9:单片机串口发数 (17)1.4.2CC2530 基础实验10:在PC用串口控制LED (19)1。
4.3CC2530 基础实验11:PC串口收数并发数 (20)1。
4.4CC2530 基础实验12:串口时钟PC显示 (22)1.5 睡眠定时器实验 (23)1。
5。
1 CC2530 基础实验13:系统睡眠工作状态 (23)1。
5。
2 CC2530 基础实验14 :睡眠定时器使用 (24)1。
6 ADC实验 (26)1.16.1 CC2530 基础实验15 :ADC实验 (26)1。
7 看门狗 (28)1。
7.1CC2530 基础实验16:看门狗模式 (28)一、CC2530基础实验部分1。
1 输入输出I/O 控制实验1.1.1 CC2530 基础实验1 :LED自动闪烁一、实验目的:本实验的目的是让用户了解CC2530的I/O接口的编程方法,学会使用I/O操作外部设备。
实验以LED为外设,通过I/O控制LED的亮灭.二、实验仪器设备仿真器1 台,传感器节点底板1 块,ZigBee 模块 1 块,USB 连接线1 根。
三、实验内容:(一)实验原理说明:硬件说明:图1 LED连接原理图如图1所示,发光二极管的D2的阴极与CC2530的P1_1连接,发光二极管的D3的阴极与CC2530的P1_0连接。
CC2530定时器CC2530定时器定时器介绍什么是定时器?定时器是⼀种能够对输⼊时钟(或脉冲)进⾏计数,在达到计数值时可以触发中断的外设。
定时器有哪些作⽤?定时器功能: 对输⼊的时钟进⾏计数,达到计数值可以触发中断。
输⼊计数器功能: 对外部的脉冲个数输⼊进⾏计数。
PWM输⼊捕获功能: 可以获取输⼊的PWM的频率和脉宽信息。
PWM输出功能: 按⼀定频率和脉宽输出PWM信号。
PWM = Pulse width modulation,是⼀种脉宽调制技术,可以利⽤脉冲的宽度控制LED的亮度、电机的转速等。
寄存器分析功能图寄存器⾃由运⾏模式取模模式向上向下计数模式定时器1分析定时器1是⼀个16位的定时器,主要有以下⼏个功能:5个通道,每隔通道可以单独设置计数值。
可以设置输⼊捕获的边沿(上升沿、下降沿、双边沿)⾃由运⾏模式、取模模式、向上/向下计数模式时钟分频可以设置为1、8、32、128每隔通道都可以触发中断可以触发DMA请求⼯作模式介绍⾃由运⾏模式: 计数值⾃增达到0xFFFF之后归零,重新开始计数。
取模模式: 计数值⾃增到T1CC0配置的数字后归零,重新开始计数。
向上/向下计数模式: 计数值先⾃增到T1CC0,然后开始⾃减到0,然后再次开始⾃增(这个就是呼吸灯的⼯作⽅式,不知道还有什么作⽤)。
由于每⼀种模式下的配置不同,这⾥使⽤定时器来实现控制LED以1Hz的频率闪烁,也就是亮0.5S,然后灭0.5秒。
那么需要配置为取模模式⽐较⽅便,到达设定值后⾃动归零,重新开始计数。
相关的寄存器有:T1CC0H:T1CC0L计数值的⾼8位和低8位。
T1STAT.CH0IF定时器1的通道1中断标志,写⼊0清除标志。
T1STAT.OVFIF定时器1的计数溢出中断标志,写⼊0清除标志。
IEN1.T1EN定时器1的中断开关。
TIMIF.OVFIM定时器1的中断溢出使能位。
具体实现定时器1的通道0的初始化//16MHz RC是默认的时钟源,没有校准的时候误差是正负18%//定时器的⼯作频率 16MHz / 128 = 125000Hz//定时500ms,也就是计数62500//周期应该是1秒,实测940毫秒,RC的误差,切换到外部晶振应该会准确⼀些的。
CC2530外部中断⼀、中断基础概念内核与外设之间的主要交互⽅式有两种:轮询和中断。
中断系统使得内核具备了应对突发事件的能⼒。
在执⾏CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执⾏的程序,转⽽去执⾏另外⼀段特殊程序来处理出现的紧急事务,处理结束后,CPU⾃动返回到原来暂停的程序中去继续执⾏。
这种程序在执⾏过程中由于外界的原因⽽被中间打断的情况,称为中断。
采⽤中断技术后,可以为计算机系统带来以下好处:1)实现分时操作速度较快的CPU和速度较慢的外设可以各做各的事情,外设可以在完成⼯作后再与CPU进⾏交互,⽽不需要CPU去等待外设完成⼯作,能够有效提⾼CPU的⼯作效率。
2)实现实时处理在控制过程中,CPU能够根据当时情况及时做出反应,实现实时控制的要求。
3)实现异常处理系统在运⾏过程中往往会出现⼀些异常情况,中断系统能够保证CPU及时知道出现的异常,以便CPU去解决这些异常,避免整个系统出现⼤的问题。
两个重要的概念:<1> 中断服务函数:内核响应中断后执⾏的相应处理程序。
例如ADC转换完成中断被响应后,CPU执⾏相应的中断服务函数,该函数实现的功能⼀般是从ADC结果寄存器中取⾛并使⽤转换好的数据。
<2> 中断向量:中断服务程序的⼊⼝地址,当CPU响应中断请求时,会跳转到该地址去执⾏代码。
⼆、 CC2530中断CC2530具有18个中断源,每个中断源都有它⾃⼰的位于⼀系列SFR 寄存器中的中断请求标志。
相应标志位请求的每个中断可以分别使能或禁⽤。
Tip:(1)当调⽤中断服务例程时清除硬件。
(2)另外的 IRQ 掩码和 IRQ 标志位存在。
三、CC2530中断处理函数格式书写中断服务函数与⼀般⾃定义函数不同,有特定的书写格式:#pragma vector = 中断向量__interrupt void 函数名称(void){/*此处编写中断处理函数的具体程序*/PxIFG = 0; //先清除Px引脚的中断状态标志位PxIF = 0; //再清除Px端⼝组的中断状态标志位}<1> 在每⼀个中断服务函数之前,都要加上⼀句起始语句:#pragma vector = <中断向量><中断向量>表⽰接下来要写的中断服务函数是为那个中断源服务的,该语句有两种写法:#pragma vector = 0x7B或者#pragma vector = P1INT_VECTOR前者是中断向量的⼊⼝地址,后者是头⽂件“ioCC2530.h”中的宏定义。
cc2530协议栈定时器中断的工作原理1.引言在无线通信领域中,C C2530芯片是一款非常常见的单片机芯片,广泛应用于物联网、智能家居等场景中。
其内部集成了协议栈以实现无线通信功能。
本文将着重介绍c c2530协议栈定时器中断的工作原理。
2.定时器的作用在嵌入式系统中,定时器是一种重要的设备,用于定时操作和任务调度。
在c c2530芯片中,定时器被广泛应用于协议栈的各个模块,实现对通信和维护任务的精准控制。
3. cc2530协议栈定时器的特点c c2530芯片的协议栈中包含多个定时器,其中最重要的是MA C层定时器和P HY层定时器。
这些定时器具有以下特点:-高精度:定时器采用高精度的时钟源,并通过时钟分频技术实现微秒级的时间精度。
-可编程性:用户可以根据自己的需要对定时器进行配置和设置。
-中断触发:定时器可以在达到设定的定时时间时产生中断信号。
4. cc2530协议栈定时器中断的处理流程c c2530协议栈定时器中断的处理流程如下:-初始化定时器:在使用定时器前,需要对其进行初始化设置,包括选择时钟源、设置定时时间等。
-启动定时器:一旦定时器被启动,它便开始计时,并在达到设定的定时时间时触发中断信号。
-中断处理:当定时器中断信号触发时,C P U会进入中断处理程序,并执行相应的中断服务例程。
-中断服务例程:中断服务例程是用来处理定时器中断的代码段,其中包括对定时器的停止、重置等操作,以及其他需要执行的任务。
5.示例代码下面是一个简单的示例代码,演示了如何使用cc2530协议栈定时器中断:#i nc lu de<c c2530.h>//定时器中断服务例程#p ra gm av ec to r=TIM E R1_O VF_V EC TO R__in te rr up tv oi dTi m er1O ve rf lo w(voi d){//中断处理代码//...//定时器重置T1CT L|=0x01;}v o id ma in(v oi d){//初始化定时器T1CT L=0x02;//设置定时时间T1CC0L=0x50;T1CC0H=0x00;//启动定时器T1CT L|=0x04;//启用定时器中断I E N0|=0x80;//全局使能中断E A=1;w h il e(1){//主循环}}6.总结本文介绍了c c2530协议栈定时器中断的工作原理。
CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)⽬录1. 前期预备知识1.1 定时器中断触发本次实验需关注的中断寄存器。
在本次实验中,分别会使⽤T1和T3定时器完成功能,所以我们需要注意上图中标注出的中断寄存器。
T1定时器:16位定时器(065535)。
T3定时器:8位定时器(0255)1.2 相关寄存器注:⼀下只给出实验中新出现的寄存器,并不是本次实验需⽤到的所有寄存器;想了解其它寄存器作⽤及功能请看之前的基础实验⽂档,或查看CC2530中⽂数据⼿册。
寄存器名称作⽤寄存器描述T1CTL (0xE4)定时器1的控制和状态T1CTL (bit 3~2) 为分频器划分值,具体值如下:00:标记频率/101:标记频率/810:标记频率/3211:标记频率/128T1CTL (bit 1~0) 为选择定时器1模式00:暂停运⾏01:⾃由运⾏10:模,从0x0000到T1CC0反计数11:正计数/倒计数,从0x0000到T1CC0反复计数并且从T1CCO倒计数到0x000T1STAT (0xAF)定时器1 状态bit5:定时器计数器溢出中断标志bit4:定时器1通道4中断标志bit3:定时器1通道3中断标志bit2:定时器1通道2中断标志bit1:定时器1通道1中断标志bit0:定时器1通道0中断标志IEN1 (0xB8)中断使能 1IEN1寄存器中我们只使⽤了bit1,bit3所在的功能,bit1 : T1计时器中断使能bit3 : T3计时器中断使能TIMIF (0xD8)定时器1/3/4中断屏蔽/标志TIMIF我们这⼀次实验只⽤到了bit6为定时器1溢出中断屏蔽IRCON (0xC0)中断标志4bit1:定时器1中断标志。
当定时器1中断发⽣时设为1并且当CPU向量指向中断服务例程时清除。
0:⽆中断未决1:中断未决T3CTL (0xCB)定时器3的控制和状态bit[7:5] : 定时器时钟分频倍数选择:000:不分频; 001:2分频; 010:4分频011:8分频; 100:16分频; 101:32分频110:64分频; 111:128 分频.bit4 : T3 起⽌控制位bit3 : 溢出中断掩码 0:关溢出中断 1:开溢出中断bit2 : 清计数值⾼电平有效Bit[1:0]T3模式选择00:⾃动重装 0x00-0xFF01:DOWN (从T3CC0 到0X00计数⼀次)10:模计数(反复从 0X00到T3CC0 计数)11:UP/DOWN(反复从0X00到T3CC0 计数再到0X00)T3CCTL0(0xCC)T3 通道 0 捕获/⽐较控制寄存器bit6: 通道0中断屏蔽 0:中断禁⽌ 1:中断使能bit5~3: T3 通道0 ⽐较输出模式选择bit2: T3 通道0模式选择: 0:捕获 1:⽐较bit1~0 T3 通道 0 捕获模式选择00 没有捕获 01 上升沿捕获10 下降沿捕获 11 边沿捕获T3CC0(0xCD)定时器 3 通道0捕获/⽐较值定时器捕获/⽐较值通道 0。
1、中断源CC2530的CPU有18个中断源,每个中断源都有它自己的位于一系列SFR寄存器中的中断请求标志。
每个中断请求都需要中断使能位来使能或禁止,具体定义如下表:表1(1) Hardware-cleared when interrupt service routine is called(当中断服务例程被调用后,硬件清除标志位)(2) Additioal IRQ mask and IRQ flag bits exist.(附加中断屏蔽和中断标志位存在)2、中断屏蔽每个中断通过IEN0、IEN1、IEN2里的相应中断使能位来禁止或启用,具体如下表。
中断使能寄存器(IEN0,IEN1,IEN2)(0:中断禁止1:中断使能)表2注意某些外部设备会因为若干事件产生中断请求。
这些中断请求可以作用在端口0、端口1、端口2、定时器1、定时器2、定时器3、定时器4或者无线上。
这些外部设备在相应的寄存器里都有一个内部中断源的中断屏蔽位。
为了启用中断,需要以下步骤:(1)清除中断标志位(Clear interrupt flags);(2)如果有,则设置SFR寄存器中对应的各中断使能位;(3)设置寄存器IEN0、IEN1和IEN2中对应的中断使能位为1;(4)设置全局中断位IEN0.EA为1;(5)在该中断对应的向量地址上,运行该中断的服务程序。
下图给出了所有中断源及其相关的控制和状态寄存器的概述图;当中断服务程序被执行后,阴影框的中断标志位将被硬件自动清除;3、中断处理当中断发生时,CPU就指向表1所描述的中断向量地址。
一旦中断服务开始,就只能够被更高优先级的中断打断。
中断服务程序由指令RETI终止,当执行RETI后,CPU将返回到中断发生时的下一条指令。
当中断发生时,不管该中断使能或禁止,CPU都会在中断标志寄存器中设置中断标志位。
当中断使能时,首先设置中断标志,然后在下一个指令周期,由硬件强行产生一个LCALL 到对应的向量地址,运行中断服务程序。
1、中断源
CC2530的CPU有18个中断源,每个中断源都有它自己的位于一系列SFR寄存器中的中断请求标志。
每个中断请求都需要中断使能位来使能或禁止,具体定义如下表:表1
3、中断处理
当中断发生时,CPU就指向表1所描述的中断向量地址。
一旦中断服务开始,就只能够被更高优先级的中断打断。
中断服务程序由指令RETI终止,当执行RETI后,CPU将返回到中断发生时的下一条指令。
当中断发生时,不管该中断使能或禁止,CPU都会在中断标志寄存器中设置中断标志位。
当中断使能时,首先设置中断标志,然后在下一个指令周期,由硬件强行产生一个LCALL 到对应的向量地址,运行中断服务程序。
新中断的响应,取决于该中断发生时CPU的状态。
当CPU正在运行的中断服务程序,其优先级大于或等于新的中断时,新的中断暂不运行,直至新的中断的优先级高于正在运行的中断服务程序。
中断响应的时间取决于当前的指令,最快的为7个机器指令周期,其中1个机器指令周期用于检测中断,其余6个用来执行LCALL。
中断标志
表4-1
当同时收到几个相同优先级的中断请求时,采用表4-4所列的轮流检测顺序来判定哪个中断优先响应。
表4-4中断轮流检测顺序。
cc2530的IO中断通⽤I/O的中断cc2530的CPU有18个中断源,每个中断都可以分别使能和控制。
18个中断源的优先级18个中断源分为6个组,每⼀组有3个中断源,中断优先级可以通过配置相应寄存器来实现中断源的分组编号中断IPG0 REFRR RF DMAIPG1 ADC T1 P2INTIPG2 URX0 T2 UTX0IPG3 URX1 T3 UTX1IPG4 ENC T4 P1INTIPG5 ST P0INT WDT中断优先级是由寄存器IP0和IP1来实现的,IP1_X IP0_x表⽰的数字约⼤,优先级越⾼IP1_X IP0_X 优先级0 0 0(优先级别最低)0 1 11 0 21 1 3(优先级别最⾼)IP1_X与IP0_X中的X代表了中断优先级组的组名,即IPG0~IPG5,设置优先级时3的优先级最⾼,0的优先级最低例://设置IPG3的优先级别最⾼IP1_IPG3=1;IP0_IPG3=1;//设置IPG0的优先级别最低IP1_IPG1=0;IP1_IPG0=0如果在同⼀个组中的优先级同时发⽣,会有⼀个先后,决定这个先后顺序的就是中断轮流探测顺序。
(书中有⼀个表,先不放了,在书上的P.59)I/O中断通⽤I/O设置为输⼊后,可以⽤于产⽣中断,并且通⽤I/O中断还可以设置其触发⽅式,在设置中断时需要将发⽣中断引脚的使能位置置为1,端⼝使能位设置寄存器:P0端⼝中断使能位——IEN1.P0IEP1端⼝中断使能位——IEN2.P1IEp2端⼝中断使能位——IEN2.P2IE这⾥⼀定要注意,IENx寄存器中断使能是对整个端⼝进⾏使能,不是对某⼀个引脚。
中断使能寄存器IEN1控制P0端⼝,定时器1~4和DMA中断的使能和禁⽌,如果需要某⼀位中断使能,只需将IEN1中对应的位设置为1即可。
中断使能寄存器IEN1位名称复位描述7:6 --- 00 保留5 P0IE 0 端⼝0中断使能4 T4IE 0 定时器4中断使能3 T3IE 0 定时器3中断使能2 T2IE 0 定时器2中断使能1 T1IE 0 定时器1中断使能0 DMAIE 0 DMA中断使能IEN1中断设置//设置P0端⼝中断使能IEN1 |= 0x20;中断使能寄存器IEN2位名称复位描述7:6 --- 00 保留5 WDTIE 0 看门狗定时器中断使能4 P1IE 0 端⼝1中断使能3 UTX1IE 0 USART1 TX中断使能2 UTX0IE 0 USART2 TX中断使能1 P2IE 0 端⼝2中断使能0 RFIE 0 RF⼀般中断使能IEN2中断设置//设置P1和P2端⼝中断使能IEN2|=0x12;IEN1使能寄存器可以控制P0端⼝中断使能,IEN2中断寄存器可以控制P1端⼝和P2端⼝中断使能。
CC2530定时器⼀、定时/技术器的基本原理 定时/计数器,是⼀种能够对内部时钟信号或外部输⼊信号进⾏计数,当计数值达到设定要求时,向CPU提出中断处理请求,从⽽实现定时或者计数功能的外设。
定时/计数器的最基本⼯作原理是进⾏计数。
不管是定时器还是计数器,本质上都是计数器,可以进⾏加1(减1)计数,每出现⼀个计数信号,计数器就会⾃动加1(⾃动减1),当计数值从0变成最⼤值(或从最⼤值变成0)溢出时,定时/计数器就会向CPU提出中断请求。
⼆、CC2530的定时/计数器根据数据⼿册可知 CC2530 总共有 4 个定时器,但是定时器 2 被系统占⽤,可⽤的只有三个,分别为定时器 1、3、4。
其中定时器 3 和定时器 4 是两个 8 位定时器,定时器 1 是⼀个独⽴的 16 位定时器。
为CC2530中功能最全的⼀个定时/计数器,在应⽤中应优先选⽤。
定时器1的⼯作模式有三种:<1> ⾃由运⾏模式:计数器从 0x0000 开始,每个活动时钟边沿增加 1。
当计数器达到 0xFFFF 时(溢出),计数器载⼊ 0x0000,继续递增它的值,如图 3.2.1 所⽰。
当达到最终计数值 0xFFFF,设置标志 IRCON.T1IF 和 T1STAT.OVFIF。
如果设置了相应的中断屏蔽位TIMIF.OVFIM 以及 IEN1.T1EN,将产⽣⼀个中断请求。
⾃由运⾏模式可以⽤于产⽣独⽴的时间间隔,输出信号频率。
<2> 模模式:计数器从0x0000开始,在每个活动时钟边沿增加1,当计数器达到T1CC0寄存器保存的值时溢出,计数器⼜将从0x0000开始新⼀轮的递增计数,模模式的计数周期可由⽤户⾃⾏设定。
<3> 正计数/倒计数模式:计数器反复从 0x0000 开始,正计数直到达到 T1CC0H 与 T1CC0L 保存的值。
然后计数器将倒计数直到0x0000,如图 3.2.3 所⽰。
这个定时器⽤于周期必须是对称输出脉冲⽽不是 0xFFFF 的应⽤程序,因此允许中⼼对齐的 PWM 输出应⽤的实现。