第四章_CC2530基础开发_第1页
第四章_CC2530基础开发_第2页
第四章_CC2530基础开发_第3页
第四章_CC2530基础开发_第4页
第四章_CC2530基础开发_第5页
已阅读5页,还剩226页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、- 1 - 第四章第四章 CC2530基础开发基础开发 - 2 - 本章目标本章目标 掌握掌握I/O的使用的使用 理解存储器以及映射的关系理解存储器以及映射的关系 掌握掌握ADC的使用方法的使用方法 掌握串口和掌握串口和DMA的使用方法的使用方法 掌握定时器的使用掌握定时器的使用 - 3 - 本章目标本章目标 掌握掌握I/O的使用的使用 理解存储器以及映射的关系理解存储器以及映射的关系 掌握掌握ADC的使用方法的使用方法 掌握串口和掌握串口和DMA的使用方法的使用方法 掌握定时器的使用掌握定时器的使用 - 4 - l高性能、低功耗的高性能、低功耗的8051微控制器内核。微控制器内核。 l适应适

2、应2.4GHz IEEE802.15.4的的RF收发器。收发器。 l极高的接收灵敏度和抗干扰性。极高的接收灵敏度和抗干扰性。 l32KB/64KB/128KB/256KB闪存。闪存。 l8KB SRAM,具备各种供电方式下的数据保持能力。,具备各种供电方式下的数据保持能力。 l强大的强大的DMA功能。功能。 l只需极少的外接元件,即可形成一个简单应用系统。只需极少的外接元件,即可形成一个简单应用系统。 l只需一个晶振,即可满足网状型网络系统的需要。只需一个晶振,即可满足网状型网络系统的需要。 4.1 概述概述 CC2530芯片特征芯片特征 - 5 - l低功耗,主动模式低功耗,主动模式RX(C

3、PU空闲):空闲):24mA;主动模式;主动模式TX在在1dB(CPU空空 闲):闲):29mA;供电模式;供电模式1(4us唤醒):唤醒):0.2mA;供电模式;供电模式2(睡眠定时器运(睡眠定时器运 行):行):1uA;供电模式;供电模式3(外部中断外部中断):0.4uA;宽电源电压范围(;宽电源电压范围(2V-3.6V)。)。 l硬件支持硬件支持CSMA/CA。 l支持数字化的接收信号强度指示器支持数字化的接收信号强度指示器/链路质量指示(链路质量指示(RSSI/LQI)。)。 l具有具有8路输入路输入8位位14位位ADC。 l高级加密标准高级加密标准AES协处理器。协处理器。 l具有看

4、门狗和具有看门狗和2个支持多种串行通信协议的个支持多种串行通信协议的USART。 l1个通用的个通用的16位定时器和位定时器和2个个8位定时器,位定时器,1个个IEEE802.15.4 MAC定时器。定时器。 l21个通用个通用I/O引脚。引脚。 4.1 概述概述 CC2530芯片特征芯片特征 - 6 - 4.2 CC2530结构框架结构框架 - 7 - CC2530包含一个包含一个“增强型增强型”工业标准的工业标准的8位位8051微控制器内核,运行时钟微控制器内核,运行时钟 32MHz,具有,具有8倍的标准倍的标准8051内核的性能内核的性能 增强型增强型8051内核使用标准的内核使用标准的

5、8051指令集,并且每个指令周期是一个时钟周期,指令集,并且每个指令周期是一个时钟周期, 而标准的而标准的8051每个指令周期是每个指令周期是12个时钟周期,因此增强型个时钟周期,因此增强型8051消除了总线消除了总线 状态的浪费,指令执行比标准的状态的浪费,指令执行比标准的8051更快更快 4.2.1 CC2530CPU - 8 - 内核代码:内核代码:CC2530的的“增强型增强型8051”内核的内核的“目标代码目标代码”兼容兼容“标准标准 8051”内核的内核的“目标代码目标代码”,即,即CC2530的的8051内核的内核的“目标代码目标代码”可以可以 使用使用“标准标准8051”的编译

6、器或汇编器进行编译。的编译器或汇编器进行编译。 微控制器:由于微控制器:由于CC2530的的“增强型增强型8051”内核使用了不同于内核使用了不同于“标准标准8051” 的指令时钟,因此的指令时钟,因此“增强型增强型8051”在编译时与在编译时与“标准标准8051”代码编译时略代码编译时略 有不同,例如有不同,例如“标准标准8051”的微控制器包含的的微控制器包含的“外设单元寄存器外设单元寄存器”的指令的指令 代码在代码在CC2530的的“增强型增强型8051”不能正确运行。不能正确运行。 4.2.1 CC2530CPU CC2530的的“增强型增强型8051内核内核”与与“标准的标准的805

7、1微控制器微控制器”相比,除了速度相比,除了速度 改进之外,使用时要注意以下两点:改进之外,使用时要注意以下两点: - 9 - 4.2.2 CC2530存储器及映射存储器及映射 CC2530物理存储器物理存储器 CC2530存储空间存储空间 映射映射 存储器仲裁存储器仲裁 - 10 - 4.2.2 CC2530存储器及映射存储器及映射 物理存储器物理存储器 SRAM上电时,上电时,SRAM的内容未定义,在供电的情况下,的内容未定义,在供电的情况下,SRAM的内容被保留的内容被保留 FLASH片上闪存存储器,主要为了保存程序和常量数据。片上闪存存储器,主要为了保存程序和常量数据。FLASH由一组

