CC2530的中断系统和定时器原理
CC2530单片机原理及应用教学课件第5章

时间 。
浪费功耗。
如果协调器存储了多个要转发的帧,假设这些帧的目的地址是各个终端 设备,那么将这些目的地址加载到源地址表中,只有地址匹配的终端设备地 址请求,才会给予自动应答。如果协调器中未存储某个设备地址的帧,那么, 协调器不会就此设备的轮询请求给予应答。节省了功耗。
5.1.2 源地址匹配
RF内核
定时器2用于无线电事件计时,以捕获输入数据包的时间戳。定时器2在 睡眠模式下也保持计数。
5.2 IEEE802.15.4-2006标准帧格式及处理
知识点1:数据帧处理 ✓ 提问1:数据帧由哪几个部分组成?如何产生数据帧? ✓ 提问2:接收方在接收到数据帧之后如何处理? 知识点2:确认帧 ✓ 提问:确认帧有什么作用?它由哪几部分组成?
5.2 IEEE802.15.4-2006标准帧格式及处理
CC2530支持的Zigቤተ መጻሕፍቲ ባይዱee协议栈,物理层和MAC层遵循 IEEE802.15.4-2006标准,所以本节学习基与该标准的数据帧发送 的基本知识,包括帧格式、帧处理过程。
5.2.1 帧格式
CC2530的帧格式包括数据帧格式、确认帧格式,下面分别介绍。 1. 数据帧格式
5.3.2 RXFIFO访问
RXFIFO访问 在对RXFIFO进行操作的过程中,可能会发生上溢或下溢的情况。 当RXFIFO接收到的数据超过128字节时,RXFIFO将产生溢出, 此种溢出被称为上溢; 当RXFIFO为空的时候,且软件从RXFIFO中读取数据时,会产生 溢出,此种溢出被称为下溢。 接收端的溢出可以通过设置寄存器标志来判定,并且溢出还可以 产生错误中断。
5.3.1 TXFIFO访问
有两种方式将数据帧写入到TXFIFO中。
通过写RFD寄存器的方式将数据帧写入到TXFIFO中。 通过使能FRMCTRL1.IGNORE_TX_UNDERF位,可以直接将数据写入
CC2530定时器使用

通过本次实验将会掌握定时器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。
2-CC2530简介

CC2530外设
强大的5通道DMA IEEE802.15.4MAC定时器,通用定时器(一个16 位定时器,一个8位定时器) IR发生电路(IR 中断) 具有捕获功能的32-kHz睡眠定时器 硬件支持CSMA/CA 支持精确的数字化RSSI/LQI
CC2530外设
ledio.h
#ifndef _LEDIO_H_ #define _LEDIO_H_ #include <ioCC2530.h> #define LED_2 P1_1 extern void IoInit(void); extern void Delay(unsigned int time); #endif
CC2530基础开发
CC2530芯片
CC2530 是基于2.4-GHz IEEE802.15.4、ZigBee 和 RF4CE 上的一个片上系统解决方案。其特点是以极 低的总材料成本建立较为强大的网络节点。 CC2530 芯片结合了RF 收发器,增强型8051 CPU, 系统内可编程闪存,8-KB RAM 和许多其他模块的 强大的功能。如今CC2530 主要有四种不同的闪存 版本:CC2530F32/64/128/256,分别具有 32/64/128/256KB 的闪存。其具有多种运行模式, 使得它能满足超低功耗系统的要求。同时CC2530 运行模式之间的转换时间很短,使其进一步降低能 源消耗。
main.c
#include <ioCC2530.h> #include "ledio.h" main() { IoInit(); while(1) { LED_2 = 0; Delay(20); LED_2 = 1; Delay(20); } }
CC2530单片机原理及应用教学课件第3章

