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