8、由一组2KB的页面组成的页面组成 信息信息 页面页面 信息页面是一个信息页面是一个2KB的只读区域,它的主要作用是存储全球唯一的的只读区域,它的主要作用是存储全球唯一的IEEE地址地址 - 11 - 4.2.2 CC2530存储器及映射存储器及映射 物理存储器物理存储器 SFR控制控制8051CPU内核或外设的一些功能内核或外设的一些功能 XREG 是是SFR的扩展寄存器,比如射频寄存器,访问速度比的扩展寄存器,比如射频寄存器,访问速度比SFR要慢要慢 - 12 - 4.2.2 CC2530存储器及映射存储器及映射 存储空间存储空间 CODE 程序存储器,只读存储空间,用于存放程序代码和一些常

9、量,有程序存储器,只读存储空间,用于存放程序代码和一些常量,有16根地址总线,根地址总线, 寻址范围为寻址范围为0 x00000 xFFFF共共64KB DATA 数据存储器,可读数据存储器,可读/写的数据存储空间,用于存放程序运行过程中的数据。有写的数据存储空间,用于存放程序运行过程中的数据。有8根根 地址总线,因此寻址空间为地址总线,因此寻址空间为0 x000 xFF,共,共256个字节个字节 XDATA 外部数据存储器,可读外部数据存储器,可读/写的数据存储空间,主要用于写的数据存储空间,主要用于DMA寻址。有寻址。有16根地址总根地址总 线,寻址空间是线,寻址空间是0 x00000 x

10、FFFF共共64KB SFR 特殊功能寄存器,可读特殊功能寄存器,可读/写的寄存器存储空间,共有写的寄存器存储空间,共有128字节。对于地址是被字节。对于地址是被8整整 除的除的SFR寄存器,每一位还可以单独寄存器,每一位还可以单独寻址寻址 - 13 - 4.2.2 CC2530存储器及映射存储器及映射 物理存储器与存储空间的关系物理存储器与存储空间的关系 存储空间只是存储空间只是4种不同的寻址方式概念,并不代表物理具体种不同的寻址方式概念,并不代表物理具体 上的存储设备,只是存储空间的概念;而上的存储设备,只是存储空间的概念;而FLASH、SRAM、 EEPROM等是具体的物理存储设备。他们

11、两者之间的关系等是具体的物理存储设备。他们两者之间的关系 是通过映射来联系起来的。例如是通过映射来联系起来的。例如FLASH或者或者EEPROM都可都可 以作为物理存储媒介映射到以作为物理存储媒介映射到CODE上。上。 - 14 - 4.2.2 CC2530存储器及映射存储器及映射 映射映射 映射就是将映射就是将CC2530的物理存储器映射到其存储空间上,有两个作用:的物理存储器映射到其存储空间上,有两个作用: 方便方便DMA访问访问 存储设备存储设备 可在可在CODE区执区执 行行FLASH或或 SRAM中的代码中的代码 - 15 - 4.2.2 CC2530存储器及映射存储器及映射 映射的

12、两种形式映射的两种形式 CODE存储器映射存储器映射 XDATA存储器映射存储器映射 - 16 - 4.2.2 CC2530存储器及映射存储器及映射 CODE存储器映射存储器映射 lCODE存储器映射具有两个功能:存储器映射具有两个功能: l一是将一是将FLASH映射至映射至CODE存储空间;存储空间; l二是执行来自二是执行来自SRAM的代码(将的代码(将SRAM映射至映射至CODE存储空间)存储空间) - 17 - 4.2.2 CC2530存储器及映射存储器及映射 FLASH映射映射 CODE的寻址空间为的寻址空间为64KB,而对于,而对于CC2530F256设备来说设备来说FLASH的的

13、 存储空间为存储空间为256KB 首先要解决存储空间不对称的问题首先要解决存储空间不对称的问题 CC2530将将FLASH存储器分为几个存储器分为几个bank, 每个每个bank的大小是的大小是32KB。 对于对于CC2530F256设备来说,它有设备来说,它有8个个 bank,分别为,分别为bank0bank7。 通过操作寄存器通过操作寄存器FMAP.MAP2:0来控制来控制 将哪个编号的将哪个编号的bank映射到映射到CODE区域区域 只针对只针对CC2530F32这这 款芯片,因为这款芯款芯片,因为这款芯 片的的片的的FLASH只有只有 32KB 虽然这里有虽然这里有bank0区区 域,

14、但是映射的时候域,但是映射的时候 bank0总映射的根部总映射的根部 的低的低32KB区域区域 - 18 - 4.2.2 CC2530存储器及映射存储器及映射 SRAM映射映射 为了便于在为了便于在SRAM中执行代码,可以将中执行代码,可以将SRAM映射到映射到CODE存储空间的存储空间的 0 x8000(0 x8000+SRAM_SIZE-1)的区域)的区域 虽然程序从虽然程序从SRAM中运行代中运行代 码,但是并不代表程序是从码,但是并不代表程序是从 SRAM中启动的。程序仍旧中启动的。程序仍旧 是从是从CODE的普通区域的普通区域 0 x0000开始执行,当程序执开始执行,当程序执 行到

15、行到0 x8000时,将执行时,将执行 SRAM中的代码中的代码 - 19 - 4.2.2 CC2530存储器及映射存储器及映射 SRAM映射映射 为了方便为了方便DMA控制器能访问所有的物理存储空间,控制器能访问所有的物理存储空间,CC2530把所有把所有 的物理存储器以及寄存器都映射到的物理存储器以及寄存器都映射到XDATA上,包括上,包括CODE和和SFR部分部分 存储空间存储空间 。 - 20 - 4.2.2 CC2530存储器及映射存储器及映射 XDATA包含了所有物理存储器的映射,包括包含了所有物理存储器的映射,包括8KB的的SRAM存储器、存储器、XREG、 SFR、信息页面和、

