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