第3章_CC2530接口之TinyOS组件编程5(Flash&DMA)
CC2530非Z_Stack协议栈下的FLASH读写程序
CC2530非Z_Stack协议栈下的FLASH读写程序#include "ioCC2530.h"/**************************************************************** 功能: 擦除FLASH中的第page页* 参数: page=0-127(Z-Stack协议栈规定用户可使用范围page=121-126)****************************************************************/void FlashErase(uint8 page){FADDRH = page << 1;FCTL |= 0x01; //启动页面擦除while (FCTL & 0x80); //等待擦除完成}/**************************************************************** 功能: 将buf中的length个字节写入FLASH第page页offset开始的位置* 参数: page=0-127,offset和length必须是4的整倍数* 说明: 可去掉Project->Options->Texas Instruments->Download中的Erase flash选项****************************************************************/uint8 DmaDesc[8]={0,0,0x62,0x73,0,0,0x12,0x42}; //定义DMA描述符void FlashWrite(uint8 page, uint16 offset, uint8 *buf, uint16 length){FADDRH = (page << 1)|((offset >> 10) & 1); //计算FLASH地址FADDRL = (offset >> 2) & 0xFF;DmaDesc[0] = (uint16)buf >> 8; //设置数据地址DmaDesc[1] = (uint16)buf & 0xFF;DmaDesc[4] = (length >> 8) & 0x1F; //设置字节数DmaDesc[5] = length & 0xFC;DMA0CFGH = (uint16)DmaDesc >> 8; //设置DMA通道0描述符地址DMA0CFGL = (uint16)DmaDesc & 0xFF;DMAIRQ = 0x01; //激活DMA通道0DMAARM = 0x01; //使DMA通道0进入工作状态FCTL |= 0x02; //开始DMA写入操作while (FCTL & 0x80); //等待写入完成}/**************************************************************** 功能: 将FLASH第page页offset开始的length个字节读入buf中* 参数: page=0-127,offset和length必须是4的整倍数****************************************************************/void FlashRead(uint8 page, uint16 offset, uint8 *buf, uint16 length){uint8 *pData = (uint8 *)(offset + (page & 0xF) * 2048 + 0x8000);uint8 memctr = MEMCTR; //暂存当前存储器映射状态MEMCTR = (MEMCTR & 0xF8)|((page >> 4) & 7); //将被读FLASH映射到XDATA while (length--) *buf++ = *pData++; //读取数据MEMCTR = memctr; //回复存储器映射状态}。
第3章_CC2530接口之TinyOS组件编程4(Uart)
须使能9位模式
0:禁用奇偶校验
1:使能奇偶校验
2
SPB
0
R/W UART停止位数。选择要传送的停止位的位数
0:1位停止位
1:2位停止位
1
STOP
0
R/W UART停止位的电平必须不同于开始为的电平
0:停止位低电平
1:停止位高电平
0
START
0
R/W UART起始位电平,闲置线的极性采用选择的起始位级别的电
-5-
3.4.1 串口模式
➢ UART模式提供全双工传送,接收器中的位同步不影响发送功能。传送一个 UART字节包含1个起始位,8个数据位,1个作为可选的第9位数据或者奇偶校验 位,再加上1个或者2个停止位
-6-
3.4.1
串口模式 位名称复位 R/W Nhomakorabea描述
7
MODE
0 R/W USART模式选择
➢ UART操作由USART控制和状态寄存器01U::xSUPCAI模RST式R模式以及UART控制寄存器UxUCR
- 10 -
3.4.1 串口模式
➢ UART接收过程 ➢ 当1写入UxCSR.RE位时,在UART上数据接收开始。 ➢ UART在输入引脚RXDx中寻找有效起始位,并且设置UxCSR.ACTIVE位为1。 ➢ 当检测出有效起始位时,收到的字节就传入到接收寄存器,UxCSR.RX_BYTE位 设置为1。该 ➢ 操作完成时,产生接收中断。同时UxCSR.ACTIVE变为低电平。通过寄存器 UxBUF提供收到的数据字节。 ➢ 当UxBUF读出时,UxCSR_BYTE位由硬件清零。
➢ UA6 RT操作由FLOUWSART控制0 和状R/态W 寄存U0:AR流器T控硬U制件x禁流C止使S能R。以用及RTSU和ACTRS引T脚控选制择硬寄件存流控器制U的x使U用CR
cc2530课程设计
cc2530课程设计一、教学目标本课程的教学目标是使学生掌握cc2530的基本概念、特性以及应用。
具体包括:1.知识目标:–了解cc2530的基本概念和特性。
–掌握cc2530在物联网应用中的基本原理和操作方法。
2.技能目标:–能够使用cc2530进行基本的编程和调试。
–能够利用cc2530设计和实现简单的物联网应用。
3.情感态度价值观目标:–培养学生的创新意识和团队协作精神。
–增强学生对物联网技术的认识,提高他们对物联网技术的兴趣和热情。
二、教学内容本课程的教学内容主要包括cc2530的基本概念、特性、编程以及应用。
具体安排如下:1.第一章:cc2530概述–cc2530的基本概念–cc2530的特性2.第二章:cc2530编程基础–cc2530的编程环境–cc2530的基本编程语法3.第三章:cc2530应用实例–cc2530在物联网应用中的基本原理–cc2530在物联网应用中的操作方法三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括:1.讲授法:用于讲解cc2530的基本概念、特性和编程基础。
2.案例分析法:通过分析具体的物联网应用实例,使学生更好地理解cc2530的应用。
3.实验法:安排实验室实践环节,让学生亲自动手进行编程和调试,提高他们的实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的cc2530教材作为主要教学资料。
2.参考书:提供相关的物联网技术参考书籍,供学生自主学习。
3.多媒体资料:制作教学PPT,提供清晰的cc2530操作演示视频等。
4.实验设备:准备cc2530开发板、调试器等实验设备,为学生提供实践机会。
五、教学评估本课程的教学评估将采用多元化的评估方式,包括平时表现、作业、考试等,以全面客观地评价学生的学习成果。
1.平时表现:通过课堂参与、提问、小组讨论等形式的评估,考察学生的参与度和积极性。
2.作业:布置适量的作业,要求学生在规定时间内完成,以检验学生对课程内容的掌握程度。
第3章_CC2530接口之TinyOS组件编程0(CC2530简介+电源管理)
mA
2
uA
供电模式3.数字稳压器关闭;没有时钟;POR有效;RAM和寄存器保持。 0.4 1 uA
1.5 CC2530电气特性
参数 测试条件 外设电流消耗(为激活的每个外设单元添加到内核Icore) 定时器1 定时器运行, 32-MH XOSC 使 90 用 定时器运行, 32-MH XOSC 使 90 用 定时器运行, 32-MH XOSC 使 60 用 定时器运行, 32-MH XOSC 使 70 用 包括32.753kHz RCOSC 0.6 uA 典型 单位
2 CC2530中断系统
中断源与中断向量 CC2530有18个中断源,每个中断源都可以产生中断请求,中断请求可以通 过设置中断使能SFR寄存器的中断使能位IEN0、IEN1或IEN2使能或禁止中 断。
- 21 -
2 CC2530中断系统
中断号码 0 描述 RF TX RFIO下溢或RX FIFO 溢出 ADC转换结束 USART0 RX完成 USART1 RX完成 AES加密/解密完成 睡眠计时器比较 端口2输入/USB USART0 TX完成 DMA传送完成 定时器1(16位)捕获/比较/溢 出 定时器2 定时器3(8位)捕获/比较/溢 出 定时器4(8位)捕获/比较/溢 出 端口0输入 USART 1 TX完成 端口1输入 RF通用中断 看门狗定时器溢出 中断名称 RFERR 中断向量 03H 中断屏蔽 IEN0.RFERRIE 中断标志 TCON.RFERRIF
CC2530外设
两个8位定时器:定时器3,4为8位定时器,有两个捕获/比较通道,一个8 位的周期值,一个计数器通道。 MAC定时器:专为MAC或其他协议而设的定时器,可以跟踪已过周期, 同时可以记录收发某一的帧精确时间和传输结束时间,以便产生不同的选 通命令到无线模块 ADC:支持7到12位的分辨率,带宽范围为7-30kHz,在DC与音频转换时, 能够使用8个输入通道。 AES加密/解密内核:CC2530用128位的AES算法进行加密或解密数据, 从而保证了ZigBee网络层和应用层的安全要求。 USART0和USART1分别被配置为一个主从或一个UART,其功能是为RX 和TX提供双缓冲,以及硬件流控制。 调试接口:用于内部电路调试,具有两线串形接口 I/O控制器:负责所有的通用的I/O引脚
(完整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简介CC2530是一款由德州仪器(TI)公司推出的无线通信芯片,主要用于低功耗、短距离通信应用。
本部分将介绍CC2530的基本特性和应用领域。
1. CC2530的基本特性:CC2530是一款集成了RF收发器、微控制器、闪存和其他必要组件的芯片。
其采用IEEE 802.15.4标准,支持2.4 GHz频段,具有低功耗、高性能的特点。
2. CC2530的应用领域:CC2530广泛应用于物联网(IoT)、无线传感器网络(WSN)、家庭自动化、工业控制等领域。
其灵活性和低功耗的特性使其成为许多嵌入式系统的理想选择。
第二部分:智能家居中的CC2530应用1. 智能灯控系统:在智能家居中,CC2530可以用于搭建智能灯控系统。
通过与灯具连接,用户可以通过手机或其他智能设备远程控制灯光亮度、颜色,实现智能化的照明管理。
2. 温湿度监测系统:利用CC2530的低功耗特性,可以构建温湿度监测系统。
传感器采集环境数据,通过CC2530传输至中心控制器,用户可以实时监测室内温湿度,并根据需要进行调节。
3. 安防系统:CC2530也可以应用于智能家居的安防系统。
通过连接门窗传感器、红外感应器等设备,CC2530可以实现对家庭安全状态的监测,当有异常情况时及时发送通知。
第三部分:工业控制中的CC2530应用1. 无线传感器网络(WSN):在工业控制领域,CC2530常用于构建无线传感器网络。
通过无线连接传感器,实现对工业环境参数的实时监测,提高工业系统的智能化水平。
2. 远程设备监控:利用CC2530的远距离通信能力,可以实现对分布在不同位置的设备的远程监控。
工程师可以通过中心控制器远程管理和维护设备,提高工业生产的效率和可靠性。
3. 智能物流跟踪系统:在工业物流中,CC2530可以用于物品的实时追踪和监控。
通过与传感器和GPS模块结合,实现对物流过程的实时监测,提高物流运输的效率和安全性。
CC2530与无线传感器网络操作系统TinyOS应用实践
CC2530与无线传感器网络操作系统TinyOS应用实践(内附光盘1张)李外云编著的《CC2530与无线传感器网络操作系统TinyOS应用实践(附光盘)》第1章简要地介绍了物联网特点、体系结构以及802.15.4网络通信协议标准。
第2、3章分别介绍了TinyOS的安装方法和基于windows操作系统的TinyOS集成开发环境的配置、交叉编译开发工具的使用方法。
第4章介绍了本书所有应用程序开发的硬件平台的组成、软件编程和调试方法。
第5章简要地介绍了TinyOS操作系统架构、基于TinyOS操作系统平台的搭建以及CC22530移植的过程和方法。
第6、7章详细地介绍了CC2530芯片的内部资源和外设接口等硬件功能模块,以及各功能模块在TinyOS操作系统下的驱动组件的编程方法和应用测试程序。
第8、9章详细地剖析了CC22530的无线通信功能、基于TinyOS的主动无线通信消息机制组件的构建,并对CC2530无线通信的发送功率、信道选择、RSSI以及点对点和点对多点无线通信组件的测试过程进行了介绍。
第10章以光敏传感器、DS18820温度传感器、SHTxx 温湿度传感器和超声波传感器为例,详细地介绍了在基于TinyOS操作系统的物联网系统中不同类型传感器的驱动编程方法以及测试过程。
第11章介绍了TinyOS操作系统的小数据分发协议和汇聚协议的基本原理、组件构成以及多跳路由协议的应用开发。
作者:李外云编著出版社:北京航空航天大学出版社2章TinyOS开发环境的安装与配置第3章TinyOS在Windows环境下的集成开发工具第4章enmote物联网开发平台介绍第5章TinyOS操作系统与nesC语言编程第6章CC2530基本接口组件设计与应用第7章CC2530外设组件接口开发第8章CC2530射频通信组件设计第9章CC2530射频通信组件应用第10章TinyOS传感器节点驱动与应用第11章TinyOS-2.x网络协议与应用TinyOS实用编程——面向无线传感网节点软件开发者:李鸥,张效义,王晓梅,等著出版社:机械工业出版社出版时间:2013年7月介绍了利用TinyOS开发无线传感器网络应用系统应具备的基础知识,包括TinyOS系统的特点、体系结构、安装与常用命令、简单实例等;详细介绍了TinyOS的编程语言nesC(包括组件、接口、模块、配件与连接、参数化接口、通用组件等),TinyOS系统并发执行模型,驱动程序与硬件抽象,系统主要功能模块,TinyOS典型应用;剖析了应用程序运行过程,对应用程序的仿真、调试和编程提示进行了描述;最后结合应用实例进行系统分析以提高读者对于TinyOS的系统认识。
CC2530课后习题答案
CC2530课后习题答案附录课后练习的答案第1章zigbee技术概述1、 a2、b3、简单传感器网络、智能传感器网络、无线传感器网络4、物理层、媒体访问控制层(即mac层)、网络层、应用层5、免费的、半开源6.物联网是通信网络和互联网不断扩大的应用和网络延伸。
它使用感知技术和智能设备来感知和识别物理世界。
通过网络传输和互联,进行计算、处理和知识挖掘,实现人与物、物与物之间的信息交互和无缝连接,达到对物理世界进行实时控制、准确管理和科学决策的目的。
7、cc2430是chipcon公司(在2021年被美国德州仪器公司收购)推出的一款片上系统芯片。
它集成了8051内核与射频模块,主要用于实现嵌入式zigbee应用的片上系统。
cc2431是chipcon公司smartrf03家族中的一个关键部分。
它与cc2430的的最大不同是带有硬件定位引擎。
cc2530/cc2531是cc2430/cc2431的升级版本。
cc2530根据闪存的不同有4中不同的版本,分别是cc2530f32、cc2530f64、cc2530f128和cc2530f256,这4中版本分别具有32/64/128/256kb的闪存空间cc2538是德州仪器生产的一款针对高性能zigbee应用的理想片上系统。
该芯片包含基于armcortex-m3的强大mcu系统,具有高达32kb的片上ram、512kb的片上闪存和可靠的ieee802.15.4射频功能。
第2章开发环境P321、iar2、packetsniffer3.ZigBee协调器、ZigBee路由器、ZigBee终端节点4、5V、3.3V5、usb接口、按键、仿真器接口、传感器接口、继电器接口、zigbee核心模块插接处6、zigbee协调器主要负责网络的建立、信道的选择以及网络中节点地址的分配,是整个zigbee网络的控制中心。
ZigBee开发技术——CC2530单片机技术原理及应用7、略第三章硬件设计p441、射频电路的设计、晶振、电源去耦电路设计、外围扩展接口2、p1_0、p1_1、p1_4、p0_13.DS18B20温度传感器、光敏传感器、热红外传感器和烟雾传感器的接口4、插接口主要用于做cc2530核心板接口即i/o插座以及对应的功能选择插接口。
cc2530工作原理(一)
cc2530工作原理(一)CC2530工作原理简介CC2530是一款常见的无线通信芯片,广泛应用于物联网领域。
它采用TI公司的Zigbee技术,具有低功耗、长距离传输、自组网等特点。
本文将从浅入深解释CC2530的工作原理。
Zigbee无线通信技术Zigbee是一种低功耗、短距离、低速率的无线通信技术。
它基于IEEE 标准,并在其上添加了网络协议和应用层协议。
Zigbee网络采用网状拓扑结构,由一个协调器和多个终端设备组成。
CC2530芯片作为终端设备连接到Zigbee网络中。
CC2530芯片结构CC2530芯片包括处理器、收发器、外设等组件。
•处理器:CC2530采用8051内核的8位微控制器,用于控制全芯片的各个模块。
•收发器:CC2530集成了的射频收发电路,可以与其他设备进行无线通信。
•外设:CC2530还包含了GPIO、UART、I2C等外设接口,用于连接外部设备。
CC2530的工作原理步骤1.启动和初始化:CC2530芯片上电后,处理器将通过引脚配置、时钟设置等完成初始化。
2.Zigbee网络加入:CC2530通过射频收发电路与协调器进行通信,发送加入网络的请求。
3.网络配置:协调器接收到CC2530的请求后,根据网络配置规则为CC2530分配网络地址,并将其加入到Zigbee网络中。
4.数据收发:CC2530可以通过射频收发电路与其他设备进行数据收发。
它采用插槽访问方式,即在协调器规定的时间插槽内完成数据传输。
5.自组网:CC2530可以自动组网,根据网络拓扑结构自动选择路由路径,实现数据的可靠传输。
6.低功耗管理:CC2530具有低功耗特性,可以根据需要切换不同的功耗模式,延长电池寿命。
总结CC2530是一款基于Zigbee无线通信技术的芯片,通过与协调器的通信,实现与其他设备之间的无线数据收发。
它采用自组网和低功耗管理技术,为物联网应用提供了一种可靠的通信解决方案。
以上就是CC2530的工作原理的简要介绍,希望对读者有所帮助。
CC2530单片机原理及应用教学课件第3章
1111
=0xFFF F
信息页面映射到XDATA的地址区域为
XBANK ( 可选的32KB闪存区 )
0x7800~0x7FFF,个只读区域,存储与芯片相
0x8000 0x7FFF
0x7800
信息页面 (2KB)
关的信息。 8051的SFR寄存器映射的地址区域为
ቤተ መጻሕፍቲ ባይዱ
8051 SFR空间 8051 DATA 空间
第3章 CC2530基础开发
本章知识拓扑图
通用I/O
通用I/O中断
CC2530结构框架 CC2530最小系统
外设I/O 振荡器和 时钟
电源管理 ADC
温度信息 采集案例
通用I/O寄存器
控制LED闪烁案例
通用I/O实验
中断相关 概念 通用I/O中断应用 外设I/O引脚映射 外设I/O寄存器
振荡器 时钟设置 方法
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闪烁
3.1.2 存储器和映射
物理存储器和存储空间 CC2530的物理存储器 CC2530存储空间 映射
3.1.2 存储器和映射 物理存储器和存储空间
ZigBee(CC2530)演示程序烧写说明
ZigBee(CC2530)演示程序烧写说明安装IAR开发环境步骤如下:打开目录,解压EW8051-EV-751A.rar在当前文件夹下,图1.0双击开始安装图1.1图1.2单击Next图1.3单击Accept图1.4按下面的方法获取License#,然后点击Next。
打开EW8051-EV-751A Crack 文件双击IARID.EXE,获取自己PC的ID号,如下图,ID号为0x2B073图1.5鼠标右键点击KEY ,点编辑,修改ID。
然后保存。
双击key.cmd 生成文档,打开key.txt, 找到“EW8051-EV" 这一段,获取Installserial号和key图1.7图1.8将上面获取的key 拷贝到License Key:这一栏,然后点击Next ,后面的全部选默认安装,直到完成第二章安装CC2530烧写工具步骤如下:打开目录,双击Setup_SmartRFProgr_1.6.2.exe开始安装图2.0图2.1根据提示全部默认安装,直到安装完成,之后桌面上出现CC2530烧写软件图标双击桌面上的SmartRF Flash Programmer图标,打开CC2530烧写软件如下图2.2使用配套仿真器连接好CC2530和PC机后,界面显示在Flash处选择要烧写的hex文件\img\zigbee-img\up_zigbeeV0F1.hex 在Location处选择Secondary单选框,写入8字节物理地址在Action:处选择Erase and program单选框单击Perform actions按钮进行烧写烧写完后CC2530上的两个LED联系闪烁10次,表示等待配置第三章CC2530串口配置软件的使用双击\tools目录下的ZigBeeConfiger.exe软件图3.0图3.1用串口线连接好CC2530和PC机,给CC2530 上电选择连接PC机的串口号,波特率为*****,点击连接串口图3.2点击检测设备图3.3点击读出信息图3.4按如下图的配置信息写入信息,重启设备协调器节点图3.5温湿度路由器节点图3.6红外对射路由器节点。
第3章_CC2530接口之TinyOS组件编程2(Timer)
3.3.1 外设I/O
外设I/O位置的选择使用寄存器PERCFG来控制,PERCFG是外设控制寄存 器,用来选择外设使用哪一个I/O端口
位 7 名称 -复位 0 R/W R0 保留 描述
6
T1CFG
0
R/W
定时器1 I/O控制 0:外设位置1 1:外设位置2
定时器3 I/O控制 0:外设位置1 1:外设位置2 定时器4 I/O控制 0:外设位置1 1:外设位置2 保留
5
PRI2P1
0
R/W
4
PRI1P1
0
R/W
3
PRI0P1
0
R/W
2:0
端口2功能选择(详见4.3.1节)
-5-
3.3.1 外设I/O
如果I/O映射有冲突,可以在有冲突的组合之间设置优先级。优先级的设置是 通过寄存器P2SEL和P2DIR来设置
P2DIR设置
位 7:6 名称 PRIP0 复位
00
选择定时器1模式。定时器操作模式通过下列方式选择: 00:暂停运行 01:自由运行,从0x0000到0xFFFF 反复计数。 当16MHzRC振荡器用作系统时钟源时,定时器 1可以使用的最高时钟频率是 10:模,从0x0000到T1CC0反复技术。 11:正计数/倒计数,从0x0000到T1CC0反复计数且从T1CC0倒计数到 16MHz。 0x0000 MODE[1:0] R/W
- 10 -
3.3.1 外设I/O
调试接口 端口P2.1和P2.2分别用于调试数据和时钟信号。即DD调试数据和DC调试时
钟。当处于调试模式,调试接口控制这些引脚的方向,并且在这些引脚上禁
用上拉和下拉。
- 11 -
3.3.2 定时器
第3章_CC2530接口之TinyOS组件编程2(Timer)
- 12 -
3.3.2.1 定时器概述
定时器1是一个独立的16位定时器,支持典型的定时/计数功能,有5个独立的
捕获/比较通道。每个通道使用一个I/O引脚。定时器1的功能 : 5个捕获/比较通道。 上升沿、下降沿或任何边沿的输入捕获。 设置、清除或切换输出比较。 自由运行、模计数或正计数/倒计数操作。 可被1,8,32或128整除的时钟分频器。 在每个捕获/比较和最终计数上生成中断请求。 DMA触发功能。
P0
P1
P2
ADC
存器位PxSEL置1,每个外设单元对应两组可以选择的I/O引脚,即“外设位 置1”和“外设位置2”,如表4- 26所示。例如USART在SPI模式下,“外设位
C SS M0 M1 置1”为P0.2~P0.5 ,“外设位置 2”为P1.2~P1.5
USART0 (SPI)
M0
M1
C
SS
5 4:0
--
0
R0
端口2方向选择(详见4.3.1节)
-6-
3.3.1 外设I/O
ADC 整个P0口可作为ADC使用,因此可以使用多达8个ADC输入引脚。此时P0引
脚必须配置为ADC输入。APCFG寄存器(ADC模拟外设I/O配置寄存器)可
以配置P0的某个引脚为一个ADC输入,且相应的位必须设置为1
3 T3IF 0 R/W H0 0:无中断未决 1:中断未决 定时器3中断标志。当定时器3中断发生时设为1并且 CPU指向中断向量服务例程时清除 0:无中断未决 1:中断未决 定时器2中断标志。当定时器2中断发生时设为1并且 CPU指向中断向量服务例程时清除 0:无中断未决 1:中断未决 定时器1中断标志。当定时器1中断发生时设为1并且 CPU指向中断向量服务例程时清除 0:无中断未决 1:中断未决
CC2530的FLASH读写程序
#include <ioCC2530.h>#include <string.h>#define uint unsigned int#define uchar unsigned char#define uint8 unsigned char#define uint16 unsigned int#ifndef BV#define BV(n) (1 << (n))#endif#define st(x) do { x } while (__LINE__ == -1)/* SPI settings */#define HAL_SPI_CLOCK_POL_LO 0x00#define HAL_SPI_CLOCK_PHA_0 0x00#define HAL_SPI_TRANSFER_MSB_FIRST 0x20#define FLASH_CS_PORT 1//****************¶¨ÒåFLASHоƬµÄ¶Ë¿Ú*************#define FLASH_CS_PIN 3/* FLASH SPI lines */#define FLASH_CLK_PORT 1#define FLASH_CLK_PIN 5#define FLASH_MOSI_PORT 1#define FLASH_MOSI_PIN 6#define FLASH_MISO_PORT 1#define FLASH_MISO_PIN 7#define HAL_IO_SET(port, pin, val) HAL_IO_SET_PREP(port, pin, val)#define HAL_IO_SET_PREP(port, pin, val) st( P##port##_##pin## = val; )#define HAL_CONFIG_IO_OUTPUT(port, pin, val) HAL_CONFIG_IO_OUTPUT_PREP(port, pin, val)#define HAL_CONFIG_IO_OUTPUT_PREP(port, pin, val) st( P##port##SEL &=~BV(pin); \P##port##_##pin## = val; \P##port##DIR |=BV(pin); )#define HAL_CONFIG_IO_PERIPHERAL(port, pin)HAL_CONFIG_IO_PERIPHERAL_PREP(port, pin)#define HAL_CONFIG_IO_PERIPHERAL_PREP(port, pin) st( P##port##SEL |=BV(pin); )/* SPI interface control */#define FLASH_SPI_BEGIN() HAL_IO_SET(FLASH_CS_PORT,FLASH_CS_PIN, 0); /* chip select */#define FLASH_SPI_END() \{ \asm("NOP");\asm("NOP");\HAL_IO_SET(FLASH_CS_PORT, FLASH_CS_PIN, 1); /* chip select */\}/* clear the received and transmit byte status, write tx data to buffer,wait till transmit done*///*****************SPIµÄ·¢ËÍ¡¢½ÓÊÜ¡¢µÈ´ý*******************#define FLASH_SPI_TX(x) { U1CSR &= ~(BV(2) | BV(1));U1DBUF = (x); while( !(U1CSR & BV(1)) ); }#define FLASH_SPI_WAIT_RXRDY() { while(!(U1CSR & BV(1))); }#define FLASH_SPI_RX(x) {U1CSR &= ~(BV(2) | BV(1));U1DBUF = 0xFF; while( !(U1CSR & BV(1)) ); (x)=U1DBUF;}typedef union{unsigned long cvalue;unsigned char cbyte[4];}addr_ch;//*********************¶¨ÒåµØÖ·½á¹¹Ìå*******************//¶¨Òå¿ØÖƵƵĶ˿Ú#define GLED P1_0#define RLED P1_1#define BLED P0_1#define YLED P1_4//º¯ÊýÉùÃ÷void Delay(uint);void initUARTSEND(void);void UartTX_Send_String(char *Data,int len);void vddWait(uchar vdd);void Init_SSTSPI(void);void Read_JEDECID(char *ID);void Byte_Program(addr_ch sDst, unsigned char cbyte);unsigned char Read_Status_Register(void) ;void EWSR(void) ;void WRSR(unsigned char byte) ;void WREN(void) ;void WRDI(void) ;void Wait_Busy(void);void SPIFlashEraseAll(void);void FlashReadCNT(addr_ch sDst, unsigned long no_bytes,char *Buffer);char Txdata[25]="\r\nFEIBIT Electronics\r\n ";/****************************************************************ÑÓʱº¯Êý****************************************************************/void Delay(uint n){uint i;for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);}/****************************************************************´®¿Ú³õʼ»¯º¯Êý****************************************************************/void initUARTSEND(void) //*******************************´®¿ÚÉèÖÃ******************************{PERCFG = 0; //ÅäÖÃUART0µÄIOλÖÃΪ±¸ÓÃλÖÃ1P0SEL = 0x3c; //P0.2-PO.5ÉèÖÃΪÍâÉ蹦ÄܵĶ˿ÚP2DIR &= ~(3<<6);//ÉèÖÃUART0ΪµÚÒ»ÓÅÏȼ¶£¬UART1ΪµÚ¶þÓÅÏȼ¶£¬U0CSR |= (1<<7); //select the mode as UART modeU0GCR |= 0x09;U0BAUD |= 59; //ʵÔò9600±ÈÌØÂÊUTX0IF = 0; //clear the interrupt flagU0CSR |= (1<<6); //enable receive bitIEN0 |= 0x84;}/****************************************************************´®¿Ú·¢ËÍ×Ö·û´®º¯Êý****************************************************************/void UartTX_Send_String(char *data,int length) //*****************************´®¿Ú·¢ËÍÊý¾Ý**************************{int i;for(i=0;i<length;i++){U0DBUF = *data;data++;while(UTX0IF==0); // complete receiveUTX0IF = 0; //clear the flag}U0DBUF =0x0A; //carriage returnwhile(UTX0IF==0); // complete receiveUTX0IF = 0;}static voidInit_SSTSPI(void)//***********************³õʼ»¯SPI½Ó¿Ú*************{/* UART/SPI Peripheral configuration */uint8 baud_exponent;uint8 baud_mantissa;HAL_CONFIG_IO_OUTPUT(FLASH_CS_PORT,FLASH_CS_PIN,1);//******½«P13ÉèÖÃΪÊä³ö/* Set SPI on UART 1 alternative 2 */PERCFG |= 0x02;//Ñ¡Ôñ´®¿Ú1£¬2Ϊ¿ÉÑ¡/* Configure clk, master out and master in lines */HAL_CONFIG_IO_PERIPHERAL(FLASH_CLK_PORT,FLASH_CLK_PIN);//******¶Ë¿ÚÉèÖÃΪÍâÉèHAL_CONFIG_IO_PERIPHERAL(FLASH_MOSI_PORT, FLASH_MOSI_PIN);HAL_CONFIG_IO_PERIPHERAL(FLASH_MISO_PORT, FLASH_MISO_PIN);/* Set SPI speed to 1 MHz (the values assume system clk of 32MHz)* Confirm on board that this results in 1MHz spi clk.*/baud_exponent = 15;baud_mantissa = 0;/* Configure SPI */U1UCR = 0x80; /* Flush and goto IDLE state. 8-N-1. */U1CSR = 0x40; /* SPI mode, master. */U1GCR = HAL_SPI_TRANSFER_MSB_FIRST | HAL_SPI_CLOCK_PHA_0 |HAL_SPI_CLOCK_POL_LO | baud_exponent;U1BAUD = baud_mantissa;}void Read_JEDECID(char *ID){FLASH_SPI_BEGIN(); //HAL_IO_SET(FLASH_CS_PORT, FLASH_CS_PIN,0); /* chip select */ CSƬѡÖУ¬µÍµçƽѡÔñ¡¢asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX (0x9F ); // ¶ÁJEDEC ID { U1CSR &= ~(BV(2) | BV(1));U1DBUF = (x); while( !(U1CSR & BV(1)) ); }FLASH_SPI_RX(ID[0]); // ½ÓÊÕÈý¸öIDFLASH_SPI_RX(ID[1]);FLASH_SPI_RX(ID[2]);FLASH_SPI_END();}//***************************************************************************//// ////º¯Êý£ºvoid Byte_Program(unsigned long, unsigned char) ////˵Ã÷: ×Ö½ÚдÈë ////²ÎÊý£ºDst¡ª¡ªÊý¾ÝµØÖ· //// byte ¡ª¡ªÐ´ÈëÊý¾Ý //// ////***************************************************************************//void Byte_Program(addr_ch sDst, unsigned char cbyte){FLASH_SPI_BEGIN();asm("NOP");FLASH_SPI_TX(0x02);//дÃüÁî×ÖFLASH_SPI_TX(sDst.cbyte[2]);//ÏÈдµØÖ·FLASH_SPI_TX(sDst.cbyte[1]);FLASH_SPI_TX(sDst.cbyte[0]);FLASH_SPI_TX(cbyte);//дÈëÊý¾ÝFLASH_SPI_END();}//***************************************************************************//// ////º¯Êý£ºunsigned char Read_Status_Register(void) ////˵Ã÷: ¶Áȡ״̬¼Ä´æÆ÷////·µ»Ø£º×´Ì¬¼Ä´æÆ÷Öµ//// ////***************************************************************************//unsigned char Read_Status_Register(void){unsigned char cbyte = 0 ;FLASH_SPI_BEGIN();asm("NOP");FLASH_SPI_TX(0x05);//дÈë¡°¶Áȡ״̬¡±ÃüÁîFLASH_SPI_RX(cbyte);//½ÓÊÜ״̬Êý¾ÝFLASH_SPI_END();return cbyte;}//***************************************************************************//// ////º¯Êý£ºvoid EWSR(void)////˵Ã÷: ״̬¼Ä´æÆ÷дʹÄÜ //// ////***************************************************************************//void EWSR(void){FLASH_SPI_BEGIN();asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX(0x50);FLASH_SPI_END();}//***************************************************************************//// ////º¯Êý£ºvoid WRSR(unsigned char byte) ////˵Ã÷: ״̬¼Ä´æÆ÷дÈë ////²ÎÊý£ºbyte ¡ª¡ªÐ´ÈëÊý¾Ý //// ////***************************************************************************//void WRSR(unsigned char cbyte){FLASH_SPI_BEGIN();asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX(0x01);FLASH_SPI_TX(cbyte);FLASH_SPI_END();}//***************************************************************************//// ////º¯Êý£ºvoid WREN(void) ////˵Ã÷: оƬдʹÄÜ//// ////***************************************************************************//void WREN(void){FLASH_SPI_BEGIN();asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX(0x06);FLASH_SPI_END();}//***************************************************************************//// ////º¯Êý£ºvoid WRDI(void) ////˵Ã÷: оƬд½ûÖ¹//// ////***************************************************************************//void WRDI(void){FLASH_SPI_BEGIN();asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX(0x04);FLASH_SPI_END();}//***************************************************************************//// ////º¯Êý£ºvoid Wait_Busy(void) ////˵Ã÷: оƬæ¼ì²â//// ////***************************************************************************//void Wait_Busy(void){while(Read_Status_Register()&0x01)Read_Status_Register() ;}/***************************************************************** ****************************************** Function name: SPIFlashChipErase** Descriptions: ²Á³ýÕû¿éоƬ** Input parameters: none** Output parameters: none** Returned value: none** Note: Èç¹ûsectorAaddr****************************************************************** ***************************************/void SPIFlashEraseAll(void){WREN();Init_SSTSPI() ;EWSR();WRSR(0x00) ;WREN() ;FLASH_SPI_BEGIN();asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX(0x60);FLASH_SPI_END();Wait_Busy();WREN() ;FLASH_SPI_BEGIN();asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX(0xC7);FLASH_SPI_END();Wait_Busy();}void FlashReadCNT(addr_ch sDst, unsigned long no_bytes,char *Buffer) {unsigned char i ;FLASH_SPI_BEGIN();asm("NOP");asm("NOP");asm("NOP");FLASH_SPI_TX(0x03);FLASH_SPI_TX(sDst.cbyte[2]);FLASH_SPI_TX(sDst.cbyte[1]);FLASH_SPI_TX(sDst.cbyte[0]);for(i=0;i<no_bytes;i++){FLASH_SPI_RX(Buffer[i] );}FLASH_SPI_END();}/**************************************************************** Ö÷º¯Êý****************************************************************/ const char HEX_char[] = "0123456789ABCDEF";void main(void){uchar i;uchar j;P1DIR = 0x03; //P1¿ØÖÆLEDRLED = 1;GLED = 0; //¹ØLEDaddr_ch lDst;initUARTSEND();UartTX_Send_String(Txdata,25); //FEIBIT ElectronicsInit_SSTSPI();for(j=0;j<2;j++){//-----------------------Erase------------------SPIFlashEraseAll();//²Á³ýÐèÒªÒ»¶¨µÄʱ¼ä2ÃëUartTX_Send_String("\r\nSPI Erase OK!\r\n",17);//-----------------------Read ID---------------Read_JEDECID(Txdata);//*******¶ÁÈ¡µØÖ·********UartTX_Send_String("\r\nFeibit Flash ID:", 18);//***************flashµØÖ·ÊÇ×Ô¶¯ÏÔʾ**************UartTX_Send_String( (char *)&HEX_char[Txdata[0]>>4], 1);UartTX_Send_String( (char *)&HEX_char[Txdata[0]&0x0f], 1);UartTX_Send_String( (char *)&HEX_char[Txdata[1]>>4], 1);UartTX_Send_String( (char *)&HEX_char[Txdata[1]&0x0f], 1);UartTX_Send_String( (char *)&HEX_char[Txdata[2]>>4], 1);UartTX_Send_String( (char *)&HEX_char[Txdata[2]&0x0f], 1);UartTX_Send_String("\r\n",2);//---------------------Write Data----------------lDst.cvalue=0x10;//ֵΪ¡°16¡±£»for(i=0;i<16;i++){//ÏÈÏû³ý±£»¤Î»£¬ÔÙÔÊÐíдλWREN();//******оƬдʹÄÜ******Byte_Program(lDst,HEX_char[i]);//********16´ÎÑ-»·Ð´ÈëÊý¾Ý****** *****Wait_Busy();lDst.cvalue++;//******16¸ö1Dst.cvalueÖµ******** }lDst.cvalue=0x10;UartTX_Send_String("\r\nSPI Write OK!\r\n",17);//--------------------Read Data---------------FlashReadCNT(lDst,0x10,Txdata);//******¶ÁоƬµÄÊý¾Ý£¬·ÅÈëµ½TxdataÖÐ*******¶ÁÊý¾ÝµÄʱºò£¬µØÖ·Ñ°ÕÒÊǴӸߵØÖ·ÏòµÍµØÖ·Ñ°ÕÒµÄUartTX_Send_String("\r\nSPI Read OK! \r\n",17);//UartTX_Send_String(Txdata,0x10);//´®¿Ú·¢ËÍÊý¾ÝDelay(50000); //ÑÓʱGLED=!GLED; //±êÖ¾·¢ËÍ״̬ RLED=!GLED;Delay(50000);Delay(50000);}}。
TinyOS在CC2530下的移植及AODV路由协议的实现
TinyOS在CC2530下的移植及AODV路由协议的实现曾志宏;汤碧玉;杨琦【期刊名称】《现代电子技术》【年(卷),期】2012(035)009【摘要】In this paper, the implementation of the node hardware which takes the TI wireless sensor network chip CC253O as a core component is introduced. The operation mechanism of the TinyOS operating system and the transplant process on the CC253O platform are described. On this basics* we implement AODVCAd hoc On-demand Distance Vector) routing protocol by nesC. Finally, this system s network is tested, the results show that the platform running correctly and the AODV basic function is achieved.%首先介绍了以TI的无线传感器网络芯片CC2530为核心部件的节点硬件实现,接着介绍TinyOS操作系统的运行机制及其在CC2530平台下的移植过程;并在此基础上以nesC语言实现了AODV路由协议,最后对系统进行组网测试,测试结果表明平台各功能正常运行并且实现AODV协议的基本功能.【总页数】4页(P41-44)【作者】曾志宏;汤碧玉;杨琦【作者单位】厦门大学,福建厦门361005;厦门大学,福建厦门361005;厦门大学,福建厦门361005【正文语种】中文【中图分类】TN711-34【相关文献】1.TinyOS在CC2530上的移植 [J], 林语;张金榜;何秀春;刘军2.TinyOS在CC2530下的移植研究 [J], 张明华3.基于TinyOS的无线传感器网络AODV路由协议的实现与优化 [J], 张贝贝;王婷婷4.TinyOS在CC2530下的移植研究 [J], 张明华5.基于CC2530和TinyOS的无线通信MAC协议实现 [J], 高承志;许道峰;何纬因版权原因,仅展示原文概要,查看原文内容请购买。
CC2530内部Flash读写应用课件PPT
1、内部Flash介绍
嵌入式Flash存储器包括多达128 页面,每页有2048 个字节
2、相关寄存器
位
名称
7:0 FWDATA[7:0]
Flash写数据寄存器FWDATA
复位 R/W
描述
0x00 R0/W 闪存写数据。当FCTL.WRITE为1时才能写该寄存器。
Flash地址高字节寄存器FADDRH
位
名称
7:0 FADDRH[7:0]
复位 0x00
R/W R/W
描述 页面地址/闪存字地址的高位字节,位[7:1]将选择要 访问的页面。(因为总的页面就128页,只要7位就够)
第10章 CC2530内部Flash读写应用
本章简介
1、内部Flash介绍 2、相关寄存器 3、开发实验 4、拓展题
1、内部Flash介绍
内部Flash是什么? 内部Flash,其实就是单片机内部的内存。 闪存就是在断电情况下仍能保持所存储的数据信息的存储器 内存数据删除不是以单个的字节为单位而是以固定的区块为单
Flash存储器分为2048 字节的Flash页面,Flash页面是存储器内 可擦除的最小单元,而32 位字是可以写入Flash的最小可写单元
xdata 指单片机里的Flash存取器,Flash相对单片机里的RAM属于外部存取器, 虽其结构位置装在单片机中,所以搂主误解为xdata一定是放在单片机外面,其 是xdata是放在相对RAM的外面,而flash正是相对RAM外面
第三章 CC2530开发板硬件资源详解
CC2530开发板硬件资源详解前言进行ZigBee无线传感器网络开发,首先,需要有相应的硬件支持(尤其是需要支持ZigBee协议栈的硬件);此外还需要相应的软件支持(最好是相应的支持ZigBee协议的软件协议栈),当然,还需要下载器将程序下载到相应的硬件。
本章主要讲解硬件电路方面的设计方法。
为了让大家能够更方便地学习Zigbee,佳杰科技打造了一套本土化的高性价比学习套件。
我们的学习平台是IAR8.1 + Z-stack 2007 PRO,采用TI 公司的CC2530F256芯片。
也是目前国内最流行的且资料最全的Zigbee 学习和应用方案。
配套有《ZigBee入门与实战演练》该教程每章一个文件夹,文件夹内有教程提到的图片,程序代码,工具软件、原理图、HEX文件。
配套面上的例程也是基于本学习平台开发的,所以可以直接下载使用,有16个基础实验,以及26个组网实验。
网上所谓最全的教程资料其实更本不到我的内容的1/5. 该教程包含如下内容:第一章、Zigbee简介第二章、IAR开发环境的搭建以及一个工程的建立实例一些工具软件的安装第三章、开发板硬件资源详细介绍第四章、16个基础实验掌握CC2530第五章、Zigbee无线网络入门每个实验都有协调器终端节点的编程有些有路由器的编写,从0开始编写指的是从新建立一个.C .H一个简单的无线传输组网实验从0开始编写数据收发无线组网实验从0开始编写无线开关灯实验组网实现从0开始编写OSAL详细分析之NV操作实验从0开始编写无线串口,无线聊天程序从0开始编写与讲解无线数据采集网络从0开始编写实现空余时间睡眠功能Zigbee无线点对点组网实验Zigbee群发信息组网实验Zigbee组发信息组网实验Zigbee获得IEEE地址段地址PAN组网实验无线传感网络通用系统设计组网实验太阳能供电无线传感网络组网实验无线温度采集实验无线电灯实验基于基本的无线收发非组网信道质量检测实验非组网实验串口控制LED灯组网实验终端自动发送数据实验TI官方实验GenericAppTI官方实验SampleLight SampleSwitchTI官方实验GenericAppTI官方实验SampleAppTI官方实验SensorDemoTI官方实验SimpleAppTI官方实验SerialAppTI官方实验Transmit项目实战教程目录CC2530开发板硬件资源详解 (1)前言 (1)3.1.1 核心板硬件资源 (2)3.1.1 CC2530简介 (3)3.1.1 天线及巴伦配置电路设计 (4)3.1.2 晶振电路设计 (4)3.1.3 核心板原理图 (5)3.4.2 ZigBee模块天线选型 (12)3.1核心板硬件资源RF2530A核心板主要包括CC2530单片机、天线接口、晶振以及I/O扩展接口,RF2530A 核心板如图3-1所示。
第3章_CC2530接口之TinyOS组件编程1(GPIO)
R/W 端口0中断使能 0:中断禁止
4
3 2 1 0
T4IE
T3IE T2IE T1IE DMAIE
0
0 0 0 0
R/W 定时器4中断使能 0:中断禁止
R/W 定时器3中断使能 0:中断禁止 R/W 定时器2中断使能 0:中断禁止 R/W 定时器1中断使能 0:中断禁止 R/W DMA中断使能 0:中断禁止
3.2.1 通用I/O
注意寄存器P2INP可以配置P0、P1和P2端口为上拉或下拉。
位 名称 复位 R/W 描述
7
PDUP2
0
R/W
端口2上拉/下拉选择,对所有的端口2引脚设置为上 拉/下拉输入 0:上拉 1:下拉
端口1上拉/下拉选择,对所有的端口1引脚设置为上 拉/下拉输入 0:上拉 1:下拉 端口0上拉/下拉选择,对所有的端口0引脚设置为上 拉/下拉输入 0:上拉 1:下拉 P2.4~P2.0的I/O输入模式功能选择 0:上拉/下拉 1:三态
中断状态标志寄存器包括PxIFG,其功能是当发生中断时,I/O口所对应的中断状态标 志将自动置1。 中断控制寄存器为PICTL,其功能是控制I/O口的中断触发方式。
- 18 -
3.2.2 通用I/O中断
中断使能寄存器IENx(其中x为0,1,2) IENx寄存器包括三个八位寄存器:IEN0、IEN1和IEN2。IENx中断主要是配 置总中断和P0~2端口的使能 IEN1.P0 IE:P0端口中断使能。 IEN2.P1 IE:P1端口中断使能。
-3-
3.2.1 通用I/O
通用I/O配置寄存器(其中x表示0,1,2)
功能寄存器PxSEL
方向寄存器PxDIR 工作模式寄存器PxINP
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
域,但是映射的时候 bank0总映射的根部 的低32KB区域
Bank0-7 (32KB FLASH)
0xFFFF
首先要解决存储空间不对称的问题
CC2530将FLASH存储器分为几个bank, 每个bank的大小是32KB。
映射的两种形式
CODE存储器映射
XDATA存储器映射
-8-
4.5.1 CC2530存储器及映射
CODE存储器映射 CODE存储器映射具有两个功能: 一是将FLASH映射至CODE存储空间; 二是执行来自SRAM的代码(将SRAM映射至CODE存储空间)
-9-
4.5.1 CC2530存储器及映射
来减轻8051CPU内核传送数据时的负担,有效降低功耗。CPU做初始
化工作储器。
- 21 -
4.6.1 DMA概述
CC2530的DMA控制器协调所有的DMA传送,确保DMA请求和CPU访问存储
器之间按照优先等级协调合理的进行。
DMA控制器含有若干个可编程的DMA通道,用来实现存储器与存储器之间的 数据传送,即DMA控制器通过访问整个XDATA存储空间来进行存储器与外设
2:0
XBANK
000
R/W
- 15 -
4.5.1 CC2530存储器及映射
闪存区映射寄存器FMAP 闪存区映射寄存器FMAP控制物理32KB代码区映射到CODE存储空间的程序 地址区域0x8000-0xFFFF
位 7: 3 2: 0 名称 -MAP[2: 0] 复位 00000 001 R/W R0 R/W 保留 闪存区域映射,控制物理闪存存储器的哪个代码映射到 CODE区域(0x8000-0xFFFF)。当设置为0,映射到根部 区。 有效设置取决于设备的闪存大小。写一个无效设置被忽略 ,即不会更新MAP[2:0] 32KB版本只能是0(即总是映射到根底部) 64KB版本:0-1 128KB版本:0-3 256KB版本:0-7 描述
程序存储器,只读存储空间,用于存放程序代码和一些常量,有16根地址总线, 寻址范围为0x0000~0xFFFF共64KB
CODE
DATA
数据存储器,可读/写的数据存储空间,用于存放程序运行过程中的数据。有8根 地址总线,因此寻址空间为0x00~0xFF,共256个字节
XDATA
外部数据存储器,可读/写的数据存储空间,主要用于DMA寻址。有16根地址总 线,寻址空间是0x0000~0xFFFF共64KB
之间的数据传输。
- 22 -
4.6.1 DMA概述
使用DMA可以在CPU在休眠状态下使外部设备之间传送数据,从而降低各系
统的能耗,因此DMA的操作能够减轻CPU的负担。DMA控制器的主要特点如
下: 具有5个独立的DMA通道。 具有3个可以配置的DMA通道优先级。 具有31个可以配置的传送触发事件。
- 25 -
4.6.2 DMA操作和配置
DMA配置参数 触发事件:所有DMA传输通过DMA触发事件产生。这个触发可以启动一个DM
A块传输或单个DMA传输 ,DMA通道可以通过设置指定DMAREQ.DMAREQ
x标志来触发。
源地址和目标地址增量:源地址和目标地址可以设置为增加或减少,或不改变,
SRAM
普通区/Bank0 (32KB FLASH)
虽然程序从SRAM中运行代 码,但是并不代表程序是从 SRAM中启动的。程序仍旧 是从CODE的普通区域 0x0000开始执行,当程序执 行到0x8000时,将执行 SRAM中的代码
0x0000
- 11 -
4.5.1 CC2530存储器及映射
SRAM映射 为了方便DMA控制器能访问所有的物理存储空间,CC2530把所有 的物理存储器以及寄存器都映射到XDATA上,包括CODE和SFR部分 存储空间 。
是通过映射来联系起来的。例如FLASH或者EEPROM都可 以作为物理存储媒介映射到CODE上。
-6-
4.5.1 CC2530存储器及映射
映射
映射就是将CC2530的物理存储器映射到其存储空间上,有两个作用:
方便DMA访问 存储设备
可在CODE区执 行FLASH或 SRAM中的代码
-7-
4.5.1 CC2530存储器及映射
0xFFFF
Bank0~7 (可选的32KB闪存区)
0x8000 0x7FFF
信息页面 (2KB)
0x7800
0x70FF
8051 SFR空间
0x7080 0x63FF
SFR(128B)
XREG
0x6000
SRAM_SIZE-1
8051 DATA空间
SRAM_SIZE-256
SRAM (SRAM_SIZE字节)
有四种情况:增量0、增量1、增量2和增量-1
传送模式:传输模式确定当DMA通道开始传输数据时是如何工作的,包括单 一模式、块模式、 重复的单一模式和重复的块模式
字节传送或字传送:确定每个DMA传输是8位字节或16位字
- 26 -
- 14 -
4.5.1 CC2530存储器及映射
存储器仲裁控制寄存器MEMCTR MEMCTR.XMAP必须设置以使得程序从SRAM执行;MEMCTR.XBANK决 定XDATA的高32KB映射CODE存储空间的哪个bank区域
位 7: 4 3 名称 -XMAP 复位 0000 0 R/W R0 R/W 保留 XDATA映射到代码,当设置了这一位,SRAM XDATA区域 从0x0000到(SRAM_SIZE)映射到CODE区域的 (0x8000+SRAM_SIZE-1)这使得程序代码从RAM执行。 0:SRAM映射到CODE功能禁用 1:SRAM映射到CODE功能使能 XDATA区选择,控制物理闪存存储器的哪个代码区域映射 到XDATA区域(0x8000-0xFFFF)。当设置为0,映射到根 底部。 有效设置取决于设备的闪存大小。写一个无效设置被忽略, 即不会更新XBANK[2:0] 32KB版本只能是0(即总是映射到根底部) 64KB版本:0-1 128KB版本:0-3 256KB版本:0-7 描述
信息 页面
信息页面是一个2KB的只读区域,它的主要作用是存储全球唯一的IEEE地址
-3-
4.5.1 CC2530存储器及映射
物理存储器
SFR
控制8051CPU内核或外设的一些功能
XREG
是SFR的扩展寄存器,比如射频寄存器,访问速度比SFR要慢
-4-
4.5.1 CC2530存储器及映射
存储空间
DMA配置参数 DMA配置安装 DMA传输及触发 DMA操作
- 24 -
4.6.2 DMA操作和配置
DMA配置参数 源地址:DMA通道要读的数据的首地址。源地址可以是XDATA的任何地址
目标地址:DMA通道从源地址读出的要写数据的首地址。用户必须确认该目
标地址可写。目标地址可以是XDATA的任何地址 传送长度:在DMA通道重新进入工作状态或者结束工作状态之前,以及警告 CPU即将有中断请求到来之前,要传送的长度 可变长度:DMA通道可以利用源数据中的第一个字节或字(对于字使用[12:0] 位)作为传送长度来进行可变长度传输 优先级别:DMA通道的DMA传送的优先级别与CPU、其他DMA通道和访问端 口相关,用于判定同时发生的多个内部存储器请求中的哪一个优先级别最高, 以及DMA存储器存取的优先级别是否超过同时发生的CPU存储器存取的优先 级别 ,DMA优先级别有3级 :高级,普通级和低级
即最底部的32KB区域 (0x0000~0x7FFF)
- 16 -
4.5.2 Flash存储器
主要用来存储程序及常量 CPU访问Flash是按字节寻址,且是只读 Flash控制器可以对Flash进行擦除、写 Flash被分为若干个2KB的页,页是擦除的最小单位 4字节组成的单元是Flash写的最小单位
第3章 CC2530接口之TinyOS组件编程4(Flash&DMA)
4.5.1 CC2530存储器及映射
CC2530物理存储器
CC2530存储空间
映射
存储器仲裁
-2-
4.5.1 CC2530存储器及映射
物理存储器
SRAM 上电时,SRAM的内容未定义,在供电的情况下,SRAM的内容被保留
FLASH 片上闪存存储器,主要为了保存程序和常量数据。FLASH由一组2KB的页面组成
XREG区域映射到1KB地址区域0x6000-0x63FF SFR寄存器映射到地址区域0x7080-0x70FF。128个条目的硬件寄存器区域是通过这
一存储空间访问的。闪存信息页面2KB映射到地址区域0x7800-0x7FFF。这是一个只
读区域,包含有关设备的各种信息 信息页面映射到地址区域0x7800~0x7FFF XBANK为CODE存储空间的bank0~7区域的映射,其地址仍然是0x8000~0xFFFF。 可以配置存储器控制寄存器MEMCTR.XBANK[2:0](详见存储器仲裁)决定选择映射 bank0~bank7之间的哪个区域,比如MEMCTR.XBANK=001,则映射bank1区域 - 13 -
4.5.1 CC2530存储器及映射
存储器仲裁 主要功能是解决CPU与DMA访问所有物理存储器(除了CPU内部寄存器) 之间的冲突问题。当CPU和DMA之间发生冲突时,“存储器仲裁”停止 CPU或DMA的总线 存储器仲裁主要有两个寄存器:存储器仲裁控制寄存器MEMCTR和闪存区映 射寄存器FMAP,这两个寄存器用于控制存储器子系统的各个方面
SFR