16、信息页面和FLASH存储器存储器 lSRAM映射的地址范围是映射的地址范围是0 x0000到到SRAM_SIZE-1。其中。其中SRAM较高的较高的256字节映射到字节映射到 DATA存储空间存储空间8位地址区域,即地址范围从位地址区域,即地址范围从SRAM_SIZE-256到到SRAM_SIZE-1 lXREG区域映射到区域映射到1KB地址区域地址区域0 x6000-0 x63FF lSFR寄存器映射到地址区域寄存器映射到地址区域0 x7080-0 x70FF。128个条目的硬件寄存器区域是通过这个条目的硬件寄存器区域是通过这 一存储空间访问的。闪存信息页面一存储空间访问的。闪存信息页面2K

17、B映射到地址区域映射到地址区域0 x7800-0 x7FFF。这是一个只。这是一个只 读区域,包含有关设备的各种信息读区域,包含有关设备的各种信息 l信息页面映射到地址区域信息页面映射到地址区域0 x78000 x7FFF lXBANK为为CODE存储空间的存储空间的bank07区域的映射,其地址仍然是区域的映射,其地址仍然是0 x80000 xFFFF。 可以配置存储器控制寄存器可以配置存储器控制寄存器MEMCTR.XBANK2:0(详见存储器仲裁)决定选择映射(详见存储器仲裁)决定选择映射 bank0bank7之间的哪个区域,比如之间的哪个区域,比如MEMCTR.XBANK=001,则映射

18、,则映射bank1区域区域 - 21 - 4.2.2 CC2530存储器及映射存储器及映射 存储器仲裁存储器仲裁 l主要功能是解决主要功能是解决CPU与与DMA访问所有物理存储器(除了访问所有物理存储器(除了CPU内部寄存器)之内部寄存器)之 间的冲突问题。当间的冲突问题。当CPU和和DMA之间发生冲突时,之间发生冲突时,“存储器仲裁存储器仲裁”停止停止CPU或或 DMA的总线的总线 l存储器仲裁主要有两个寄存器:存储器仲裁控制寄存器存储器仲裁主要有两个寄存器:存储器仲裁控制寄存器MEMCTR和闪存区映和闪存区映 射寄存器射寄存器FMAP,这两个寄存器用于控制存储器子系统的各个方面,这两个寄存

19、器用于控制存储器子系统的各个方面 - 22 - 4.2.2 CC2530存储器及映射存储器及映射 存储器仲裁控制寄存器存储器仲裁控制寄存器MEMCTR lMEMCTR.XMAP必须设置以使得程序从必须设置以使得程序从SRAM执行;执行;MEMCTR.XBANK决决 定定XDATA的高的高32KB映射映射CODE存储空间的哪个存储空间的哪个bank区域区域 位位名称名称复位复位R/W描述描述 7:4-0000R0保留保留 3XMAP0R/WXDATA映射到代码,当设置了这一位,映射到代码,当设置了这一位,SRAM XDATA区域区域 从从0 x0000到(到(SRAM_SIZE)映射到)映射到C

20、ODE区域的区域的 (0 x8000+SRAM_SIZE-1)这使得程序代码从)这使得程序代码从RAM执行。执行。 0:SRAM映射到映射到CODE功能禁用功能禁用 1:SRAM映射到映射到CODE功能使能功能使能 2:0XBANK000R/WXDATA区选择,控制物理闪存存储器的哪个代码区域映射区选择,控制物理闪存存储器的哪个代码区域映射 到到XDATA区域(区域(0 x8000-0 xFFFF)。当设置为)。当设置为0,映射到根,映射到根 底部。底部。 有效设置取决于设备的闪存大小。写一个无效设置被忽略,有效设置取决于设备的闪存大小。写一个无效设置被忽略, 即不会更新即不会更新XBANK2

21、:0 32KB版本只能是版本只能是0(即总是映射到根底部)(即总是映射到根底部) 64KB版本:版本:0-1 128KB版本:版本:0-3 256KB版本:版本:0-7 - 23 - 4.2.2 CC2530存储器及映射存储器及映射 闪存区映射寄存器闪存区映射寄存器FMAP l闪存区映射寄存器闪存区映射寄存器FMAP控制物理控制物理32KB代码区映射到代码区映射到CODE存储空间的程序存储空间的程序 地址区域地址区域0 x8000-0 xFFFF 位位名称名称复位复位R/W描述描述 7:3-00000R0保留保留 2:0MAP2: 0 001R/W闪存区域映射,控制物理闪存存储器的哪个代码映射

22、到闪存区域映射,控制物理闪存存储器的哪个代码映射到 XDATA区域(区域(0 x8000-0 xFFFF)。)。当设置为当设置为0,映射到根部,映射到根部 区区。 有效设置取决于设备的闪存大小。写一个无效设置被忽略有效设置取决于设备的闪存大小。写一个无效设置被忽略 ,即不会更新,即不会更新MAP2:0 32KB版本只能是版本只能是0(即总是映射到根底部)(即总是映射到根底部) 64KB版本:版本:0-1 128KB版本:版本:0-3 256KB版本:版本:0-7 即最底部的即最底部的32KB区域区域 (0 x00000 x7FFF) - 24 - 4.3 CC2530编程基础编程基础 CC25

