ZigBee模块通信实现(电路介绍与程序分析)_第1页
ZigBee模块通信实现(电路介绍与程序分析)_第2页
ZigBee模块通信实现(电路介绍与程序分析)_第3页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、ZigBee模块通信实现(电路介绍与程序分析)产品名:ZigBee模块型号:ZICM2410 P0-2参数:* 103db链路预算;*接收灵敏度:-97dbm 1.5V* 发送功率:+6dbm1.5V* 3000英尺无障碍传输距离*最低睡眠电流:1 I A*工作电压:2.13.3V*接收电流:35mA*发送电流:44mA* 速率:ZigBee (250 kbps) 、Turbo(500 kbps)、Premium (1 Mbps)* 接口类型:SPI(主从)、UART(2 路)、I2S/PCM支持语音传送:语音编解码器支持 u律、a律、ADPCM16条射频通道传送范围:3000英尺 =914.

2、4米支持AES128位加密ZICM2410支持的数据通信接口:UART0UART1(1M) I2S、SPI(2M)、GPIO AD ( 4 路)、IIS描述:Zigbee网络基于国际标准、上层协议为 ZigBee协议栈,具有低功耗,低速率,高可靠性,网络路由功能强大,自恢复及冗余性能优异等特点,广泛应用低 数据率监控的各个领域。ZigBee物理连接:ZigBee模块是通过串口的形式与微处理器通讯,在LPC11C14开发板这里是通过 SC16IS752IPW芯片转成SPI协议与微处理器通讯。ZigBee 模块(ZICM2410 PO-2) <串口 > SC16IS752IPW 芯片

3、<SPI> LC11C14(ARM MC内核)fisosiMZICM2410PO-1:L弭纹字殴输人辎出RESETKPGPIORI串口0厚口丄5PI侵口外部中新US音域输入輸出接LPC11C14引脚t2fC2-D SSEL1)> (2f02J. M0SH 说尸oz附IS01色(2pQ2jSCK1/-SSFMMosn'1 -"ESHKT3I血 RgilRO冬叱“曲 nft£5ETnRFSFT :V3 JTR6C 33KLiuSC 临 STSmiPW5-a10IT一 12KfIRQ3CTM1XTAL2VODVDDC«0.1 lTVSSTXA

4、iHKA5TJ®接Eig琢環块C1SSgpiojjagipicinS 3rr<.FT7A lpimi曲Afete :_:LJEDSGPIQ3/R E. 田口占日 GP101.DTRS GF*K)而評i*ra从原理图可以看出,ZigBee模块的RXDTX接在了 SC16IS752IPW芯片的RXBTXE上,而该芯片的 CSSISOSCLK 接在 LPC11C14的 PI02_0PI02_1PI02_2PI02_3PI03_3 上LPC11CL4 引脚PIO2_0/DTR/SSEL1PIO2 1/DSR/SCK1PIO2_2/DCD/MISO1PIO2 3/RI/MOSI12SSE

5、L113SCK1,26MIS0138MOSI1SSEL1少 SCK1/ MISO1 *>> mosh说明LPC11C14fc控芯片是通过 SPI间接与ZigBee模块通讯,所以我们只需要关注 SC16IS752IPW芯片即可, 往该芯片发送数据,ZigBee自然也能收到数据。数据流向:应用程序<-读写寄存器-> M0的SPI控制器 v-SPI-> SC16IS752IPWV-串口 -> ZigBee模块程序流程:1、初始化 LPC11C14的 SSP1 的 GPI0引脚,即 PIO2_0PIO2_1PIO2_2PIO2_3/*初始化响应PIO引脚ssp.c

6、*/* argl : SSPI0 或 SSPI1 */void SPI_IOConfig(uint8_t portNum)if(portNum = 0)/*此处为通道0的代码未贴岀*/else/* port number 1 */ /主要设置SSP1使之能与SC16IS752IPW通信间接与ZigBee通信LPC_SYSCON->PRESETCTRL= (0x1<<2);/ bit2=1 SSP1复位取消 bit2=0 复位 SSP1LPC_SYSCON->SYSAHBCLKCTRL |= (1<<18);/ 使能 SSP1 的时钟设置 SSP1 时钟分频

7、48Mhz/2=24Mhz*/LPC_SYSCON->SSP1CLKDIV = 0x02;/* Divided by 2LPC IOCON->PIO2 2&=0x07;/*SSP I/O config */LPC IOCON->PIO2 2|= 0x02;/* SSP MISO将PIO2 2设置为SSP MISO模式*/LPC IOCON->PIO2 3&= 0x07;LPC IOCON->PIO2 3|= 0x02;/* SSP MOSI将PIO2 3设置为SSP MOSI模式*/LPC IOCON->PIO2 1&=0x07;LP

8、C IOCON->PIO2 1|= 0x02;/* SSP CLK将PIO2 1设置为SSP时钟*/* Enable AHB clock to the GPIO domain. */LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); 使能 GPIO时钟 使之产生时钟LPCOCON->PIO2_0 &=0x07;/* SSP SSEL is a GPIO pin 设置 PIO2_0 作为普通 IO 管脚功能 */* port2, bit 0 is set to GPIO output and high */GPIOSetValue( P

9、ORT2, 0, 1 );/输出高电平暂时不使能该器件是片选引脚2、初始化SSP1寄存器ssp.c/* argl : SSPI0或 SSPI1 arg2 :传送位数arg3 :时钟分配 */void SPI_lnit(uint8_t portNum, uint8_t Bit, uint8_t EvenDiv)uint8_ti, Dummy=Dummy;if(portNum = 0)/*此处为通道0的代码未贴岀*/elseLPC_SSP1->CR0 = 0x0700 | (Bit-1); / (Bit-1)=0b0111 8位传输 串行时钟速率、总线类型、数据长度LPC_SSP1->

