IAR.docx

上传人:b****7 文档编号:10592146 上传时间:2023-02-21 格式:DOCX 页数:49 大小:641.03KB
下载 相关 举报
IAR.docx_第1页
第1页 / 共49页
IAR.docx_第2页
第2页 / 共49页
IAR.docx_第3页
第3页 / 共49页
IAR.docx_第4页
第4页 / 共49页
IAR.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

IAR.docx

《IAR.docx》由会员分享,可在线阅读,更多相关《IAR.docx(49页珍藏版)》请在冰豆网上搜索。

IAR.docx

IAR

文档信息

BasicRFTestingofCCxxxxDevices.pdf

物理特性演示

CC253x4xUserGuide.(Rev.C).pdf

数据手册

CC2530DevelopmentKitUserGuide.pdf

器件连接,驱动安装,代码演示,和电路图

CC2530SoftwareExamples.pdf

如何创建工程,下载程序,和DEMO讲解

cc2530_Data_Manual.pdf

数据手册

CC2530DKQuickStartGuide.pdf

熟悉产品的组装和操作显示

CC2530ZDKDevelopmentKitUserGuide.pdf

软件包用户向导

CC2530ZDKQuickStartGuide.pdf

和CC2530DKQuickStartGuide.pdf有点类似

IARIDEUserManual.pdf

简单的创建工程和简单的DEBUG,有些数据存储原理

linux-stm3220g-eval-bspg-1.3.1.pdf

SmartRF05EvaluationBoardUserGuide.pdf

安装驱动和2531连接,电路原理图,比较详细

SmartRFFlashProgrammerUserManual.pdf

很详细的介绍创建工程

SmartRFStudioSoftwareManifest.pdf

软件清单说明

SmartRF_Studio_7_Overview.pdf

Studio的使用和原理

SmartRF_Studio_7_Tutorial.pdf

详细的SmartRF_Studio_7_Overview.pdf

swra290.pdf

MAC层介绍

swra308a.pdf

电路原理和数据

UsingUARTinCC2530.pdf

串口的使用和原理

ZigBeeSensorMonitor.pdf

Sensor的使用

ZigBee_Sensor_Monitor_User_Guide.pdf

Sensor的安装

软件包信息

swrc044p.zip

烧写软件包

swrc045v.zip

Sniffer软件包

swrc096e.zip

Sensor组网调试软件包

swrc126g.zip

Zstack软件包

swrc135b.zip

驱动层的RF演示代码

swrc147c.zip

Sonser组网演示代码

swrc155b.zip

MAC

swrc176n.zip

Studio演示调试软件

 

组装设备

将P8调到ON,

跳线P11为USB/DC

跳线P13

跳线P15

P14调到Disable

P19调到SOC/TRX

用USB线连接CC2530和PC,

测试工具的使用

1smartRFstudio7

在将2个CC2530EB连接到PC后,

 

备注

Sensordemo必须放到C:

\TexasInstruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\SensorDemo\CC2530DB才可以运行

 

IAR使用

IAR安装:

首先查看系统中是否安装了IAR,如果有,请在WINDOWS的程序管理中将其卸载,

首先下载软件包,IAR有对不同的设备提供不同的软件包,这里需要的是8051的编译器,安装没说明好说的,windows安装软件都是傻瓜式的一路下一步,最后就是注册,如果不注册有代码长度的限制,

这里使用的是IARFOR8051V7.60.1网上有对应的注册机

编译DEMO代码:

打开swrc135b/ide/cc2530_sw_example.eww

右键项目,option,linker,config标签下,overridedefault浏览你的C:

\ProgramFiles\IARSystems\EmbeddedWorkbench6.0\8051\config\devices\TexasInstrume\lnk51ew_cc2530F256.xcl选中你的版型,

右键项目,option,linker,ExtraOutput,Overridedefault,写入你的生成HEX文件名

右键项目,rebuildall,在你的该项目下会生成HEX文件

下载程序

打开FLASHPROGRAMMER,选中programCCxxxxSoCorMSP430,

在System-on-Chip标签下会有当前连接到PC的所有板子,

在Flashimage选中你的HEX文件,

Actions选中Erase,programandverify

点击performactions

程序就开始烧写到板子上

 

自己创建工程:

1,打开IAR

2,Project,CreateNewProject,选择你的编译工具链--Toolchain,这里只有8051,

3,选中Emptyproject,点OK,这是叫你选择保存的工程名和路径,

4,右键工程,选option,

选GeneralOptions,

在Target标签下,

Device我们选择我们的芯片类型CC2530F256,

CPUCORE就选择Plain

Codemodel,Near意思是不需要BANK支持,只需要64Kb的Flash内存,CC253XF32和CC253XF64必须选这个,但是CC253XF128和CC253XF256也可以选这个选项,如果想访问CC253XF128和CC253XF256的所有FLASH就要选择BANKED,