23、30软件开发平台使用软件开发平台使用IAR IAR对对CC2530编程操作提供了良好的编程操作提供了良好的C语言支持语言支持 CC2530编程包括头文件、运行库以及中断编程等编程包括头文件、运行库以及中断编程等 - 25 - 4.3.1 寄存器和汇编指令寄存器和汇编指令 CC2530的的CPU寄存器与标准的寄存器与标准的8051的的CPU寄存器相同,都包括寄存器相同,都包括8组寄存器组寄存器 R0R7、程序状态字、程序状态字PSW、累加器、累加器ACC、B寄存器和堆栈指针寄存器和堆栈指针SP等等 CC2530的的CPU指令与标准的指令与标准的8051的指令集相同的指令集相同 - 26 - 4.

24、3.2 编程基础编程基础 CC2530编程的风格基本上与普通的基于编程的风格基本上与普通的基于8051的的C语言编程相同语言编程相同 l头文件头文件 l初始化函数初始化函数 l主函数主函数 l其他中断函数其他中断函数 - 27 - 4.3.2 编程基础编程基础 头文件头文件 l在在C语言中头文件以语言中头文件以“XXX.h”的格式存在,其中的格式存在,其中“XXX”为文件名,在头文为文件名,在头文 件中一般定义程序需要的变量或函数的声明等。一般头文件在源程序的一开件中一般定义程序需要的变量或函数的声明等。一般头文件在源程序的一开 始使用始使用“包含命令包含命令”将头文件包含在源程序中,以便源程

25、序调用头文件中的将头文件包含在源程序中,以便源程序调用头文件中的 变量等。头文件变量等。头文件“包含命令包含命令”使用使用“#include”命令命令 - 28 - 4.3.2 编程基础编程基础 头文件头文件 l在一个工程里面还会有其他的头文件,比如要控制在一个工程里面还会有其他的头文件,比如要控制CC2530开发板的开发板的LED, 一般由用户新建一个头文件,此头文件可以由用户命名,例如一般由用户新建一个头文件,此头文件可以由用户命名,例如“LED.h” 在用户编写的头文件中,在用户编写的头文件中, 也需要将也需要将“ioCC2530.h” 包含在内,那么在主函数包含在内,那么在主函数 文件

26、中只需要包含文件中只需要包含 “LED.h”文件即可文件即可 - 29 - 4.3.2 编程基础编程基础 初始化函数初始化函数 l在一个项目工程中为了增强程序的可移植性和可维护性,一般将一些初始化在一个项目工程中为了增强程序的可移植性和可维护性,一般将一些初始化 配置信息编写成一个函数,称作初始化函数。在一个工程中可以有多个初始配置信息编写成一个函数,称作初始化函数。在一个工程中可以有多个初始 化函数化函数 - 30 - 4.3.2 编程基础编程基础 主函数主函数 l与常规的与常规的C语言程序一样,语言程序一样,IAR下的下的CC2530程序依然将程序依然将main( )函数设定为程函数设定为

27、程 序的入口函数,也称主函数。当程序比较大时,在主函数内一般不直接编写序的入口函数,也称主函数。当程序比较大时,在主函数内一般不直接编写 与程序相关的业务算法,而是调用其他子函数(如用库函数、户编写的硬件与程序相关的业务算法,而是调用其他子函数(如用库函数、户编写的硬件 初始化函数和业务算法或其他功能函数等)来实现整个程序的逻辑,使主函初始化函数和业务算法或其他功能函数等)来实现整个程序的逻辑,使主函 数看起来简单明了并且易于程序的维护数看起来简单明了并且易于程序的维护 - 31 - 4.3.2 编程基础编程基础 其他子函数其他子函数 l在一个程序中,为了程序的可维护性,除了初始化函数之外,还

28、需要将某个在一个程序中,为了程序的可维护性,除了初始化函数之外,还需要将某个 业务算法或功能封装成一个函数,称为子函数业务算法或功能封装成一个函数,称为子函数 - 32 - 4.3.2 编程基础编程基础 中断函数中断函数 l当需要中断处理时,需要编写中断处理函数,中断处理函数是当有中断发生当需要中断处理时,需要编写中断处理函数,中断处理函数是当有中断发生 时,需要处理的事件时,需要处理的事件 - 33 - 4.3.2 中断的使用中断的使用 CC2530的中断系统是为了让的中断系统是为了让CPU对内部或外部的突发事件及时地作出响应,对内部或外部的突发事件及时地作出响应, 并执行相应的中断程序。并

29、执行相应的中断程序。 中断由中断源引起,中断源由相应的寄存器来控制。当需要使用中断时,需中断由中断源引起,中断源由相应的寄存器来控制。当需要使用中断时,需 配置相应的中断寄存器来开启中断,当中断发生时将跳入中断服务函数中执配置相应的中断寄存器来开启中断,当中断发生时将跳入中断服务函数中执 行此中断所需要处理的事件行此中断所需要处理的事件 。 - 34 - 4.3.3 中断的使用中断的使用 中断源与中断向量中断源与中断向量 lCC2530有有18个中断源,每个中断源都可以产生中断请求,中断请求可以通个中断源,每个中断源都可以产生中断请求,中断请求可以通 过设置中断使能过设置中断使能SFR寄存器的

30、中断使能位寄存器的中断使能位IEN0、IEN1或或IEN2使能或禁止中使能或禁止中 断。断。 - 35 - 4.3.3 中断的使用中断的使用 中断号码中断号码描述描述中断名称中断名称中断向量中断向量中断屏蔽中断屏蔽中断标志中断标志 0RF TX RFIO下溢或下溢或RX FIFO 溢出溢出 RFERR03HIEN0.RFERRIETCON.RFERRIF 1ADC转换结束转换结束ADC0BHIEN0.ADCIETCON.ADCIF 2USART0 RX完成完成URX013HIEN0.URX0IETCON.URX0IF 3USART1 RX完成完成URX11BHIEN0.URX1IETCON.U