~SRAM_SIZE-1。
返回
3.1.2 存储器和映射
CODE映射一
0xFFFF Bank 0-7
(32KB FLASH)
0x8000 0x7FFF
普通区/Bank 0 (32KB FLASH)
0x0000
CC2530F256中的FLASH存储空间为256KB, 超出了8051单片机16位地址总线的寻址空间。
3.3 通用 I/O
3.3.1 功能寄存器PxSEL 3.3.2 方向寄存器PxDIR 3.3.3 配置寄存器 PxINP 教学目标:掌握CC2530通用 I/O 寄存器及其应用。
3.3 通用I/O
知识点1:I/O端口的特点、分类、设置方法 提问:I/O端口的重要特点是什么?CC2530有哪些端口?分别是多少位? 对应哪些引脚? 知识点2:功能选择寄存器PxSEL 提问:功能选择寄存器有什么作用?如何配置? 知识点3:方向寄存器PxDIR 提问:方向寄存器有什么作用?如何配置? 知识点4:寄存器应用 提问:如何控制LED闪烁
1111
=0xFFF F
信息页面映射到XDATA的地址区域为
XBANK ( 可选的32KB闪存区 )
0x7800~0x7FFF,个只读区域,存储与芯片相
0x8000 0x7FFF
0x7800
信息页面 (2KB)
关的信息。 8051的SFR寄存器映射的地址区域为
8051 SFR空间 8051 DATA 空间
(0x8000+SRAM_SIZE-1),从而使程序代码从RAM执行。
0:SRAM映射到CODE功能禁用;1:SRAM映射到CODE功能使能
2~0 XBANK[2:0] 000 R/W XDATA区选择,控制物理闪存存储器的哪个代码区域映射到
(完整word版)CC2530实验指导书

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定时器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外部中断

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协议栈定时器中断的工作原理

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协议栈定时器中断的工作原理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 当中断发生时,不管该中断使能或禁止,CPU 都会在中断 标志寄存器中设置中断标志位。如果当设置中断标志时中 断使能,那么在下一个指令周期,由硬件强行产生一个 LCALL 到对应的向量地址,运行中断服务程序。
• 中断的响应需要不同的时间,取决于该中断发生时 CPU
202的1/2/状4 态。
16
中断响应时间
•
LEDFlag = !LEDFlag;
•
}
•
}
2021/2/4
if(LEDFlag)
{
LED2 = LED1;
LED3 = !LED2;
LED1 = !LED1; LED灯闪烁一下
// 每 1s
LEDFlag = !LEDFlag; // 闪 烁标志变量置0
}
}
}
24
谢谢
2021/2/4
20
中断优先级及其赋值的中断源显示在表 2-7 中。每组赋值 为 4 个中断优先级之一。当进行中断服务请求时 ,不允许 被较低级别或同级的中断打断。
2021/2/4
21
当同时收到几个相同优先级的中断请求时, 采取如同表 28 所列的轮流探测顺序来判定哪个中断优先响应 。
2021/2/4
2021/2/4
11
使能中断步骤: 1 清除中断标志。 2 如果有,则设置 SFR 寄存器中对应的各中断使能位为 1 3 设置寄存器 IEN0 、 IEN1 和 IEN2 中对应的中断使能 位为1 4 设置 IEN0 中的 EA 位为 1 使能全局中断。 5 在该中断对应的向量地址上,运行该中断的服务程序。
机周时间与主振频率有关:机周时间=12/fosc fosc=12MHZ时,1机周=1S; fosc=6MHZ 时,1机周=2S。
2021/2/4
5
STC89C51
• 启动重新赋值:清零
2021/2/4
6
中断系统
日常生活中中断的例子:
你正在专心看书,突 然电话铃响,于是你记下正 在看的书的页数,去接电话, 接完电话后再回来接着看书。
2021/2/4
2
STC89C51 •工作方式的设置:
CC2530 工作方式的设置:
2021/2/4
3
STC89C51
CC2530
2021/2/4
4
STC89C51
计算定时/计数初值
89C51定时/计数初值计算公式:
CC2530
初始化
其中: N与工作方式有关: 方式0时,N=13; 方式1时,N=16; 方式2、3时,N=8。
• 中断的响应需要不同的时间,取决于该中断发生时 CPU 的状态。当 CPU 正在运行的中断服务程序,其优
• 先级大于或等于新的中断时,新的中断暂不运行,直至新 的中断的优先级高于正在运行的中断服务程序。在其
• 他情况下,中断响应的时间取决于当前的指令,最快响应 一个中断的时间是 7 个机器指令周期,其中 1 个机器
CC2530的中断系统和定时器原理
CC2530及STC89C51芯片对比
STC89C51
•定时器个数:2 •工作模式:
•
计数器工作模式
定时器工作模式
•工作方式:4种工作方式(方 式0-方式3)
CC2530
•定时器个数:4
•工作模式:
•
自由运行模式
模模式
正计数/倒计数模式
通道模式控制
输入捕获模式
输出比较模式
2021/2/4
12
中断使能寄存器0
2021/2/4
13
中断使能寄存器1
2021/2/4
14
中断使能寄存器2
2021/2/4
15
中断处理
• 当中断发生时,CPU 就指向中断向量地址。一旦中断服务 开始,就只能够被更高优先级的中断打断。中断服务程序 由中断指令 RETI终止,当 RETI 执行时,CPU 将返回到中 断发生时的下一条指令。
CC2530
CPU 有18个中断源。每个中 断源都有它自己的位于一系 列 SFR 寄存器中的中断请 求标志。相应标志位请求的 每个中断可以分别使能或禁 用。
2021/2/4
10
每个中断请求可以通过设置中断使能 SFR 寄存器的中 断使能位 IEN0 , IEN1 或者 IEN2 使能或禁止。
注意某些外部设备有若干事件,可以产生与外设相关的 中断请求。这些中断请求可以作用在端口 0 、端口 1 、 端口 2 、定时器 1 、定时器 2 、定时器 3 、定时器 4 和无线电上。对于每个内部中断源对应的 SFR 寄存 器,这些外部设备都有中断屏蔽位。
• uint LEDFlag; //标志是否要闪烁
•
T1CTL = 0x05;
• void InitialT1test(void); //初始化函 •
T1STAT= 0x21;
//通道0,中断有
数声明
效,8分频;自动重装模式(0x0000->0xffff)
•}
2021/2/4
23
• void main()
• 指令周期用于探测中断,其余 6 个用来执行 LCALL。
2021/2/4
17
中断标志寄存器4
2021/2/4
18
中断标志寄存器5
2021/2/4
19
中断优先级
•中断组合成为 6 个中断优先组,每组的优先级通过设置寄 存器 IP0 和 IP1 实现。为了给中断(也就是它所在的中断 优先组)赋值优先级,需要设置 IP0 和 IP1 的对应位,如 表 2-6 所示。。
22
CC2530定时中断代码例程
• void InitialT1test(void)
• #include <ioCC2530.h>
•{
• #define uint unsigned int
•
//初始化LED控制端口P1
• #define uchar unsigned char
•
P1DIR = 0x03; //P10 P11 为输出
2021/2/4
8
CPU处理事件的过程,称为CPU的中断响应过程。 对事件的整个处理过程,称为中断处理(或中断服务)。
将能引起中断的事件称为中断源。 CPU现行运行的程序称为主程序。 处理随机事件的程序称为中断服务子程序。
2021/2/4
9
STC89C51
中断源个数:5个 外部输入中断源INT0(P3.2) 外部输入中断源INT1(P3.3) 片内定时器T0的溢出 片内定时器T1的溢出 片内串行口发送或接收中断源
•
•{
•
• InitialT1test(); //调用初始化函 •
数
•
• while(1) //查询溢出
•
ON > 0)
•
{
•
•
•
IRCON = 0; //清溢出标志 •
•
counter++;
•
if(counter==15) //中断计数,
约0.25s
•
{
•
counter =0;
2021/2/4
7
计算机中的中断概念:
CPU正在执行程序时,单片机外部或内部发生的某 一事件,请求CPU迅速去处理。CPU暂时中止当前 的工作,转到中断服务处理程序处理所发生的事 件。处理完该事件后,再回到原来被中止的地方, 继续原来的工作,这称为中断。 CPU处理事件的过程,称为CPU的中断响应过程。 对事件的整个处理过程,称为中断处理(或中断 服务)。
• #define LED1 P1_0
•
P0DIR = 0x10; //P04为输出
• #define LED2 P1_1
• #define LED3 P0_4
• uint counter=0; 次数
• • //统计溢出 • •
LED1 = 1; LED2 = 1; LED3 = 1; //初始化计数器1