选择Datamodel为Large,这里是告诉编译器如何使用8051的内存存储变量,small---DATAmemoryspace,large---XDATA,访问DATA的速度快,但是容量内有XDATA大,

Numberofvirtual设置8,是否有额外的堆栈,设置没有,Callingconvention选择XDATAstackreentrant,选择RAMmemory

堆栈:

选择donotuseexternedstacks

Callingconvention:

xdatastackreentrant

Locationforconstantsandstr选RAM

在datapointer标签下

Numberofdptrs选1

Pageregisteraddr写0xa0

在codebank标签下

如果选择了banked的代码模式,需要增加一些设置,

numberofbanks:

0x07(CC2530设置7个codebank访问256KBFLASH,也适用于128KB),

registeraddress:

0x9f(CC2530FMAP寄存器,控制CODEBANK在8051中的地址映射,低3位代表bank数),

registermask:

0xff,

bankstart:

0x8000,

bankend:

0xffff

在output标签下

Outputfile选executable我们要的是执行文件,如果要链接库就选library

Outputdir的3个分别是执行文件,中间目标文件,编译MAP文件的存放路径

在libraryconfiguration标签下,

选择你的编译库,一般不会动去,选clib就好了

在libraryoption标签下

设置输出格式和输入格式

在stack/heap标签下

设置堆栈大小

选C/C++compiler

选中Mutilfilecompliation和discardunusedpublics10,

在language标签下

选择编译语言和编译格式等

在code标签下

不知道做什么的

在optimizations标签下

选择HIGH-SIZE,去掉codemotion

在output标签下

选中generatedebuginformat

在list标签下

不知道干什么的

在preprocessor标签下

Additioalincludedirectories加入你的文件搜索路径:

$PROJ_DIR$/../../../source/Components/utils

Preinclude:

预加载文件

definedsymbols:

预加载符号

比如chip=2530表示定义了个宏chip,值等于2530

在diagnostics标签下

不知道干什么的

在extraoptions标签下

不知道干什么的

选Assembler:

汇编的东西

选custombuild:

选buildactions:

选linker

在config标签下,

打开overridedefault

选择你的芯片类型

打开overridedefaultprogram

选中defaultbyapplicat

在output标签下

设置你的输出文件,如果选中了allowc-spy-specificextraoutputfile,extraoutput就可输入了

在extraoutput标签下

选中Gererateexternoutputfile

选中overridedefault,

输入你的HEX文件名,

outputformat:

选择intel-extended,

formatvariant选择NONE,

在list标签下

不知道

在extraoptions标签下

勾选usecommandlineoptions

输入-C$PROJ_DIR$\EndDevice-Pro.lib

调试:

F5快速运行,

F10,跳过运行

F11,单步运行

 

ZStack的SampleApp--DemoEB需要修改下TOOLS下的F8W2530.XCL,这个的-M(CODE)[(_CODEBANK_START+_FIRST_BANK_ADDR)-(_CODEBANK_END+_FIRST_BANK_ADDR)]*\

_NR_OF_BANKS+_FIRST_BANK_ADDR=0x8000

注释去掉,这样就可以使用BANK空间了

 

Light_switch-srf05_cc2530代码注释

首先找到入口main:

application下的light_switch.c里的

main

uint8appMode=NONE;//保存运行的事发送端还是接收端

basicRfConfig是一个配置结构体,配合他的协议层需要

Myaddr是

Panid是一个建网的标识

Channel是选用的频率频道

ackRequse是否需要回应

Halboardinit主板初始化时钟,LED,按钮,摇杆,LCD和总中断

halJoystickInit摇杆初始化,和Halboardinit有重复

halRfInit射频初始化:

需要应答和CRC校验,设置寄存器,开启中断(硬件层的操作)

halLedSet

(1);LED1亮

utilPrintLogo("LightSwitch");通过halLcdWriteLine输出

while(halButtonPushed()!

=HAL_BUTTON_1);等待按钮按下

halMcuWaitMs(350);通过nop操作等待350MS

halLcdClear();清空LCD

appMode=appSelectMode();摇杆选择后获取用户选择的模式

appSwitch

pTxData[0]=LIGHT_TOGGLE_CMD;给发送缓冲区赋值

basicRfConfig.myAddr=SWITCH_ADDR;赋值自己的地址

basicRfInit(&basicRfConfig)初始化RF,这里主要是协议层设置,并设置回调函数,并设置频道频率

basicRfReceiveOff();关闭接受

halJoystickPushed()等待摇杆

basicRfSendPacket(LIGHT_ADDR,pTxData,APP_PAYLOAD_LENGTH);发送数据,LIGHT_ADDR对方地址,pTxData数据地址,APP_PAYLOAD_LENGTH数据长度