31、RX1IF 4AES加密加密/解密完成解密完成ENC23HIEN0.ENCIES0CON.ENCIF 5睡眠计时器比较睡眠计时器比较ST2BHIEN0.STIEIRCON.STIF 6端口端口2输入输入/USBP2INT33HIEN2.P2IEIRCON2.P2IF 7USART0 TX完成完成UTX03BHIEN2.UTX0IEIRCON2.UTX0IF 8DMA传送完成传送完成DMA43HIEN1.DMAIEIRCON.DMAIF 9定时器定时器1(16位)捕获位)捕获/比较比较/溢溢 出出 T14BHIEN1.T1IEIRCON.T1IF 10定时器定时器2T253HIEN1.T2IEI

32、RCON.T2IF 11定时器定时器3(8位)捕获位)捕获/比较比较/溢溢 出出 T35BHIEN1.T3IEIRCON.T3IF 12定时器定时器4(8位)捕获位)捕获/比较比较/溢溢 出出 T463HIEN1.T4IEIRCON.T4IF 13端口端口0输入输入P0INT6BHIEN1.P0IEIRCON.P0IF 14USART 1 TX完成完成UTX173HIEN2.UTXIEIRCON2.UTX1IF 15端口端口1输入输入P1INT7BHIEN2.P1IEIRCON2.P1IF 16RF通用中断通用中断RF83HIEN2.RFIES1CON.RFIF 17看门狗定时器溢出看门狗定时

33、器溢出WDT8BHIEN2.WDTIEIRCON.WDTIF - 36 - 4.3.3 中断的使用中断的使用 中断源与中断向量中断源与中断向量 l当相应的中断源使能并发生时,中断标志位将自动置当相应的中断源使能并发生时,中断标志位将自动置1,然后程序跳往中断,然后程序跳往中断 服务程序的入口地址执行中断服务程序。待中断服务程序处理完毕后,由硬服务程序的入口地址执行中断服务程序。待中断服务程序处理完毕后,由硬 件清除中断标志位件清除中断标志位 l中断服务程序的入口地址即中断向量,中断服务程序的入口地址即中断向量,CC2530的的18个中断源对应了个中断源对应了18个中个中 断向量,中断向量定义在

34、头文件断向量,中断向量定义在头文件“ioCC2530.h”中中 - 37 - 4.3.3 中断的使用中断的使用 中断优先级中断优先级 l中断优先级将决定中断响应的先后顺序,在中断优先级将决定中断响应的先后顺序,在CC2530中分为六个中断优先组,中分为六个中断优先组, 即即IPG0IPG5,每一组中断优先组中有三个中断源,每一组中断优先组中有三个中断源 组组中断中断 IPG0RFERRRFDMA IPG1ADCT1P2INT IPG2URX0T2UTX0 IPG3URX1T3UTX1 IPG4ENCT4P1INT IPG5STP0INTWDT - 38 - 4.3.3 中断的使用中断的使用 中

35、断优先级中断优先级 l中断优先组的优先级设定由寄存器中断优先组的优先级设定由寄存器IP0和和IP1来设置。来设置。CC2530的优先级有的优先级有4级,级, 即即03级,其中级,其中0级的优先级最低,级的优先级最低,3级的优先级最高。级的优先级最高。 IP1_XIP0_X优先级优先级 000 (优先级别最低)(优先级别最低) 011 102 113(优先级别最高)(优先级别最高) l其中其中X为六个中断优先组为六个中断优先组IPG0IPG5中的任何一个中的任何一个 。 设置设置IPG0优先级最高优先级最高 IP1_IPG0 = 1; IP0_IPG0 = 1; - 39 - 4.3.3 中断的

36、使用中断的使用 中断优先级中断优先级 l如果同时收到相同优先级或同一优先级组中的中断请求时,将采用轮流检测如果同时收到相同优先级或同一优先级组中的中断请求时,将采用轮流检测 顺序来判断中断优先级别的响应顺序来判断中断优先级别的响应 - 40 - 4.3.3 中断的使用中断的使用 中断优先级中断优先级 中断向量编号中断向量编号中断名称中断名称优先级排序优先级排序 0RFERR轮流探测顺序为自上向下优先级依轮流探测顺序为自上向下优先级依 次降低次降低 16RF 8DMA 1ADC 9T1 2URX0 10T2 3URX1 11T3 4ENC 12T4 5ST 13P0INT 6P2INT 7UTX

37、0 14UTX1 15P1INT 17WDT 例如:在中断优先级组例如:在中断优先级组IPG0中的中中的中 断断RFERR、RF和和DMA的中断优先级的中断优先级 是相同的,如果同时使用这三个中断,是相同的,如果同时使用这三个中断, 就需要使用轮流探测顺序来判断哪一就需要使用轮流探测顺序来判断哪一 优先级最高。由轮流探测顺序表查得优先级最高。由轮流探测顺序表查得 RFERR中断优先级最高,中断优先级最高,RF中断次中断次 之,之,DMA中断与其他两个中断相比中断与其他两个中断相比 中断优先级最低中断优先级最低 - 41 - 4.3.3 中断的使用中断的使用 中断处理过程中断处理过程 l中断发生

