CC2430学习之一点对点通信.doc

上传人:laozhun 文档编号:4140845 上传时间:2023-04-07 格式:DOC 页数:18 大小:56KB
返回 下载 相关 举报
CC2430学习之一点对点通信.doc_第1页
第1页 / 共18页
CC2430学习之一点对点通信.doc_第2页
第2页 / 共18页
CC2430学习之一点对点通信.doc_第3页
第3页 / 共18页
CC2430学习之一点对点通信.doc_第4页
第4页 / 共18页
CC2430学习之一点对点通信.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《CC2430学习之一点对点通信.doc》由会员分享,可在线阅读,更多相关《CC2430学习之一点对点通信.doc(18页珍藏版)》请在三一办公上搜索。

1、CC2430学习之一_点对点通信2010.04.21void main(void) SET_MAIN_CLOCK_SOURCE(CRYSTAL); RFPWR = 0x04; while(RFPWR & 0x10); initUART(); /初始化串口 IO_DIR_PORT_PIN(0,5,IO_OUT); /Set P0_5 to output IO_DIR_PORT_PIN(1,3,IO_OUT); / IO_DIR_PORT_PIN(1,2,IO_IN); /Set P1_2 to input P0_5 = 1; P1_3 = 0; rf_test_main();/进入无线部分/选择

2、相应的应用#ifdef COMPLETE_APPLICATIONvoid rf_test_main(void)#elsevoid main(void)#endif INT_GLOBAL_ENABLE(INT_ON); / Global interrupt enables #ifdef RX myAddr = ADDRESS_0; remoteAddr = ADDRESS_1; initRfTest(); receiveMode(); #else / TX时 myAddr = ADDRESS_1; remoteAddr = ADDRESS_0; initRfTest(); contionuous

3、Mode(); /发送数据 #endif/发送子函数void contionuousMode(void) BOOL res; BYTE sendBuffer = Hello; /要发送的数据 while(1) GLED = LED_OFF; /绿灯灭 YLED = LED_ON; /发送前,黄灯亮 /TRUE if the sent packet is acked by the recipient and false otherwise. res = radioSend(sendBuffer, sizeof(sendBuffer), remoteAddr, DO_NOT_ACK ); halW

4、ait(200); YLED = LED_OFF; /发送后,黄灯灭 halWait(200); if(res = TRUE) /发送成功 GLED = LED_ON; /绿灯亮 halWait(200); else /发送不成功 GLED = LED_OFF; /绿灯灭 halWait(200); /接收子函数void receiveMode(void) BYTE* receiveBuffer; BYTE length; BYTE res; BYTE sender; while(1) YLED = LED_ON; /接收时黄灯亮 /TRUE if a packet has been rece

5、ived and FALSE if no packet /has been received within the timeout period. res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender); YLED = LED_OFF; /结束后黄灯灭 if(res = TRUE) /接收成功 GLED = LED_ON; /绿灯亮 halWait(200); /延迟200秒 else /接收失败 GLED = LED_OFF; /绿灯灭 halWait(200); /延迟200秒 GLED = LED_OFF

6、; /结束一次接收,绿灯灭 点对点通信(CC2430)参考小峰app_ex_main.c/*添加开串口中断函数和串口设置函数*/void UARTxISRopen(void)/开串口中断函数U0CSR |= 0x40; /receiver enable; 接收使能 IEN0 |= 0X04; /开串口接收中断 URX0IE = 1,void SET_UART0_ISR(void) /串口设置函数U0CSR |= 0xd0; /1101 0000;UART mode; receiver enable; Byte received /with incorrect stop bit level U0

7、UCR |= 0x02; /UART stop bit level: High stop bitvoid main(void)SET_MAIN_CLOCK_SOURCE(CRYSTAL);RFPWR = 0x04;while(RFPWR & 0x10);initUART();UARTxISRopen(); /#IEN0 |= 0x80; /#IO_DIR_PORT_PIN(0,0,IO_OUT);IO_DIR_PORT_PIN(0,5,IO_OUT);/IO_DIR_PORT_PIN(1,3,IO_OUT);/IO_DIR_PORT_PIN(1,2,IO_IN);P1SEL = 0x00; /

8、#P1DIR = 0xff; /#P0_5 = 1;P1_3 = 0;rf_test_main();rf_test.c/*添加串口发送函数*/*void txdata(BYTE* dat) /#串口发送函数:字符串,字符 格式while(*dat)U0DBUF=*dat+;while(!UTX0IF);UTX0IF=0;*/void txdata_1(BYTE dat) /#串口发送函数:单个字符U0DBUF = dat;while (!UTX0IF);UTX0IF = 0;void UartTX_Send_String(BYTE *Data,int len) /#串口发送函数:字符串int

9、j;for(j=0;jlen;j+)U0DBUF = *Data+;while(UTX0IF = 0);UTX0IF = 0;/* fn rf_test_main* brief* Main function.* Parameters:* param void* return void*/#ifdef COMPLETE_APPLICATIONvoid rf_test_main(void)#elsevoid main(void)#endifINT_GLOBAL_ENABLE(INT_ON);#if defined (RX) /#预编译选项if /接收myAddr = ADDRESS_0;remot