halMcuSetLowPowerMode(HAL_MCU_LPM_3);睡眠模式3在中断的时候会醒来

applight

while(!

basicRfPacketIsReady());等待完整的数据包到来

basicRfReceive(pRxData,APP_PAYLOAD_LENGTH,NULL)取出字符串到pRxData中,最大取APP_PAYLOAD_LENGTH字节,NULL是返回信号强度,(这里为什么可以用NULL不会出错)

halRfRxInterruptConfig

设置中断回调处理函数,这里就pfISR=pf;然后我去查找pfISR,发现pfISR在一个HAL_ISR_FUNCTION函数中被执行

查找HAL_ISR_FUNCTION被调用的地方,发现HAL_ISR_FUNCTION没有被调用的地方,他是一个宏

#defineHAL_ISR_FUNCTION(f,v)\

HAL_ISR_FUNC_PROTOTYPE(f,v);HAL_ISR_FUNC_DECLARATION(f,v)

这2个也是宏

#defineHAL_ISR_FUNC_DECLARATION(f,v)\

_PRAGMA(vector=v)__near_func__interruptvoidf(void)

#defineHAL_ISR_FUNC_PROTOTYPE(f,v)\

_PRAGMA(vector=v)__near_func__interruptvoidf(void)

网上查找,说这个是中断必须按他的格式写,

仔细思考了下,就是一个申明,一个实现

V是中断号,f是函数名,所以不想一般的宏定义,f和v都不在函数中出现,

在整个DEMO中就接受中断和PORT0~PORT2中断处理函数

basicRfRxFrmDoneIsr

接收中断处理函数

pHdr=(basicRfPktHdr_t*)rxMpdu;缓冲区结构化

halRfDisableRxInterrupt();不允许接受中断嵌套

halIntOn();允许其他中断嵌套(在进来前是开着总中断的,不然怎么进来)

halRfReadRxBuf(&pHdr->packetLength,1);读取第1个字节,代表长度

pHdr->packetLength&=BASIC_RF_PLD_LEN_MASK;忽略高字节,因为FIFO位128字节

if(pHdr->packetLength==BASIC_RF_ACK_PACKET_SIZE)如果是5个字节的长度就是应答包

rxi.length=pHdr->packetLength-BASIC_RF_PACKET_OVERHEAD_SIZE;用户层数据长度要扣掉包头9个字节和后面2个字节的CRC

halRfReadRxBuf(&rxMpdu[1],pHdr->packetLength);读取包头+包体

rxi.ackRequest=!

!

(pHdr->fcf0&BASIC_RF_FCF_ACK_BM_L);判断是否需要回复

rxi.pPayload=rxMpdu+BASIC_RF_HDR_SIZE;指向payload层

rxi.rssi=pStatusWord[0];获取信号强度

if((pStatusWord[1]&BASIC_RF_CRC_OK_BM)&&(rxi.seqNumber!

=pHdr->seqNumber))如果CRC校验对,并且序列号对

if(((pHdr->fcf0&(BASIC_RF_FCF_BM_L))==BASIC_RF_FCF_NOACK_L))不需要回复

halIntOff();关闭总中断源(这里不理解,这样怎么发生中断)

halRfEnableRxInterrupt();重新开启RF接受中断

 

Per_test代码注释

Hal_timer_32k.c

//初始化

通过CLKCONCMD.TICKSPD获取定时器最大频率

设置预分频T1CTL.DIV,T1CTL.MODE=00,暂停计数,1-free,2-re3-up

T1CCTL{0-4}.MODE=0采集,=1比较

T1CCTL{0-4}.CMP和CAP设置

TIMIF.OVFIM=1;T1CCTL{0-4}.IM=1

IEN1.T1IE=1;

IEN0.EA=1;

//开始

T1CC0H:

T1CC0L设置溢出值

T1CNTL=任何数,置0X0000

T1CTL.MODE设置

//中断中

T1STAT.OVFIF=0,T1STAT.CH4IF=0//清除

IRCON.T1IF=0;

通过T1CNTH:

T1CNTL读取

//关闭

T1CTL.MODE=00

TIMIF.OVFIM=0;T1CCTL{0-4}.IM=0

IEN1.T1IE=0;

IEN0.EA=0;

在测试RF的性能时可以使用输入比较来获取时间

 

数据手册

2.2memory

Code:

只读空间,64KB

Data:

可读写空间,1个周期访问,256B,前128B可直接访问,后128B间接访问

Xdata:

可读写空间,4-5个周期访问,64KB

Sfr:

可读写空间,1个周期访问,128B

 

2.2.3

 

 

2.4

 

2.5

CPU有18个中断源

其中RFERR中断是缓冲区越界了,

中断掩码寄存器

IEN0(0XA8)