38、时,中断发生时,CC2530硬件自动完成以下处理硬件自动完成以下处理 u中断申请:中断源向中断申请:中断源向CPU发出中断请求信号(中断申请一般需要在程序初始发出中断请求信号(中断申请一般需要在程序初始 化中配置相应的中断寄存器开启中断)化中配置相应的中断寄存器开启中断) u中断响应:中断响应:CPU检测中断申请,把主程序中断的地址保存到堆栈,转入中断检测中断申请,把主程序中断的地址保存到堆栈,转入中断 向量入口地址向量入口地址 u中断处理:按照中断向量中设定好的地址,转入相应的中断服务程序中断处理:按照中断向量中设定好的地址,转入相应的中断服务程序 u中断返回:中断服务程序执行完毕后,中断返

39、回:中断服务程序执行完毕后,CPU执行中断返回指令,把堆栈中保执行中断返回指令,把堆栈中保 存的数据从堆栈弹出,返回原来程序存的数据从堆栈弹出,返回原来程序 - 42 - 4.3.3 中断的使用中断的使用 中断编程中断编程 l中断编程的一般过程如下中断编程的一般过程如下 : l中断设置:根据外设的不同,具体的设置是不同的,一般至少包含启用中断中断设置:根据外设的不同,具体的设置是不同的,一般至少包含启用中断 l中断函数编写;这是中断编程的主要工作,需要注意的是,中断函数尽可能中断函数编写;这是中断编程的主要工作,需要注意的是,中断函数尽可能 的减少耗时或不进行耗时操作的减少耗时或不进行耗时操作

40、 以以CC2530的外部中断为例的外部中断为例 /P0中断标志清0 P0IFG |= 0 x00; /P0.4有上拉、下拉能力 P0INP /P0.4和P0.5中断使能 P0IEN |= 0 x30; /P0.4和P0.5,下降沿触发 PICTL|= 0X01; /开中断 EA = 1; /端口0中断使能 IEN1 |= 0X20; - 43 - 4.3.3 中断的使用中断的使用 中断编程中断编程 l中断编程的一般过程如下中断编程的一般过程如下 : lCC2530所使用的编译器为所使用的编译器为IAR,在,在IAR编译器中用关键字编译器中用关键字_interrupt来定义来定义 一个中断函数。

41、使用一个中断函数。使用#progma vector来提供中断函数的入口地址,并且中断来提供中断函数的入口地址,并且中断 函数没有返回值,没有函数参数函数没有返回值,没有函数参数 #pragma vector = P0INT_VECTOR _interrupt void P0_ISR ( void) /中断程序代码 - 44 - 4.3.3 中断的使用中断的使用 中断编程中断编程 l在中断函数编写中,当程序进入中断服务程序之后,需要执行以下几个步骤在中断函数编写中,当程序进入中断服务程序之后,需要执行以下几个步骤 : u将对应的中断关掉(不是必须的,需要根据具体情况来处理);将对应的中断关掉(不

42、是必须的,需要根据具体情况来处理); u如果需要判断具体的中断源,则根据中断标志位进行判断(例如所有如果需要判断具体的中断源,则根据中断标志位进行判断(例如所有I/O中断中断 共用共用1个中断向量,需要通过中断标志区分是哪个引脚引起的中断)个中断向量,需要通过中断标志区分是哪个引脚引起的中断) u清中断标志(不是必须的,清中断标志(不是必须的,CC2530中中断发生后由硬件自动清中断标志位)中中断发生后由硬件自动清中断标志位) u处理中断事件,此过程要尽可能的少耗时处理中断事件,此过程要尽可能的少耗时 u最后如果在第一步中关闭了相应的中断源,需要在退出中断服务程序之前打最后如果在第一步中关闭了

43、相应的中断源,需要在退出中断服务程序之前打 开对应的中断开对应的中断 /中断函数入口地址中断函数入口地址 #pragma vector = P0INT_VECTOR /定义一个中断函数定义一个中断函数 _interrupt void P0_ISR(void) /关端口关端口P0.4、P0.5中断中断 P0IEN /判断中断发生判断中断发生 if(P0IFG0) /清中断标志清中断标志 P0IFG = 0; /*中断事件的处理中断事件的处理*/ . . . . . . . . . /开中断开中断 P0IEN |= 0 x30; - 45 - 4.4 I/O CC2530包括包括3个个8位输入位输

44、入/输出(输出(I/O)端口,分别是)端口,分别是P0、P1和和P2。其中。其中P0和和 P1有有8个引脚,个引脚,P2有有5个引脚,共个引脚,共21个数字个数字I/O引脚引脚 ,具有以下功能:,具有以下功能: l通用通用I/O l外设外设I/O l外部中断源输入口外部中断源输入口 l弱上拉输入或推拉输出弱上拉输入或推拉输出 - 46 - 4.4.1 通用通用I/O 用作通用用作通用I/O时,引脚可以组成时,引脚可以组成3个个8位端口,端口位端口,端口0、端口、端口1和端口和端口2,三个端,三个端 口分别用口分别用P0、P1和和P2来表示来表示 所有的端口均可以通过所有的端口均可以通过SFR寄