10、eAddr = ADDRESS_1;initRfTest();receiveMode();#else /发射myAddr = ADDRESS_1;remoteAddr = ADDRESS_0;initRfTest();contionuousMode();#endif由以上函数指向接收和发送模式/* fn receiveMode* brief* Function for receiving data.* Parameters:* param void* return void*/void receiveMode(void)BYTE* receiveBuffer;BYTE length;BYTE

11、res;BYTE sender;while(1)YLED = LED_ON; /黄亮res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);YLED = LED_OFF; /黄灭/res = TRUE;/#个人添加if(res = TRUE)GLED = LED_ON; /红亮halWait(200);/txdata_1(x);UartTX_Send_String(receiveBuffer,length); /#把接收到的数据通过串口送PCtxdata_1(n); /#换行符elseGLED = LED_OF

12、F; /红灯原:OFFhalWait(200);GLED = LED_OFF; /红灯原:OFF/* fn contionuousMode* brief* Function for transferring packets until stopped by user.* Parameters:* param void* return void*/void contionuousMode(void)BOOL res;BYTE sendBuffer = hello! my name is sendoc;while(1)GLED = LED_OFF;YLED = LED_ON;res = radio

13、Send(sendBuffer, sizeof(sendBuffer), remoteAddr, DO_NOT_ACK );halWait(200);YLED = LED_OFF;halWait(200);if(res = TRUE)GLED = LED_ON;halWait(200);elseGLED = LED_OFF;halWait(200);/#最后添加串口接收中断函数#pragma vector = URX0_VECTOR_interrupt void URX0_ISR(void)unsigned uarttemp;uarttemp = U0DBUF; /串口调试软件发送的数据给ua

14、rttempuarU0DBUF = uarttemp; /把接收到的数据返送串口软件显示挂图:注:1。 workspace中原来有Debug和Release,添加TX和RX,其中RX添加预编译选项RX。详见条件编译选项的添加(workspace)2。 实验中消除原来的warning,详见IAR“WarningPe167”3。 发射板子多复位几下这个不好解释啊 ,里面定义了很多东西,比如协议栈各个层的程序。APP:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。HAL:硬件层目录,包含有与硬件相关的配置和驱

15、动及操作函数。MAC:MAC 层目录,包含了MAC 层的参数配置文件及其MAC 的LIB 库的函数接口文件。MT:实现通过串口可控各层,于各层进行直接交互。NWK:网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS 层库的函数接口OSAL:协议栈的操作系统。Profile:AF 层目录,包含AF 层处理函数文件。Security:安全层目录,安全层处理函数,比如加密函数等。Tools:工程配置目录,包括空间划分及ZStack 相关配置信息。ZDO:ZDO 目录。ZMac: MAC 层目录,包括MAC 层参数配置及MAC 层LIB 库函数回调处理函数。ZMain:主函数目录,包括入

16、口函数及硬件配置文件。Output:输出文件目录,这个EW8051 IDE 自动生成的。当然里面还有自己的通信程序,这得一步步自己慢慢的看。 App_Ex 应用程序 cul cul库 hal硬件抽象层 tool 工具 output 输出文件 2.6.1、射频初始化函数BOOL sppInit(UINT32 frequency, BYTE address)功能描述:初始化简单的数据包装协议Simple Packet Protocol (SPP),从 DMA 管理器申请两个 DMA 通道,用于分别从 Rx FIFO 和 Tx FIFO 传输数据。定时器4 管理器同样被设置,这个单元用于在数据包发送

17、后接收器在一定时间内没有返回应答时产生中断。无线部分配置为发送,工作在特定的频率,在发送时自动计算和插入和检查CRC 值。参数描述:UINT32 frequency:RF 的频率(kHz.);BYTE address:节点地址返回:配置成功返回 TRUE,失败返回FALSE2.6.2、发送数据包函数BYTE sppSend(SPP_TX_STRUCT* pPacketPointer)功能描述:发送length 字节的数据(最多122),标志,目的地址,源地址在Tx DMA 通道传送有效载荷到Tx FIFO 前插入,如果期望应当,设置相应的标志。参数:SPP_TX_STRUCT* pPacketPointer:发送数据包头指针返回:发送成功返回 TRUE,失败返回FALSE。2.6.3、接收数据void sppReceive(SPP_RX_STRUCT *pReceiveData)功能描述:这个函数使能接收 128 字节,包括头和尾。接收数据通过DMA 传输到pReceiveData。DMA 装备同时接收开启。接收数据将触发DMA,当所有的数据包接收并且移走,DMA 产生一个中断同时运行以前定义的函数rxCallBack。参数SPP_TX_STRUCT* pPacketPointer:接收数据包头指针返回:无说明书里面都有你自己看看吧!

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号