📄 cc1100_rx.lst
字号:
283 1 {
284 2 if(dat & 0x80)
285 2 {
286 3 MOSI = 1;
287 3 }
288 2 else MOSI = 0;
289 2
290 2 dat <<= 1;
291 2
292 2 SCK = 1;
293 2 _nop_();
294 2 _nop_();
295 2 _nop_();
296 2 _nop_();
297 2 temp <<= 1;
298 2 if(MISO)temp++;
299 2 SCK = 0;
300 2 _nop_();
301 2 _nop_();
302 2 _nop_();
C51 COMPILER V8.02 CC1100_RX 11/15/2007 16:36:32 PAGE 6
303 2 _nop_();
304 2 }
305 1 return temp;
306 1 }
307
308
309
310
311
312
313 //*****************************************************************************************
314 //函数名:void halSpiWriteReg(INT8U addr, INT8U value)
315 //输入:地址和配置字
316 //输出:无
317 //功能描述:SPI写寄存器
318 //*****************************************************************************************
319 void halSpiWriteReg(INT8U addr, INT8U value)
320 {
321 1 CS_CC1100 = 0;
322 1 while (GDO0);
323 1 SpiReadWrite(addr); //写地址
324 1 SpiReadWrite(value); //写入配置
325 1 CS_CC1100 = 1;
326 1 }
327
328
329
330 //*****************************************************************************************
331 //函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
332 //输入:地址,写入缓冲区,写入个数
333 //输出:无
334 //功能描述:SPI连续写配置寄存器
335 //*****************************************************************************************
336 void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
337 {
338 1 INT8U i, temp;
339 1 temp = addr | WRITE_BURST;
340 1 EA = 0;
341 1 CS_CC1100 = 0;
342 1 while (GDO0);
343 1 SpiReadWrite(temp);
344 1 for (i = 0; i < count; i++)
345 1 {
346 2 SpiReadWrite(buffer[i]);
347 2 }
348 1 EA = 1;
349 1 CS_CC1100 = 1;
350 1 }
351
352
353 //*****************************************************************************************
354 //函数名:void halSpiStrobe(INT8U strobe)
355 //输入:命令
356 //输出:无
357 //功能描述:SPI写命令
358 //*****************************************************************************************
359 void halSpiStrobe(INT8U strobe)
360 {
361 1 CS_CC1100 = 0;
362 1 while (GDO0);
363 1 SpiReadWrite(strobe); //写入命令
364 1 CS_CC1100 = 1;
C51 COMPILER V8.02 CC1100_RX 11/15/2007 16:36:32 PAGE 7
365 1 }
366
367 //*****************************************************************************************
368 //函数名:INT8U halSpiReadReg(INT8U addr)
369 //输入:地址
370 //输出:该寄存器的配置字
371 //功能描述:SPI读寄存器
372 //*****************************************************************************************
373 INT8U halSpiReadReg(INT8U addr)
374 {
375 1 INT8U temp, value;
376 1 temp = addr|READ_SINGLE;//读寄存器命令
377 1 CS_CC1100 = 0;
378 1 while (GDO0);
379 1 SpiReadWrite(temp);
380 1 value = SpiReadWrite(0);
381 1 CS_CC1100 = 1;
382 1 return value;
383 1 }
384
385 //*****************************************************************************************
386 //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
387 //输入:地址,读出数据后暂存的缓冲区,读出配置个数
388 //输出:无
389 //功能描述:SPI连续写配置寄存器
390 //*****************************************************************************************
391 void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
392 {
393 1 INT8U i,temp;
394 1 temp = addr | READ_BURST; //写入要读的配置寄存器地址和读命令
395 1 CS_CC1100 = 0;
396 1 while (GDO0);
397 1 SpiReadWrite(temp);
398 1 for (i = 0; i < count; i++)
399 1 {
400 2 buffer[i] = SpiReadWrite(0);
401 2 }
402 1 CS_CC1100 = 1;
403 1 }
404
405 //*****************************************************************************************
406 //函数名:INT8U halSpiReadStatus(INT8U addr)
407 //输入:地址
408 //输出:该状态寄存器当前值
409 //功能描述:SPI读状态寄存器
410 //*****************************************************************************************
411 INT8U halSpiReadStatus(INT8U addr)
412 {
413 1 INT8U value,temp;
414 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
415 1 CS_CC1100 = 0;
416 1 while (GDO0);
417 1 SpiReadWrite(temp);
418 1 value = SpiReadWrite(0);
419 1 CS_CC1100 = 1;
420 1 return value;
421 1 }
422
423
424
425 //*****************************************************************************************
426 //
C51 COMPILER V8.02 CC1100_RX 11/15/2007 16:36:32 PAGE 8
427 //
428 void halWait(INT16U timeout)
429 {
430 1 do {
431 2 _nop_();
432 2 _nop_();
433 2 _nop_();
434 2 _nop_();
435 2 _nop_();
436 2 _nop_();
437 2 _nop_();
438 2 _nop_();
439 2 _nop_();
440 2 _nop_();
441 2 _nop_();
442 2 _nop_();
443 2 _nop_();
444 2 _nop_();
445 2 _nop_();
446 2 } while (--timeout);
447 1 }
448
449 //*****************************************************************************************
450 //函数名:void RESET_CC1100(void)
451 //输入:无
452 //输出:无
453 //功能描述:复位CC1100
454 //*****************************************************************************************
455 void RESET_CC1100(void)
456 {
457 1 CS_CC1100= 0;
458 1 while (GDO0);
459 1 SpiReadWrite(CCxxx0_SRES); //写入复位命令
460 1 while (GDO0);
461 1 CS_CC1100 = 1;
462 1
463 1 }
464
465
466
467 //*****************************************************************************************
468 //函数名:void POWER_UP_RESET_CC1100(void)
469 //输入:无
470 //输出:无
471 //功能描述:上电复位CC1100
472 //*****************************************************************************************
473 void POWER_UP_RESET_CC1100(void)
474 {
475 1 CS_CC1100 = 1;
476 1 halWait(1);
477 1 CS_CC1100 = 0;
478 1 halWait(1);
479 1 CS_CC1100 = 1;
480 1 halWait(41);
481 1 RESET_CC1100(); //复位CC1100
482 1 }
483
484
485 //*****************************************************************************************
486 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
487 //输入:无
488 //输出:无
C51 COMPILER V8.02 CC1100_RX 11/15/2007 16:36:32 PAGE 9
489 //功能描述:配置CC1100的寄存器
490 //*****************************************************************************************
491 void halRfWriteRfSettings(void)
492 {
493 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
494 1 // Write register settings
495 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
496 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
497 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
498 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
499 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
500 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
501 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
502 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
503 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
504 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
505 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
506 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
507 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
508 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
509 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
510 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
511 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
512 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
513 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
514 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
515 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
516 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
517 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
518 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
519 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
520 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
521 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
522 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
523 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
524 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
525 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
526 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
527 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
528 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
529 1 }
530
531
532
533 //*****************************************************************************************
534 //函数名:void Init_CC1100(void)
535 //输入:无
536 //输出:无
537 //功能描述:chushihua CC1100
538 //*****************************************************************************************
539 void Init_CC1100(void)
540 {
541 1
542 1 POWER_UP_RESET_CC1100();
543 1 halRfWriteRfSettings();
544 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
545 1 }
546
547
548
549 //*****************************************************************************************
550 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
C51 COMPILER V8.02 CC1100_RX 11/15/2007 16:36:32 PAGE 10
551 //输入:发送的缓冲区,发送数据个数
552 //输出:无
553 //功能描述:CC1100发送一组数据
554 //*****************************************************************************************
555 void halRfSendPacket(INT8U *txBuffer, INT8U size)
556 {
557 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
558 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
559 1
560 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
561 1
562 1 // Wait for GDO2 to be set -> sync transmitted
563 1 while (!GDO2);
564 1
565 1 // Wait for GDO2 to be cleared -> end of packet
566 1 while (GDO2);
567 1 halSpiStrobe(CCxxx0_SFTX);
568 1 }
569
570 //*****************************************************************************************
571 //函数名
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -