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