10、CPSR = EvenDiv; / 时钟预分频寄存器 设置为 2 分频-> 48Mhz/2=24Mhzfor ( i = 0; i < SSP_FIFOSIZE; i+ )Dummy = LPC_SSP1->DR;/* clear the RxFIFO数据寄存器,读空则接受 FIFO 写满则发送 FIFO */NVIC_EnablelRQ( SSP1RQn );/使能中断LPC_SSP1->CR1 = SSPCR1_SSE/ SSP1以正常模式与串行总线上的其它设备相互通信。LPC_SSP1->IMSC = SSPIMSC_RORIM | SSPIMSC_RTIM

11、; /中断触发条件:接受上溢接受超时触发中断3、SSP1 读写 SC16IS752IPW 芯片3.0 : SC16IS752IPW 时序图写寄存器时序图:数据格式:表34寄存器地址宇节(SPI>位名称功能7R/W1 从UART读0二写入UART6:3A3:0LART的内部寄疗器选择2:1CHLCHO適道建择。00=通道A01通逍B10=保国11 =保留-不他用3.1 : SSP1读写寄存器/*操作*/* argl : SSPI0 或 SSPI1 arg2 :数据 */uint16_t SPI_PutGet(uint8_t portNum, uint16_t SendData)if(por

12、tNum = 0)/*此处为通道0的代码未贴岀*/else/* Move on only if NOT busy and TX FIFO not full. */ SSP1控制器不忙 发送FIFO未满、发送FIFO不为空 就跳出循环while(LPC_SSP1->SR & (SSPSR_TNF|SSPSR_BSY) != SSPSR_TNF);LPC_SSP1->DR = SendData;/ 写入数据/* Wait until the Busy bit is cleared. */while(LPC_SSP1->SR & SSPSR_BSY); / 等待总线

13、不忙/* Wait until the Busy bit is cleared */等到接受FIFO不为空后跳岀循环while(LPC_SSP1->SR & (SSPSR_BSY|SSPSR_RNE) != SSPSR_RNE);return LPC_SSP1->DR;/ 将数据读出3.2 :写寄存器时序流程(主要涉及SCLK、MIOS1、片选选中 SC16IS752IPW2、往SPI数据寄存器写数据2.1 MIOS 写 SC16IS752IPW THR 寄存器地址写位(1bit) + SC16IS752IPW THR寄存器地址(4bit) +通道选择(2bit) + X2

14、.2写8位数据3、取消片选/*往指定的SC16IS752IPW寄存器中写数据*/* argl : SSPI0 或 SSPI1 arg2 : SC16IS752IPW 寄存器arg3 :写入的数据 */void SPI752_RegWrite(uint8_t Channel, uint8_t Reg, uint8_t Data)SPI_UART_CS(O); 片选选中 SC16IS752IPWSPI_PutGet(1, SPI752_WRITE | (Reg<<3) | (Channel<<1);/写寄存器SPI_PutGet(1, Data);/ 写数据SPI_UART

15、_CS(1); 取消片选3.3 :读寄存器时序(主要涉及SCLK、MIOS MOIS1、片选选中 SC16IS752IPW2、往SPI数据寄存器写数据2.1 MIOS 写 SC16IS752IPW RHR 寄存器地址读位(1bit) + SC16IS752IPWRHR寄存器地址(4bit) +通道选择(2bit) + X2.2 MOSI读出8位数据3、取消片选/*读数据*/* argl : SSPI0或 SSPI1 arg2 : SC16IS752IPW 寄存器 */uint8_t SPI752_RegRead(uint8_t Channel, uint8_t Reg)uint8_trd;SP

16、I_UART_CS(O); 片选选中 SC16IS752IPWSPI_PutGet(1, SPI752_READ | (Reg<<3) | (Channel<<1);/ 写寄存器地址rd = SPI_PutGet(1,0);/取出数据SPI_UART_CS(1); 取消片选return rd;4、通过 SSP1 初始化 SC16IS752IPW完成SSP1初始化后,就能通过 SSP1与SC16IS752IPW通讯,从而初始化该芯片* Function Name : SPI752_lnit* Description : Set channel 0 & 1 baud

17、 rate. The range is 300-230400 Baud.* The crystal input frequency is 14745600H z.* The default value of prescaler after reset is divide-by-1.* The format is:8N1* Input: - Channel : 0 & 1.* - Baud : 300-230400 Baud.* Output: None* Return: None* file: ssp.c*/* arg1 : SSPI0 或 SSPI1 arg2 :波特率 */void

18、 SPI752_lnit(uint8_t Channel, uint32_t Baud)uint16_trd;/ Disable sleep/ 设置数据通信的格式1 0 1 1 1 1 11奇葩的设置。/除数锁存使能 没有TX间隔条件 奇偶位强制为0偶数格式 奇偶位1个停止位8位SPI752_RegWrite(Channel, SPI752_LCR_RW, 0xBF);/使能增强型功能rd = SPI752_RegRead(Channel, SPI752_EFR_RW);SPI752_RegWrite(Channel, SPI752_EFR_RW, rd | 0x10);/设置通信格式为8位数

19、据传送奇葩的设置SPI752_RegWrite(Channel, SPI752_LCR_RW, 0x03);/使能RHR THR中断、使能接收器线状态中断、使能modem!犬态寄存器中断rd = SPI752_RegRead(Channel, SPI752_IER_RW);SPI752_RegWrite(Channel, SPI752_IER_RW, rd & (0x10);奇葩why?/ DTR、RTS输出有效、TCRTLR使能、使能局部环回模式、使能Xon Any功能1分频rd = SPI752_RegRead(Channel, SPI752_MCR_RW);SPI752_RegW

20、rite(Channel, SPI752_MCR_RW, rd & (0x80);/ Set baud rate & 8N1 format/设置为8位除数所存使能估计为设置波特率准备SPI752_RegWrite(Channel, SPI752_LCR_RW, 0x83);/设置波特率rd = (14745600/16)/ Baud;SPI752_RegWrite(Channel, SPI752_DLL_RW, rd); /写入除数最低字节SPI752_RegWrite(Channel, SPI752_DLH_RW, rd>>8);/ 写入除数最高字节/ 8 位又来

21、设置通讯格式。奇葩。SPI752_RegWrite(Channel, SPI752_LCR_RW, 0x03);SPI752_RegRead(Channel, SPI752_RHR_R);/ use port3_3 as input event, ZigBee interrupt./设置为输入模式GPI0SetDir(P0RT3, 3, 0);/ port3_3 interrupt. edge, single trigger, falling edges./设置为中断功能GPIOSetlnterrupt(PORT3, 3, 0, 0, 0);/使能该中断 当Zig有数据接受时,该中断被触发GP

22、IOIntEnable(PORT3, 3);/ Set SPI752 RXDx interrupt Enable./rd = SPI752_RegRead(1, SPI752_IER_RW);SPI752_RegWrite(Channel, SPI752_IER_RW, rd | 0x01);/ 使能RHF中断又设置了一次 RHR中断 还能再奇葩点吗?SPI752_RegWrite(Channel, SPI752_IER_RW, 0x01);/ 读取中断Why?SPI752_RegRead(Channel, SPI752_RHR_R);5、发送1字节数据(实现了发送1字节就可以发送多字节数据了

23、)/*操作 M0的SPI控制器*/* arg1 : SSPI0 或 SSPI1 arg2 :数据 */uint16_t SPI_PutGet(uint8_t portNum, uint16_t SendData)if(portNum = 0)/* 此处为通道0的代码未贴岀*/else/* Move on only if NOT busy and TX FIFO not full. */ SSP1控制器不忙 发送FIFO未满、发送FIFO不为空 就跳出循环while(LPC_SSP1->SR & (SSPSR_TNF|SSPSR_BSY) != SSPSR_TNF);LPC_SSP

24、1->DR = SendData;/ 写入数据/* Wait until the Busy bit is cleared. */while(LPC_SSP1->SR & SSPSR_BSY); / 等待总线不忙/* Wait until the Busy bit is cleared */等到接受FIFO不为空后跳岀循环while(LPC_SSP1->SR & (SSPSR_BSY|SSPSR_RNE) != SSPSR_RNE); return LPC_SSP1->DR;* Function Name : SPI752_PutChar* Descrip

25、tion : Use SPI572 channel 0 & 1 send a byte.* Input: - Channel : 0 & 1.* - Ch : 8bit data.* Output: None:None* Return* file:spi_uart.c*/* argl : SSPIO 或 SSPI1 arg2 : 8 位数据 */void SPI752_PutChar(uint8_t Channel, uint8_t Ch)/等待发送保存寄存器为空while(!(SPI752_RegRead(Channel, SPI752_LSR_R)&0x20);/往发送保存寄存器写入数据SPI752_RegWrite(Channel, SPI752_THR_W, Ch);6、接受数据需要借助中断6.1 :中断读取、保存数据/*当PIO3组引脚产生中断时此中断函数被执行gpio.c */void PIOINT3_IRQHandler(void)/*此处为其他引脚需要的代码 未贴岀*/判断是不是POR

温馨提示

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

评论

0/150

提交评论