7:

EA:

中断总开关

6:

RES:

始终0

5:

STIE:

睡眠定时器掩码

4:

ENCIE:

AES加密/解密掩码

3:

URX1IE:

USART1接收掩码

2:

URX0IE:

USART0接收掩码

1:

ADCIE:

ADC掩码

0:

RFERRIE:

RF错误掩码

IEN1(0xB8)

7:

RES:

0

6:

RES:

0

5:

P0IE:

PORT0掩码

4:

T4IE:

定时器4掩码

3:

T4IE:

定时器3掩码

2:

T4IE:

定时器2掩码

1:

T4IE:

定时器1掩码

0:

DMAIE:

DMA掩码

IEN2(0x9A)

7:

RES:

0

6:

RSE:

0

5:

WDTIE:

看门狗掩码

4:

P1IE:

PORT1掩码

3:

UTX1IE:

USART1发送掩码

2:

UTX0IE:

USART0发送掩码

1:

P2IE:

USB掩码

0:

RFIE:

RF掩码

在一个中断发生的时候,我们也许不知道到底什么事情发生了,比如rf中断发生了,那是发送完成了呢,还是接受完成了,我们还需要一个标志位

TCON(0x88)

7:

URX1IF:

USART1接受中断

6:

RES:

0

5:

ADCIF:

 ADC中断

4:

RES:

 0

3:

URX0IF:

USART0接受中断

2:

IT1:

总设置1

1:

RFERRIF:

RFERR中断发生

0:

IT0:

总设置1

S0CON(0X98)

7:

RES:

0

6:

RES:

0

5:

RES:

0

4:

RES:

0

3:

RES:

0

2:

RES:

0

1:

ENCIF_1:

AES中断发生

0:

ENCIF_0:

AES中断发生

S1CON(0X9B)

7:

RES:

0

6:

RES:

0

5:

RES:

0

4:

RES:

0

3:

RES:

0

2:

RES:

0

1:

RFIF_1:

RF中断发生

0:

RFIF_0:

RF中断发生

IRCON(0XC0)

7:

STIF:

睡眠时钟

6:

RES:

0

5:

P0IF:

PORT0中断发生

4:

T4IF:

定时器4中断发生

3:

T4IF:

定时器3中断发生

2:

T4IF:

定时器2中断发生

1:

T4IF:

定时器1中断发生

0:

DMAIF:

DMA中断发生

IRCON2(0XE8)

7:

 RES:

0

6:

 RES:

0

5:

 RES:

0

4:

WDTIF:

看门狗

3:

P1IF:

PORT1

2:

UTX1IF:

USART1

1:

UTX0IF:

USART0

0:

P2IF:

PORT2

 

4电源管理和时钟频率

4.4设备有一个内部的系统时钟或者叫做主时钟,这个时钟源可以为系统提供16MHZ或32MHZ,时钟频率是由CLKCONCMD设置

还有一个32KHZ的时钟源,同样也是由CLKCONCMD设置,

CLKCONSTA是一个只读寄存器,可以获取当前时钟状态

时钟允许选择高频率的晶体振荡器或者低频率的RC振荡器,但是RF要求使用32MHZ的晶体振荡器

系统时钟是由CLKCONCMD.OSC设置,CLKCONCMD被设置的时候不会马上生效,需要等到CLKCONSTA.OSC=CLKCONCMD.OSC这是因为在频率变化的时候,需要一段时间等待频率稳定,同时,CLKCONCMD.CLKSPD反应了系统时钟频率,所以也是CLKCONCMD.OSC的镜子

16MHZ是校准的,一旦32MHZ已经稳定了,比如CLKCONSTA.OSC从1变成0

CLKCONCMD(0XC6)

BIT7:

OSC32K:

0:

32KHZXOSC

1:

32KHZRCOSC

BIT6:

OSC:

0:

32MHZXOSC

1:

16MHZRCOSC

BIT5:

3:

TICKSPD:

000:

32MHZ

001:

16MHZ

010:

8MHZ

011:

4MHZ

100:

2MHZ

101:

1MHZ

110:

500KHZ

111:

250KHZ

BIT2:

0:

CLKSPD:

同上

CLKCONSTA(0X9E),同上,

 

6FLASH控制器

6.1FLASH结构

FLASH存储器被分为2048B或者1024B每页,页是最小的擦除单元,32bit是最小的写入单元,

在写模式下,FLASH存储器通过写入是一个16bit的字地址寄存器FADDRH:

FADDRL访问

在擦除模式下,FLASH会擦除FADDRH[7:

1](CC2530/CC2531/CC2540/CC2541)或者FADDRH[6:

0](CC2533)的地址,所以这里就可以看出,前者是2K/页。

后者是1K/页,一个地址4个字节

6.2FLASH写操作

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1