45、存器寄存器P0、P1和和P2进行位寻址和字节寻址进行位寻址和字节寻址 每个端口引脚都可以单独设置为通用每个端口引脚都可以单独设置为通用I/O或外部设备或外部设备I/O 其中其中P1.0和和P1.1具备具备20mA的输出驱动能力,其他所有的端口只具备的输出驱动能力,其他所有的端口只具备4mA的的 输出驱动能力输出驱动能力 - 47 - 4.4.1 通用通用I/O 通用通用I/O配置寄存器(其中配置寄存器(其中x表示表示0,1,2) 功能寄存器功能寄存器PxSEL 方向寄存器方向寄存器PxDIR 工作模式寄存器工作模式寄存器PxINP - 48 - 4.4.1 通用通用I/O 配置寄存器配置寄存器

46、PxSEL(其中(其中x表示表示0,1,2) 寄存器寄存器PxSEL用来设置端口的每个引脚为通用用来设置端口的每个引脚为通用I/O或者是外部设备或者是外部设备I/O(复位(复位 之后,所有的数字输入、输出引脚都设置为通用输入引脚)之后,所有的数字输入、输出引脚都设置为通用输入引脚) 以以P0SEL为例讲解为例讲解 位位名称名称复位复位R/W描述描述 7:0SELP07:00 x00R/WP0.7P0.0功能选择功能选择 0:通用:通用I/O 1:外设:外设I/O /P0.4和和P0.5设置为普通的设置为普通的I/O口口 P0SEL /P0.4和和P0.5设置为外设的设置为外设的I/O口口 P0

47、SEL |= 0 x30; - 49 - 4.4.1 通用通用I/O 配置寄存器配置寄存器PxDIR(其中(其中x表示表示0,1,2) 如果需要改变端口引脚方向,需要使用寄存器如果需要改变端口引脚方向,需要使用寄存器PxDIR来设置每个端口引脚的来设置每个端口引脚的 输入和输出输入和输出 以以P0DIR为例讲解为例讲解 /P0.4和和P0.5设为输入设为输入 P0DIR /P0.4和和P0.5设置为输出低电平设置为输出低电平 P0_4 = 0; P0_5 = 0; /P1.0和和P1.1设置为输出设置为输出 P1DIR |= 0 x03; /P1.0和和P1.1设置为输出高电平设置为输出高电平

48、 P1_0 = 1; P1_1 = 1; 位位名称名称复位复位R/W描述描述 7:0DIRP07:00 x00R/WP0.7P0.0的的I/O方向选择方向选择 0:输入:输入 1:输出:输出 - 50 - 4.4.1 通用通用I/O 配置寄存器配置寄存器PxINP(其中(其中x表示表示0,1,2) 复位之后,所有的端口均设置为带上拉的输入。用作输入时,通用复位之后,所有的端口均设置为带上拉的输入。用作输入时,通用I/O端口引端口引 脚可以设置为上拉、下拉或三态操作模式。其中脚可以设置为上拉、下拉或三态操作模式。其中P1.0和和P1.1端口没有上拉和端口没有上拉和 下拉功能。上拉、下拉或三态操作

49、模式寄存器由下拉功能。上拉、下拉或三态操作模式寄存器由PxINP设置设置 以以P0INP为例讲解为例讲解 /P0.4和和P0.5设置为三态设置为三态 P0INP |= 0 x30; /P2.0和和P2.1设置上拉状态设置上拉状态 P2INP 位位名称名称复位复位R/W描述描述 7PDUP20R/W端口端口2上拉上拉/下拉选择,对所有的端口下拉选择,对所有的端口2引脚设置为上引脚设置为上 拉拉/下拉输入下拉输入 0:上拉:上拉 1:下拉:下拉 6PDUP10R/W端口端口1上拉上拉/下拉选择,对所有的端口下拉选择,对所有的端口1引脚设置为上引脚设置为上 拉拉/下拉输入下拉输入 0:上拉:上拉 1

50、:下拉:下拉 5PDUP00R/W端口端口0上拉上拉/下拉选择,对所有的端口下拉选择,对所有的端口0引脚设置为上引脚设置为上 拉拉/下拉输入下拉输入 0:上拉:上拉 1:下拉:下拉 4:0MDP24:000000R/WP2.4P2.0的的I/O输入模式功能选择输入模式功能选择 0:上拉:上拉/下拉下拉 1:三态:三态 - 52 - 4.4.1 通用通用I/O 任务描述任务描述4.D.1,通过扫描方式实现按键触发,通过扫描方式实现按键触发LED亮灭。利用按键亮灭。利用按键SW5和按和按 键键SW6控制控制LED1和和LED2。当按下。当按下SW5时,时,LED1状态改变;当按下状态改变;当按下S

51、W6时,时, LED2状态改变状态改变 按键按键SW5由由P0.4控制,按键控制,按键SW6由由P0.5控制;控制;LED1和和LED2分别由分别由P1.0和和P1.1控制控制 按键的初始化:将按键的初始化:将P0.4和和P0.5设为普通设为普通I/O口,并且设置为输入状态口,并且设置为输入状态 LED初始化:将初始化:将P1.0和和P1.1设置为输出且将设置为输出且将LED1和和LED2关闭关闭 采用按键检测的方法来控制采用按键检测的方法来控制LED状态的改变:当检测到状态的改变:当检测到SW5按下时,按下时,LED1状态改变;状态改变; 当检测到当检测到SW6按下时,按下时,LED2状态改

52、变状态改变 - 53 - 4.4.1 通用通用I/O #include #define uint unsigned int #define uchar unsigned char /*LED状态状态*/ /0代表打开代表打开 #define ON 0 /1代表关闭代表关闭 #define OFF 1 /定义控制灯的端口定义控制灯的端口 /定义定义LED1为为P11口控制口控制 #define LED1 P1_0 /定义定义LED2为为P10口控制口控制 #define LED2 P1_1 #define SW6 P0_4 #define SW5 P0_5 /函数声明函数声明 /延时函数延时函数

53、 void Delay(uint); /初始化初始化P0口口 void Initial(void); /初始化按键初始化按键 void InitKey(void); /扫描按键,读键值扫描按键,读键值 uchar KeyScan(void); 宏定义以及宏定义以及 函数的初始化函数的初始化 - 54 - /*按键初始化函数按键初始化函数*/ void InitKey(void) /P0.4,P0.5设为通用设为通用I/O输出输出 P0SEL /按键在按键在P04,P05设为输入设为输入 P0DIR /P0.4,P0.5为三态为三态 P0INP |= 0 x30; /*LED初始化初始化*/ v

54、oid Initial(void) /P10、P11定义为输出定义为输出 P1DIR |= 0 x03; /关关LED1 LED1= OFF; /关关LED2 LED2= OFF; 4.4.1 通用通用I/O 按键初始化函数和按键初始化函数和 LED初始化函数初始化函数 - 55 - 4.4.1 通用通用I/O /* *延时1.5us */ void Delay(uint n) uint tt; for(tt = 0;ttn;tt+); for(tt = 0;ttn;tt+); for(tt = 0;ttn;tt+); for(tt = 0;ttn;tt+); for(tt = 0;tt0)

55、. 位位名称名称复位复位R/W描述描述 7:0P0IF7:00 x00R/W端口端口0 P0.7P0.0中断状态标志中断状态标志 0:未发生中断:未发生中断 1:发生中断:发生中断 - 65 - 4.4.2 通用通用I/O中断中断 中断控制寄存器中断控制寄存器PICTL (其中(其中x为为0,1,2) I/O口发生中断除了配置中断使能之外,还需要配置中断触发方式。中断触发口发生中断除了配置中断使能之外,还需要配置中断触发方式。中断触发 方式可由端口中断控制寄存器方式可由端口中断控制寄存器PICTL设置。设置。I/O中断触发方式分为输入的上升中断触发方式分为输入的上升 沿触发和输入的下降沿触发沿

56、触发和输入的下降沿触发 /P0.4和和P0.5为下降沿触发中断为下降沿触发中断 PICTL |= 0 x01; 位位名称名称复位复位R/W描述描述 7PADSC00R0控制控制I/O引脚在输出模式下的驱动能力,选择输出驱动能力来引脚在输出模式下的驱动能力,选择输出驱动能力来 补偿引脚补偿引脚DVDD的低的低I/O电压(为了确保在较低的电压下的驱动电压(为了确保在较低的电压下的驱动 能力和较高电压下的驱动能力相同)。能力和较高电压下的驱动能力相同)。 0:最小驱动能力增强,:最小驱动能力增强,DVDD1/2等于或大于等于或大于2.6V 1:最大驱动能力增强,:最大驱动能力增强,DVDD1/2小于

57、小于2.6V 6:4-000R0保留保留 3P2ICON0R/W端口端口2的的P2.4P2.0输入模式下的中断配置,该位为所有端口输入模式下的中断配置,该位为所有端口2的的 输入输入P2.4P2.0选择中断请求条件选择中断请求条件 0:输入的上升沿引起中断:输入的上升沿引起中断 1:输入的下降沿引起中断:输入的下降沿引起中断 2P1ICONH0R/W端口端口1的的P1.7P1.4输入模式下的中断配置,该位为所有端口输入模式下的中断配置,该位为所有端口1的的 输入输入P1.7P1.4选择中断请求条件选择中断请求条件 0:输入的上升沿引起中断:输入的上升沿引起中断 1:输入的下降沿引起中断:输入的

58、下降沿引起中断 1P1ICONL0R/W端口端口1的的P1.4P1.0输入模式下的中断配置,该位为所有端口输入模式下的中断配置,该位为所有端口1的的 输入输入P1.4P1.0选择中断请求条件选择中断请求条件 0:输入的上升沿引起中断:输入的上升沿引起中断 1:输入的下降沿引起中断:输入的下降沿引起中断 0P0ICON0R/W端口端口0的的P0.7P0.0输入模式下的中断配置,该位为所有端口输入模式下的中断配置,该位为所有端口0的的 输入输入P0.7P0.0选择中断请求条件选择中断请求条件 0:输入的上升沿引起中断:输入的上升沿引起中断 1:输入的下降沿引起中断:输入的下降沿引起中断 - 66

59、- 4.4.2 通用通用I/O中断中断 中断配置中断配置 为了使能任一中断,应该采取以下步骤:为了使能任一中断,应该采取以下步骤: l设置需要发生中断的设置需要发生中断的I/O口为输入方式。口为输入方式。 l清除中断标志,即将需要设置中断的引脚所对应的寄存器清除中断标志,即将需要设置中断的引脚所对应的寄存器PxIFG状态标志位置状态标志位置0。 l设置具体的设置具体的I/O引脚中断使能,即设置中断的引脚所对应的寄存器引脚中断使能,即设置中断的引脚所对应的寄存器PxIEN的中断使能位的中断使能位 为为1。 l设置设置I/O口的中断触发方式。口的中断触发方式。 l设置寄存器设置寄存器IEN1和和I

60、EN2中对应引脚的端口的中断使能位为中对应引脚的端口的中断使能位为1。 l设置设置IEN0中的中的EA位为位为1使能全局中断。使能全局中断。 l编写中断服务程序。编写中断服务程序。 - 67 - 4.4.2 通用通用I/O中断中断 lLED初始化:关闭四个初始化:关闭四个LED。 l外部中断初始化:清空外部中断初始化:清空P0中断标志位,开启中断标志位,开启P0口中断以及总中断。口中断以及总中断。 l中断处理函数的编写。中断处理函数的编写。 下述内容用于实现任务描述下述内容用于实现任务描述4.D.2,通过外部中断改变,通过外部中断改变LED1亮灭。利用按键亮灭。利用按键 SW5和和SW6触发触

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论