1、-1-第第4 4章章CC2530基础开发基础开发-2-本章目标本章目标掌握掌握I/O的使用的使用理解存储器以及映射的关系理解存储器以及映射的关系掌握掌握ADC的使用方法的使用方法掌握串口和掌握串口和DMA的使用方法的使用方法掌握定时器的使用掌握定时器的使用-3-本章目标本章目标掌握掌握I/O的使用的使用理解存储器以及映射的关系理解存储器以及映射的关系掌握掌握ADC的使用方法的使用方法掌握串口和掌握串口和DMA的使用方法的使用方法掌握定时器的使用掌握定时器的使用-4-l高性能、低功耗的高性能、低功耗的8051微控制器内核。微控制器内核。l适应适应2.4GHz IEEE802.15.4的的RF收发
2、器。收发器。l极高的接收灵敏度和抗干扰性。极高的接收灵敏度和抗干扰性。l32KB/64KB/128KB/256KB闪存。闪存。l8KB SRAM,具备各种供电方式下的数据保持能力。,具备各种供电方式下的数据保持能力。l强大的强大的DMA功能。功能。l只需极少的外接元件,即可形成一个简单应用系统。只需极少的外接元件,即可形成一个简单应用系统。l只需一个晶振,即可满足网状型网络系统的需要。只需一个晶振,即可满足网状型网络系统的需要。4.1 概述概述CC2530芯片特征芯片特征-5-l低功耗,主动模式低功耗,主动模式RX(CPU空闲):空闲):24mA;主动模式;主动模式TX在在1dB(CPU空空闲
3、):闲):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具有看门狗和具有看门狗和2个支持多种串行通信协议的个支持多种串行通信协议的USART。l1个通用
4、的个通用的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内核使用标准的内核使用标准的8051指令集,并且每个指令周期是一个时钟周期,指令集,并且每个指令周期是一个时钟周期,而标准的而标准的8051每个指
5、令周期是每个指令周期是12个时钟周期,因此增强型个时钟周期,因此增强型8051消除了总线消除了总线状态的浪费,指令执行比标准的状态的浪费,指令执行比标准的8051更快更快 4.2.1 CC2530CPU-8-内核代码:内核代码:CC2530的的“增强型增强型8051”内核的内核的“目标代码目标代码”兼容兼容“标准标准8051”内核的内核的“目标代码目标代码”,即,即CC2530的的8051内核的内核的“目标代码目标代码”可以可以使用使用“标准标准8051”的编译器或汇编器进行编译。的编译器或汇编器进行编译。微控制器:由于微控制器:由于CC2530的的“增强型增强型8051”内核使用了不同于内核
6、使用了不同于“标准标准8051”的指令时钟,因此的指令时钟,因此“增强型增强型8051”在编译时与在编译时与“标准标准8051”代码编译时略代码编译时略有不同,例如有不同,例如“标准标准8051”的微控制器包含的的微控制器包含的“外设单元寄存器外设单元寄存器”的指令的指令代码在代码在CC2530的的“增强型增强型8051”不能正确运行。不能正确运行。4.2.1 CC2530CPUCC2530的的“增强型增强型8051内核内核”与与“标准的标准的8051微控制器微控制器”相比,除了速度相比,除了速度改进之外,使用时要注意以下两点:改进之外,使用时要注意以下两点:-9-4.2.2 CC2530存储
7、器及映射存储器及映射 CC2530物理存储器物理存储器CC2530存储空间存储空间映射映射存储器仲裁存储器仲裁-10-4.2.2 CC2530存储器及映射存储器及映射物理存储器物理存储器SRAM上电时,上电时,SRAM的内容未定义,在供电的情况下,的内容未定义,在供电的情况下,SRAM的内容被保留的内容被保留FLASH片上闪存存储器,主要为了保存程序和常量数据。片上闪存存储器,主要为了保存程序和常量数据。FLASH由一组由一组2KB的页面组成的页面组成 信息信息页面页面信息页面是一个信息页面是一个2KB的只读区域,它的主要作用是存储全球唯一的的只读区域,它的主要作用是存储全球唯一的IEEE地址
8、地址-11-4.2.2 CC2530存储器及映射存储器及映射物理存储器物理存储器SFR控制控制8051CPU内核或外设的一些功能内核或外设的一些功能 XREG 是是SFR的扩展寄存器,比如射频寄存器,访问速度比的扩展寄存器,比如射频寄存器,访问速度比SFR要慢要慢-12-4.2.2 CC2530存储器及映射存储器及映射存储空间存储空间CODE程序存储器,只读存储空间,用于存放程序代码和一些常量,有程序存储器,只读存储空间,用于存放程序代码和一些常量,有16根地址总线,根地址总线,寻址范围为寻址范围为0 x00000 xFFFF共共64KB DATA数据存储器,可读数据存储器,可读/写的数据存储
9、空间,用于存放程序运行过程中的数据。有写的数据存储空间,用于存放程序运行过程中的数据。有8根根地址总线,因此寻址空间为地址总线,因此寻址空间为0 x000 xFF,共,共256个字节个字节 XDATA外部数据存储器,可读外部数据存储器,可读/写的数据存储空间,主要用于写的数据存储空间,主要用于DMA寻址。有寻址。有16根地址总根地址总线,寻址空间是线,寻址空间是0 x00000 xFFFF共共64KB SFR特殊功能寄存器,可读特殊功能寄存器,可读/写的寄存器存储空间,共有写的寄存器存储空间,共有128字节。对于地址是被字节。对于地址是被8整整除的除的SFR寄存器,每一位还可以单独寄存器,每一
10、位还可以单独寻址寻址-13-4.2.2 CC2530存储器及映射存储器及映射物理存储器与存储空间的关系物理存储器与存储空间的关系存储空间只是存储空间只是4种不同的寻址方式概念,并不代表物理具体种不同的寻址方式概念,并不代表物理具体上的存储设备,只是存储空间的概念;而上的存储设备,只是存储空间的概念;而FLASH、SRAM、EEPROM等是具体的物理存储设备。他们两者之间的关系等是具体的物理存储设备。他们两者之间的关系是通过映射来联系起来的。例如是通过映射来联系起来的。例如FLASH或者或者EEPROM都可都可以作为物理存储媒介映射到以作为物理存储媒介映射到CODE上。上。-14-4.2.2 C
11、C2530存储器及映射存储器及映射映射映射映射就是将映射就是将CC2530的物理存储器映射到其存储空间上,有两个作用:的物理存储器映射到其存储空间上,有两个作用:方便方便DMA访问访问存储设备存储设备 可在可在CODE区执区执行行FLASH或或SRAM中的代码中的代码-15-4.2.2 CC2530存储器及映射存储器及映射映射的两种形式映射的两种形式CODE存储器映射存储器映射 XDATA存储器映射存储器映射-16-4.2.2 CC2530存储器及映射存储器及映射CODE存储器映射存储器映射lCODE存储器映射具有两个功能:存储器映射具有两个功能:l一是将一是将FLASH映射至映射至CODE存
12、储空间;存储空间;l二是执行来自二是执行来自SRAM的代码(将的代码(将SRAM映射至映射至CODE存储空间)存储空间)-17-4.2.2 CC2530存储器及映射存储器及映射FLASH映射映射CODE的寻址空间为的寻址空间为64KB,而对于,而对于CC2530F256设备来说设备来说FLASH的的存储空间为存储空间为256KB首先要解决存储空间不对称的问题首先要解决存储空间不对称的问题 CC2530将将FLASH存储器分为几个存储器分为几个bank,每个每个bank的大小是的大小是32KB。对于对于CC2530F256设备来说,它有设备来说,它有8个个bank,分别为,分别为bank0ban
13、k7。通过操作寄存器通过操作寄存器FMAP.MAP2:0来控制来控制将哪个编号的将哪个编号的bank映射到映射到CODE区域区域 只针对只针对CC2530F32这这款芯片,因为这款芯款芯片,因为这款芯片的的片的的FLASH只有只有32KB虽然这里有虽然这里有bank0区区域,但是映射的时候域,但是映射的时候bank0总映射的根部总映射的根部的低的低32KB区域区域-18-4.2.2 CC2530存储器及映射存储器及映射SRAM映射映射为了便于在为了便于在SRAM中执行代码,可以将中执行代码,可以将SRAM映射到映射到CODE存储空间的存储空间的0 x8000(0 x8000+SRAM_SIZE
14、-1)的区域)的区域 虽然程序从虽然程序从SRAM中运行代中运行代码,但是并不代表程序是从码,但是并不代表程序是从SRAM中启动的。程序仍旧中启动的。程序仍旧是从是从CODE的普通区域的普通区域0 x0000开始执行,当程序执开始执行,当程序执行到行到0 x8000时,将执行时,将执行SRAM中的代码中的代码-19-4.2.2 CC2530存储器及映射存储器及映射SRAM映射映射为了方便为了方便DMA控制器能访问所有的物理存储空间,控制器能访问所有的物理存储空间,CC2530把所有把所有的物理存储器以及寄存器都映射到的物理存储器以及寄存器都映射到XDATA上,包括上,包括CODE和和SFR部分
15、部分存储空间存储空间。-20-4.2.2 CC2530存储器及映射存储器及映射XDATA包含了所有物理存储器的映射,包括包含了所有物理存储器的映射,包括8KB的的SRAM存储器、存储器、XREG、SFR、信息页面和、信息页面和FLASH存储器存储器 lSRAM映射的地址范围是映射的地址范围是0 x0000到到SRAM_SIZE-1。其中。其中SRAM较高的较高的256字节映射到字节映射到DATA存储空间存储空间8位地址区域,即地址范围从位地址区域,即地址范围从SRAM_SIZE-256到到SRAM_SIZE-1 lXREG区域映射到区域映射到1KB地址区域地址区域0 x6000-0 x63FF
16、 lSFR寄存器映射到地址区域寄存器映射到地址区域0 x7080-0 x70FF。128个条目的硬件寄存器区域是通过这一个条目的硬件寄存器区域是通过这一存储空间访问的。闪存信息页面存储空间访问的。闪存信息页面2KB映射到地址区域映射到地址区域0 x7800-0 x7FFF。这是一个只读。这是一个只读区域,包含有关设备的各种信息区域,包含有关设备的各种信息 l信息页面映射到地址区域信息页面映射到地址区域0 x78000 x7FFF lXBANK为为CODE存储空间的存储空间的bank07区域的映射,其地址仍然是区域的映射,其地址仍然是0 x80000 xFFFF。可。可以配置存储器控制寄存器以配
17、置存储器控制寄存器MEMCTR.XBANK2:0(详见存储器仲裁)决定选择映射(详见存储器仲裁)决定选择映射bank0bank7之间的哪个区域,比如之间的哪个区域,比如MEMCTR.XBANK=001,则映射,则映射bank1区域区域-21-4.2.2 CC2530存储器及映射存储器及映射存储器仲裁存储器仲裁 l主要功能是解决主要功能是解决CPU与与DMA访问所有物理存储器(除了访问所有物理存储器(除了CPU内部寄存器)之内部寄存器)之间的冲突问题。当间的冲突问题。当CPU和和DMA之间发生冲突时,之间发生冲突时,“存储器仲裁存储器仲裁”停止停止CPU或或DMA的总线的总线 l存储器仲裁主要有
18、两个寄存器:存储器仲裁控制寄存器存储器仲裁主要有两个寄存器:存储器仲裁控制寄存器MEMCTR和闪存区映和闪存区映射寄存器射寄存器FMAP,这两个寄存器用于控制存储器子系统的各个方面,这两个寄存器用于控制存储器子系统的各个方面-22-4.2.2 CC2530存储器及映射存储器及映射存储器仲裁控制寄存器存储器仲裁控制寄存器MEMCTR lMEMCTR.XMAP必须设置以使得程序从必须设置以使得程序从SRAM执行;执行;MEMCTR.XBANK决决定定XDATA的高的高32KB映射映射CODE存储空间的哪个存储空间的哪个bank区域区域 位位名称名称复位复位R/W描述描述7:4-0000R0保留保留
19、3XMAP0R/WXDATA映射到代码,当设置了这一位,映射到代码,当设置了这一位,SRAM XDATA区域区域从从0 x0000到(到(SRAM_SIZE)映射到)映射到CODE区域的区域的(0 x8000+SRAM_SIZE-1)这使得程序代码从)这使得程序代码从RAM执行。执行。0:SRAM映射到映射到CODE功能禁用功能禁用1:SRAM映射到映射到CODE功能使能功能使能2:0XBANK000R/WXDATA区选择,控制物理闪存存储器的哪个代码区域映射区选择,控制物理闪存存储器的哪个代码区域映射到到XDATA区域(区域(0 x8000-0 xFFFF)。当设置为)。当设置为0,映射到根
20、,映射到根底部。底部。有效设置取决于设备的闪存大小。写一个无效设置被忽略,有效设置取决于设备的闪存大小。写一个无效设置被忽略,即不会更新即不会更新XBANK2:032KB版本只能是版本只能是0(即总是映射到根底部)(即总是映射到根底部)64KB版本:版本:0-1128KB版本:版本:0-3256KB版本:版本:0-7-23-4.2.2 CC2530存储器及映射存储器及映射闪存区映射寄存器闪存区映射寄存器FMAP l闪存区映射寄存器闪存区映射寄存器FMAP控制物理控制物理32KB代码区映射到代码区映射到CODE存储空间的程序存储空间的程序地址区域地址区域0 x8000-0 xFFFF 位位名称名
21、称复位复位R/W描述描述7:3-00000R0保留保留2:0MAP2:0001R/W闪存区域映射,控制物理闪存存储器的哪个代码映射到闪存区域映射,控制物理闪存存储器的哪个代码映射到XDATA区域(区域(0 x8000-0 xFFFF)。)。当设置为当设置为0,映射到根部,映射到根部区区。有效设置取决于设备的闪存大小。写一个无效设置被忽略,有效设置取决于设备的闪存大小。写一个无效设置被忽略,即不会更新即不会更新MAP2:032KB版本只能是版本只能是0(即总是映射到根底部)(即总是映射到根底部)64KB版本:版本:0-1128KB版本:版本:0-3256KB版本:版本:0-7即最底部的即最底部的
22、32KB区域区域(0 x00000 x7FFF)-24-4.3 CC2530编程基础编程基础CC2530软件开发平台使用软件开发平台使用IARIAR对对CC2530编程操作提供了良好的编程操作提供了良好的C语言支持语言支持 CC2530编程包括头文件、运行库以及中断编程等编程包括头文件、运行库以及中断编程等-25-4.3.1 寄存器和汇编指令寄存器和汇编指令CC2530的的CPU寄存器与标准的寄存器与标准的8051的的CPU寄存器相同,都包括寄存器相同,都包括8组寄存器组寄存器R0R7、程序状态字、程序状态字PSW、累加器、累加器ACC、B寄存器和堆栈指针寄存器和堆栈指针SP等等 CC2530
23、的的CPU指令与标准的指令与标准的8051的指令集相同的指令集相同-26-4.3.2 编程基础编程基础CC2530编程的风格基本上与普通的基于编程的风格基本上与普通的基于8051的的C语言编程相同语言编程相同 l头文件头文件l初始化函数初始化函数l主函数主函数l其他中断函数其他中断函数-27-4.3.2 编程基础编程基础头文件头文件 l在在C语言中头文件以语言中头文件以“XXX.h”的格式存在,其中的格式存在,其中“XXX”为文件名,在头文为文件名,在头文件中一般定义程序需要的变量或函数的声明等。一般头文件在源程序的一开件中一般定义程序需要的变量或函数的声明等。一般头文件在源程序的一开始使用始
24、使用“包含命令包含命令”将头文件包含在源程序中,以便源程序调用头文件中的将头文件包含在源程序中,以便源程序调用头文件中的变量等。头文件变量等。头文件“包含命令包含命令”使用使用“#include”命令命令-28-4.3.2 编程基础编程基础头文件头文件 l在一个工程里面还会有其他的头文件,比如要控制在一个工程里面还会有其他的头文件,比如要控制CC2530开发板的开发板的LED,一,一般由用户新建一个头文件,此头文件可以由用户命名,例如般由用户新建一个头文件,此头文件可以由用户命名,例如“LED.h”在用户编写的头文件中,在用户编写的头文件中,也需要将也需要将“ioCC2530.h”包含在内,那
25、么在主函数包含在内,那么在主函数文件中只需要包含文件中只需要包含“LED.h”文件即可文件即可-29-4.3.2 编程基础编程基础初始化函数初始化函数 l在一个项目工程中为了增强程序的可移植性和可维护性,一般将一些初始化在一个项目工程中为了增强程序的可移植性和可维护性,一般将一些初始化配置信息编写成一个函数,称作初始化函数。在一个工程中可以有多个初始配置信息编写成一个函数,称作初始化函数。在一个工程中可以有多个初始化函数化函数-30-4.3.2 编程基础编程基础主函数主函数 l与常规的与常规的C语言程序一样,语言程序一样,IAR下的下的CC2530程序依然将程序依然将main()函数设定为程函
26、数设定为程序的入口函数,也称主函数。当程序比较大时,在主函数内一般不直接编写序的入口函数,也称主函数。当程序比较大时,在主函数内一般不直接编写与程序相关的业务算法,而是调用其他子函数(如用库函数、户编写的硬件与程序相关的业务算法,而是调用其他子函数(如用库函数、户编写的硬件初始化函数和业务算法或其他功能函数等)来实现整个程序的逻辑,使主函初始化函数和业务算法或其他功能函数等)来实现整个程序的逻辑,使主函数看起来简单明了并且易于程序的维护数看起来简单明了并且易于程序的维护-31-4.3.2 编程基础编程基础其他子函数其他子函数 l在一个程序中,为了程序的可维护性,除了初始化函数之外,还需要将某个
27、在一个程序中,为了程序的可维护性,除了初始化函数之外,还需要将某个业务算法或功能封装成一个函数,称为子函数业务算法或功能封装成一个函数,称为子函数-32-4.3.2 编程基础编程基础中断函数中断函数 l当需要中断处理时,需要编写中断处理函数,中断处理函数是当有中断发生当需要中断处理时,需要编写中断处理函数,中断处理函数是当有中断发生时,需要处理的事件时,需要处理的事件-33-4.3.2 中断的使用中断的使用CC2530的中断系统是为了让的中断系统是为了让CPU对内部或外部的突发事件及时地作出响应,对内部或外部的突发事件及时地作出响应,并执行相应的中断程序。并执行相应的中断程序。中断由中断源引起
28、,中断源由相应的寄存器来控制。当需要使用中断时,需中断由中断源引起,中断源由相应的寄存器来控制。当需要使用中断时,需配置相应的中断寄存器来开启中断,当中断发生时将跳入中断服务函数中执配置相应的中断寄存器来开启中断,当中断发生时将跳入中断服务函数中执行此中断所需要处理的事件行此中断所需要处理的事件。-34-4.3.3 中断的使用中断的使用中断源与中断向量中断源与中断向量 lCC2530有有18个中断源,每个中断源都可以产生中断请求,中断请求可以通个中断源,每个中断源都可以产生中断请求,中断请求可以通过设置中断使能过设置中断使能SFR寄存器的中断使能位寄存器的中断使能位IEN0、IEN1或或IEN
29、2使能或禁止中断。使能或禁止中断。-35-4.3.3 中断的使用中断的使用中断号码中断号码描述描述中断名称中断名称中断向量中断向量中断屏蔽中断屏蔽中断标志中断标志0RF TX RFIO下溢或下溢或RX FIFO溢出溢出RFERR03HIEN0.RFERRIETCON.RFERRIF1ADC转换结束转换结束ADC0BHIEN0.ADCIETCON.ADCIF2USART0 RX完成完成URX013HIEN0.URX0IETCON.URX0IF3USART1 RX完成完成URX11BHIEN0.URX1IETCON.URX1IF4AES加密加密/解密完成解密完成ENC23HIEN0.ENCIES0
30、CON.ENCIF5睡眠计时器比较睡眠计时器比较ST2BHIEN0.STIEIRCON.STIF6端口端口2输入输入/USBP2INT33HIEN2.P2IEIRCON2.P2IF7USART0 TX完成完成UTX03BHIEN2.UTX0IEIRCON2.UTX0IF8DMA传送完成传送完成DMA43HIEN1.DMAIEIRCON.DMAIF9定时器定时器1(16位)捕获位)捕获/比较比较/溢溢出出T14BHIEN1.T1IEIRCON.T1IF10定时器定时器2T253HIEN1.T2IEIRCON.T2IF11定时器定时器3(8位)捕获位)捕获/比较比较/溢溢出出T35BHIEN1.T
31、3IEIRCON.T3IF12定时器定时器4(8位)捕获位)捕获/比较比较/溢溢出出T463HIEN1.T4IEIRCON.T4IF13端口端口0输入输入P0INT6BHIEN1.P0IEIRCON.P0IF14USART 1 TX完成完成UTX173HIEN2.UTXIEIRCON2.UTX1IF15端口端口1输入输入P1INT7BHIEN2.P1IEIRCON2.P1IF16RF通用中断通用中断RF83HIEN2.RFIES1CON.RFIF17看门狗定时器溢出看门狗定时器溢出WDT8BHIEN2.WDTIEIRCON.WDTIF-36-4.3.3 中断的使用中断的使用中断源与中断向量中断
32、源与中断向量 l当相应的中断源使能并发生时,中断标志位将自动置当相应的中断源使能并发生时,中断标志位将自动置1,然后程序跳往中断服,然后程序跳往中断服务程序的入口地址执行中断服务程序。待中断服务程序处理完毕后,由硬件务程序的入口地址执行中断服务程序。待中断服务程序处理完毕后,由硬件清除中断标志位清除中断标志位 l中断服务程序的入口地址即中断向量,中断服务程序的入口地址即中断向量,CC2530的的18个中断源对应了个中断源对应了18个中个中断向量,中断向量定义在头文件断向量,中断向量定义在头文件“ioCC2530.h”中中-37-4.3.3 中断的使用中断的使用中断优先级中断优先级 l中断优先级
33、将决定中断响应的先后顺序,在中断优先级将决定中断响应的先后顺序,在CC2530中分为六个中断优先组,中分为六个中断优先组,即即IPG0IPG5,每一组中断优先组中有三个中断源,每一组中断优先组中有三个中断源 组组中断中断IPG0RFERRRFDMAIPG1ADCT1P2INTIPG2URX0T2UTX0IPG3URX1T3UTX1IPG4ENCT4P1INTIPG5STP0INTWDT-38-4.3.3 中断的使用中断的使用中断优先级中断优先级 l中断优先组的优先级设定由寄存器中断优先组的优先级设定由寄存器IP0和和IP1来设置。来设置。CC2530的优先级有的优先级有4级,级,即即03级,其
34、中级,其中0级的优先级最低,级的优先级最低,3级的优先级最高。级的优先级最高。IP1_XIP0_X优先级优先级000(优先级别最低)(优先级别最低)011102113(优先级别最高)(优先级别最高)l其中其中X为六个中断优先组为六个中断优先组IPG0IPG5中的任何一个中的任何一个。设置设置IPG0优先级最高优先级最高IP1_IPG0=1;IP0_IPG0=1;-39-4.3.3 中断的使用中断的使用中断优先级中断优先级 l如果同时收到相同优先级或同一优先级组中的中断请求时,将采用轮流检测如果同时收到相同优先级或同一优先级组中的中断请求时,将采用轮流检测顺序来判断中断优先级别的响应顺序来判断中
35、断优先级别的响应-40-4.3.3 中断的使用中断的使用中断优先级中断优先级 中断向量编号中断向量编号中断名称中断名称优先级排序优先级排序0RFERR轮流探测顺序为自上向下优先级依轮流探测顺序为自上向下优先级依次降低次降低16RF8DMA1ADC9T12URX010T23URX111T34ENC12T45ST13P0INT6P2INT7UTX014UTX115P1INT17WDT例如:在中断优先级组例如:在中断优先级组IPG0中的中中的中断断RFERR、RF和和DMA的中断优先级的中断优先级是相同的,如果同时使用这三个中断,是相同的,如果同时使用这三个中断,就需要使用轮流探测顺序来判断哪一就需
36、要使用轮流探测顺序来判断哪一优先级最高。由轮流探测顺序表查得优先级最高。由轮流探测顺序表查得RFERR中断优先级最高,中断优先级最高,RF中断次中断次之,之,DMA中断与其他两个中断相比中断与其他两个中断相比中断优先级最低中断优先级最低-41-4.3.3 中断的使用中断的使用中断处理过程中断处理过程 l中断发生时,中断发生时,CC2530硬件自动完成以下处理硬件自动完成以下处理 u中断申请:中断源向中断申请:中断源向CPU发出中断请求信号(中断申请一般需要在程序初始发出中断请求信号(中断申请一般需要在程序初始化中配置相应的中断寄存器开启中断)化中配置相应的中断寄存器开启中断)u中断响应:中断响
37、应:CPU检测中断申请,把主程序中断的地址保存到堆栈,转入中断检测中断申请,把主程序中断的地址保存到堆栈,转入中断向量入口地址向量入口地址 u中断处理:按照中断向量中设定好的地址,转入相应的中断服务程序中断处理:按照中断向量中设定好的地址,转入相应的中断服务程序 u中断返回:中断服务程序执行完毕后,中断返回:中断服务程序执行完毕后,CPU执行中断返回指令,把堆栈中保执行中断返回指令,把堆栈中保存的数据从堆栈弹出,返回原来程序存的数据从堆栈弹出,返回原来程序-42-4.3.3 中断的使用中断的使用中断编程中断编程 l中断编程的一般过程如下中断编程的一般过程如下:l中断设置:根据外设的不同,具体的
38、设置是不同的,一般至少包含启用中断中断设置:根据外设的不同,具体的设置是不同的,一般至少包含启用中断 l中断函数编写;这是中断编程的主要工作,需要注意的是,中断函数尽可能中断函数编写;这是中断编程的主要工作,需要注意的是,中断函数尽可能的减少耗时或不进行耗时操作的减少耗时或不进行耗时操作 以以CC2530的外部中断为例的外部中断为例/P0中断标志清0 P0IFG|=0 x00;/P0.4有上拉、下拉能力 P0INP&=0X30;/P0.4和P0.5中断使能 P0IEN|=0 x30;/P0.4和P0.5,下降沿触发 PICTL|=0X01;/开中断 EA=1;/端口0中断使能 IEN1|=0X
39、20;-43-4.3.3 中断的使用中断的使用中断编程中断编程 l中断编程的一般过程如下中断编程的一般过程如下:lCC2530所使用的编译器为所使用的编译器为IAR,在,在IAR编译器中用关键字编译器中用关键字_interrupt来定义来定义一个中断函数。使用一个中断函数。使用#progma vector来提供中断函数的入口地址,并且中断来提供中断函数的入口地址,并且中断函数没有返回值,没有函数参数函数没有返回值,没有函数参数#pragma vector=P0INT_VECTOR_interrupt void P0_ISR(void)/中断程序代码-44-4.3.3 中断的使用中断的使用中断编
40、程中断编程 l在中断函数编写中,当程序进入中断服务程序之后,需要执行以下几个步骤在中断函数编写中,当程序进入中断服务程序之后,需要执行以下几个步骤:u将对应的中断关掉(不是必须的,需要根据具体情况来处理);将对应的中断关掉(不是必须的,需要根据具体情况来处理);u如果需要判断具体的中断源,则根据中断标志位进行判断(例如所有如果需要判断具体的中断源,则根据中断标志位进行判断(例如所有I/O中断中断共用共用1个中断向量,需要通过中断标志区分是哪个引脚引起的中断)个中断向量,需要通过中断标志区分是哪个引脚引起的中断)u清中断标志(不是必须的,清中断标志(不是必须的,CC2530中中断发生后由硬件自动
41、清中断标志位)中中断发生后由硬件自动清中断标志位)u处理中断事件,此过程要尽可能的少耗时处理中断事件,此过程要尽可能的少耗时u最后如果在第一步中关闭了相应的中断源,需要在退出中断服务程序之前打最后如果在第一步中关闭了相应的中断源,需要在退出中断服务程序之前打开对应的中断开对应的中断/中断函数入口地址中断函数入口地址#pragma vector=P0INT_VECTOR/定义一个中断函数定义一个中断函数 _interrupt void P0_ISR(void)/关端口关端口P0.4、P0.5中断中断 P0IEN&=0 x30;/判断中断发生判断中断发生 if(P0IFG0)/清中断标志清中断标志
42、P0IFG=0;/*中断事件的处理中断事件的处理*/./开中断开中断 P0IEN|=0 x30;-45-4.4 I/OCC2530包括包括3个个8位输入位输入/输出(输出(I/O)端口,分别是)端口,分别是P0、P1和和P2。其中。其中P0和和P1有有8个引脚,个引脚,P2有有5个引脚,共个引脚,共21个数字个数字I/O引脚引脚,具有以下功能:,具有以下功能:l通用通用I/Ol外设外设I/Ol外部中断源输入口外部中断源输入口l弱上拉输入或推拉输出弱上拉输入或推拉输出-46-4.4.1 通用通用I/O用作通用用作通用I/O时,引脚可以组成时,引脚可以组成3个个8位端口,端口位端口,端口0、端口、
43、端口1和端口和端口2,三个端,三个端口分别用口分别用P0、P1和和P2来表示来表示所有的端口均可以通过所有的端口均可以通过SFR寄存器寄存器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 方向寄存器方向寄存
44、器PxDIR工作模式寄存器工作模式寄存器PxINP-48-4.4.1 通用通用I/O配置寄存器配置寄存器PxSEL(其中(其中x表示表示0,1,2)寄存器寄存器PxSEL用来设置端口的每个引脚为通用用来设置端口的每个引脚为通用I/O或者是外部设备或者是外部设备I/O(复位(复位之后,所有的数字输入、输出引脚都设置为通用输入引脚)之后,所有的数字输入、输出引脚都设置为通用输入引脚)以以P0SEL为例讲解为例讲解位位名称名称复位复位R/W描述描述7:0SELP07:00 x00R/WP0.7P0.0功能选择功能选择0:通用:通用I/O1:外设:外设I/O/P0.4和和P0.5设置为普通的设置为普通
45、的I/O口口P0SEL&=0 x30;/P0.4和和P0.5设置为外设的设置为外设的I/O口口P0SEL|=0 x30;-49-4.4.1 通用通用I/O配置寄存器配置寄存器PxDIR(其中(其中x表示表示0,1,2)如果需要改变端口引脚方向,需要使用寄存器如果需要改变端口引脚方向,需要使用寄存器PxDIR来设置每个端口引脚的来设置每个端口引脚的输入和输出输入和输出 以以P0DIR为例讲解为例讲解/P0.4和和P0.5设为输入设为输入P0DIR&=0 x30;/P0.4和和P0.5设置为输出低电平设置为输出低电平P0_4=0;P0_5=0;/P1.0和和P1.1设置为输出设置为输出P1DIR|
46、=0 x03;/P1.0和和P1.1设置为输出高电平设置为输出高电平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端口没有上拉和端口没有上拉
47、和下拉功能。上拉、下拉或三态操作模式寄存器由下拉功能。上拉、下拉或三态操作模式寄存器由PxINP设置设置 以以P0INP为例讲解为例讲解/P0.4和和P0.5设置为三态设置为三态P0INP|=0 x30;/P2.0和和P2.1设置上拉状态设置上拉状态P2INP&=0 x03;位位名称名称复位复位R/W描述描述7:0MDP07:00 x00R/WP0.7P0.0的的I/O输入模式功能选择输入模式功能选择0:上拉:上拉/下拉下拉1:三态:三态-51-4.4.1 通用通用I/O注意寄存器注意寄存器P2INP可以配置可以配置P0、P1和和P2端口为上拉或下拉。端口为上拉或下拉。/P0端口为上拉输入端口
48、为上拉输入P2INP|=0 x80;位位名称名称复位复位R/W描述描述7PDUP20R/W端口端口2上拉上拉/下拉选择,对所有的端口下拉选择,对所有的端口2引脚设置为上引脚设置为上拉拉/下拉输入下拉输入0:上拉:上拉1:下拉:下拉6PDUP10R/W端口端口1上拉上拉/下拉选择,对所有的端口下拉选择,对所有的端口1引脚设置为上引脚设置为上拉拉/下拉输入下拉输入0:上拉:上拉1:下拉:下拉5PDUP00R/W端口端口0上拉上拉/下拉选择,对所有的端口下拉选择,对所有的端口0引脚设置为上引脚设置为上拉拉/下拉输入下拉输入0:上拉:上拉1:下拉:下拉4:0MDP24:000000R/WP2.4P2.
49、0的的I/O输入模式功能选择输入模式功能选择0:上拉:上拉/下拉下拉1:三态:三态-52-4.4.1 通用通用I/O任务描述任务描述4.D.1,通过扫描方式实现按键触发,通过扫描方式实现按键触发LED亮灭。利用按键亮灭。利用按键SW5和按键和按键SW6控制控制LED1和和LED2。当按下。当按下SW5时,时,LED1状态改变;当按下状态改变;当按下SW6时,时,LED2状态改变状态改变 按键按键SW5由由P0.4控制,按键控制,按键SW6由由P0.5控制;控制;LED1和和LED2分别由分别由P1.0和和P1.1控制控制 按键的初始化:将按键的初始化:将P0.4和和P0.5设为普通设为普通I/
50、O口,并且设置为输入状态口,并且设置为输入状态 LED初始化:将初始化:将P1.0和和P1.1设置为输出且将设置为输出且将LED1和和LED2关闭关闭 采用按键检测的方法来控制采用按键检测的方法来控制LED状态的改变:当检测到状态的改变:当检测到SW5按下时,按下时,LED1状态改变;状态改变;当检测到当检测到SW6按下时,按下时,LED2状态改变状态改变-53-4.4.1 通用通用I/O#include#define uint unsigned int#define uchar unsigned char/*LED状态状态*/0代表打开代表打开#define ON 0/1代表关闭代表关闭#d