📄 cc1100_tx.lst
字号:
284 //输出:无
285 //功能描述:SPI写寄存器
286 //*****************************************************************************************
287 void halSpiWriteReg(INT8U addr, INT8U value)
288 {
289 1 CSN = 0;
290 1 while (GDO1);
291 1 SpiTxRxByte(addr); //写地址
292 1 SpiTxRxByte(value); //写入配置
293 1 CSN = 1;
294 1 }
295
296 //*****************************************************************************************
297 //函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
298 //输入:地址,写入缓冲区,写入个数
299 //输出:无
300 //功能描述:SPI连续写配置寄存器
301 //*****************************************************************************************
C51 COMPILER V7.50 CC1100_TX 11/26/2006 22:02:36 PAGE 6
302 void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
303 {
304 1 INT8U i, temp;
305 1 temp = addr | WRITE_BURST;
306 1 CSN = 0;
307 1 while (GDO1);
308 1 SpiTxRxByte(temp);
309 1 for (i = 0; i < count; i++)
310 1 {
311 2 SpiTxRxByte(buffer[i]);
312 2 }
313 1 CSN = 1;
314 1 }
315
316 //*****************************************************************************************
317 //函数名:void halSpiStrobe(INT8U strobe)
318 //输入:命令
319 //输出:无
320 //功能描述:SPI写命令
321 //*****************************************************************************************
322 void halSpiStrobe(INT8U strobe)
323 {
324 1 CSN = 0;
325 1 while (GDO1);
326 1 SpiTxRxByte(strobe); //写入命令
327 1 CSN = 1;
328 1 }
329
330
331
332
333
334 //*****************************************************************************************
335 //函数名:INT8U halSpiReadReg(INT8U addr)
336 //输入:地址
337 //输出:该寄存器的配置字
338 //功能描述:SPI读寄存器
339 //*****************************************************************************************
340 INT8U halSpiReadReg(INT8U addr)
341 {
342 1 INT8U temp, value;
343 1 temp = addr|READ_SINGLE;//读寄存器命令
344 1 CSN = 0;
345 1 while (GDO1);
346 1 SpiTxRxByte(temp);
347 1 value = SpiTxRxByte(0);
348 1 CSN = 1;
349 1 return value;
350 1 }
351
352
353 //*****************************************************************************************
354 //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
355 //输入:地址,读出数据后暂存的缓冲区,读出配置个数
356 //输出:无
357 //功能描述:SPI连续写配置寄存器
358 //*****************************************************************************************
359 void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
360 {
361 1 INT8U i,temp;
362 1 temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令
363 1 CSN = 0;
C51 COMPILER V7.50 CC1100_TX 11/26/2006 22:02:36 PAGE 7
364 1 while (GDO1);
365 1 SpiTxRxByte(temp);
366 1 for (i = 0; i < count; i++)
367 1 {
368 2 buffer[i] = SpiTxRxByte(0);
369 2 }
370 1 CSN = 1;
371 1 }
372
373
374 //*****************************************************************************************
375 //函数名:INT8U halSpiReadReg(INT8U addr)
376 //输入:地址
377 //输出:该状态寄存器当前值
378 //功能描述:SPI读状态寄存器
379 //*****************************************************************************************
380 INT8U halSpiReadStatus(INT8U addr)
381 {
382 1 INT8U value,temp;
383 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
384 1 CSN = 0;
385 1 while (GDO1);
386 1 SpiTxRxByte(temp);
387 1 value = SpiTxRxByte(0);
388 1 CSN = 1;
389 1 return value;
390 1 }
391
392
393 //*****************************************************************************************
394 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
395 //输入:无
396 //输出:无
397 //功能描述:配置CC1100的寄存器
398 //*****************************************************************************************
399 void halRfWriteRfSettings(void)
400 {
401 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
402 1 // Write register settings
403 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
404 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
405 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
406 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
407 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
408 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
409 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
410 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
411 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
412 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
413 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
414 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
415 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
416 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
417 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
418 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
419 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
420 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
421 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
422 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
423 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
424 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
425 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
C51 COMPILER V7.50 CC1100_TX 11/26/2006 22:02:36 PAGE 8
426 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
427 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
428 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
429 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
430 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
431 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
432 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
433 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
434 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
435 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
436 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
437 1 }
438
439
440
441
442
443
444 //*****************************************************************************************
445 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
446 //输入:发送的缓冲区,发送数据个数
447 //输出:无
448 //功能描述:CC1100发送一组数据
449 //*****************************************************************************************
450 void halRfSendPacket(INT8U *txBuffer, INT8U size)
451 {
452 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
453 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
454 1
455 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
456 1
457 1 // Wait for GDO0 to be set -> sync transmitted
458 1 while (!GDO1);
459 1
460 1 // Wait for GDO0 to be cleared -> end of packet
461 1 while (GDO1);
462 1 halSpiStrobe(CCxxx0_SFTX);
463 1 }
464
465
466
467 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
468 {
469 1 INT8U status[2];
470 1 INT8U packetLength;
471 1
472 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
473 1 while (!GDO1);
474 1 while (GDO1);
475 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
476 1 {
477 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
478 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
479 2 {
480 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
481 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
482 3
483 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
484 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
485 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
486 3 }
487 2 else
C51 COMPILER V7.50 CC1100_TX 11/26/2006 22:02:36 PAGE 9
488 2 {
489 3 *length = packetLength;
490 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
491 3 return 0;
492 3 }
493 2 }
494 1 else
495 1 return 0;
496 1 }
497
498 /******************************************************************************************
499 *******************************************************************************************
500 ************************************中断服务程序*********************************************
501 *******************************************************************************************
502 ******************************************************************************************/
503 /*void Timer0ISR(void) interrupt 1
504 {
505 EA = 0;
506 TH0+=TIMER0H;
507 TL0+=TIMER0L;
508 TimerCount++;
509 timer[0]++;
510 timer[1]++;
511 EA = 1;
512 }
513 */
514
515
516
517 /******************************************************************************************
518 *******************************************************************************************
519 ******************************************主程序*******************************************
520 *******************************************************************************************
521 ******************************************************************************************/
522 main(void)
523 {
524 1 INT8U leng;
525 1 INT8U arrTx[4];
526 1 INT8U arrRx[4];
527 1 CpuInit();
528 1 POWER_UP_RESET_CC1100();
529 1 halRfWriteRfSettings();
530 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
531 1 LED1 = 0;
532 1 delay(60000);
533 1 LED1 = 1;
534 1 delay(30000);
535 1 arrTx[0] = 0xBB;
536 1 arrTx[1] = 0xAA;
537 1 arrTx[2] = 0x55;
538 1 arrTx[3] = 0x09;
539 1 leng = 3;
540 1 while(1)
541 1 {
542 2 /* halRfSendPacket(arrTx,4);
543 2 LED2 = 0;
544 2 delay(10000);
545 2 LED2 = 1;
546 2 delay(20000);*/
547 2 if(halRfReceivePacket(arrRx,&leng))
548 2 {
549 3 LED2 = 0;
C51 COMPILER V7.50 CC1100_TX 11/26/2006 22:02:36 PAGE 10
550 3 delay(10000);
551 3 LED2 = 1;
552 3 halSpiStrobe(CCxxx0_SFRX);
553 3 SendCh(arrRx[0]);
554 3 SendCh(arrRx[1]);
555 3 SendCh(arrRx[2]);
556 3 SendCh(arrRx[3]);
557 3 }
558 2 }
559 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 917 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 32
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -