⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rf_hal.c

📁 基于CC1100和ATMEGA128开发的无线机器人控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************************************
 * Compiler:                WINAVR                                                             *
 * Target platform:         Chipcon CCxxx0 (any ATMEGA MCU)                                               *
 * Author:                  WangChaoyan                                                                       *
 *******************************************************************************************************
 * Revision history:                                                                 *
 ******************************************************************************************************/

#include "include.h"
#include "halsrf04.h"

extern RF_SETTINGS rfSettings;

extern BYTE paTable[1];

//-------------------------------------------------------------------------------------------------------
// Defines
#define GDO0_PIN        (PIND & 0x01)  
#define GDO2_PIN        (PIND & 0x02)           
#define MISO_1		(PINB & 0x08)

#define CRC_OK              0x80  

#define RSSI                0
#define LQI                 1
#define BYTES_IN_RXFIFO     0x7F        

//-------------------------------------------------------------------------------------------------------


//extern unsigned char RxEnFlag;

//-------------------------------------------------------------------------------------------------------
//  BYTE halSpiReadReg(BYTE addr)
//	读单个寄存器
//  DESCRIPTION:
//      This function gets the value of a single specified CCxxx0 register.
//
//  ARGUMENTS:
//      BYTE addr
//          Address of the CCxxx0 register to be accessed.
//
//  RETURN VALUE:
//      BYTE
//          Value of the accessed CCxxx0 register.
//-------------------------------------------------------------------------------------------------------
BYTE halSpiReadReg(BYTE addr) {
    UINT8 x;
    SPI_ENABLE(); 
    NOP();
    while(MISO_1);
    NOP();
    FASTSPI_TX(addr | READ_SINGLE);
    FASTSPI_RX(x);
    NOP();
    
    SPI_DISABLE(); 
    
    return x;
}// halSpiReadReg

//-------------------------------------------------------------------------------------------------------
//  BYTE halSpiReadStatus(BYTE addr)
// 读CC1100 状态寄存器
//  DESCRIPTION:
//      This function reads a CCxxx0 status register.
//
//  ARGUMENTS:
//      BYTE addr
//          Address of the CCxxx0 status register to be accessed.
//
//  RETURN VALUE:
//      BYTE
//          Value of the accessed CCxxx0 status register.
//-------------------------------------------------------------------------------------------------------
BYTE halSpiReadStatus(BYTE addr) {
    UINT8 x;
  
    SPI_ENABLE(); 
    NOP();
    while(MISO_1);
    NOP();
    FASTSPI_TX(addr | READ_BURST);
    FASTSPI_RX(x);
    NOP();
    SPI_DISABLE(); 
    
    return x;
}// halSpiReadStatus


//-------------------------------------------------------------------------------------------------------
//  void halSpiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count)
// 连续读取缓冲区数据
//  DESCRIPTION:
//      This function reads multiple CCxxx0 register, using SPI burst access.
//
//  ARGUMENTS:
//      BYTE addr
//          Address of the first CCxxx0 register to be accessed.
//      BYTE *buffer
//          Pointer to a byte array which stores the values read from a
//          corresponding range of CCxxx0 registers.
//      BYTE count
//          Number of bytes to be written to the subsequent CCxxx0 registers.
//-------------------------------------------------------------------------------------------------------
void halSpiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count) {
    UINT8 i;
    SPI_ENABLE(); 
    while(MISO_1);
    NOP();
    FASTSPI_TX(addr | READ_BURST);
    for (i = 0; i < count; i++) 
    {
    	FASTSPI_RX(buffer[i]);
	
  	}
  	
    NOP(); 
    SPI_DISABLE(); 
    
    buffer[i] = 0;		// add a terminal char
}// halSpiReadBurstReg


//-------------------------------------------------------------------------------------------------------
//  void halSpiStrobe(BYTE strobe)
//	发送命令字节
//  DESCRIPTION:
//      Function for writing a strobe command to the CCxxx0
//
//  ARGUMENTS:
//      BYTE strobe
//          Strobe command
//-------------------------------------------------------------------------------------------------------
void halSpiStrobe(BYTE strobe) {
	
	 			SPI_ENABLE(); 
	 			NOP();
 				while(MISO_1);
 				NOP();
        FASTSPI_TX(strobe); 
				NOP();
        SPI_DISABLE(); 
 //  FASTSPI_STROBE(strobe);
}// halSpiStrobe


//-------------------------------------------------------------------------------------------------------
//  void halSpiWriteReg(BYTE addr, BYTE value)
// 写单个寄存器
//  DESCRIPTION:
//      Function for writing to a single CCxxx0 register
//
//  ARGUMENTS:
//      BYTE addr
//          Address of a specific CCxxx0 register to accessed.
//      BYTE value
//          Value to be written to the specified CCxxx0 register.
//-------------------------------------------------------------------------------------------------------


void halSpiWriteReg(BYTE addr, BYTE value) {
 				SPI_ENABLE(); 
 				NOP();
 				while(MISO_1);
        NOP(); 
        FASTSPI_TX(addr); 
        FASTSPI_TX(value);
        NOP(); 
        SPI_DISABLE(); 
}// halSpiWriteReg


//-------------------------------------------------------------------------------------------------------
//  void RfWriteRfSettings(RF_SETTINGS *pRfSettings)
// 设置寄存器
//  DESCRIPTION:
//      This function is used to configure the CC2500 based on a given rf setting
//
//  ARGUMENTS:
//      RF_SETTINGS *pRfSettings
//          Pointer to a struct containing rf register settings
//-------------------------------------------------------------------------------------------------------
void halRfWriteRfSettings(RF_SETTINGS *pRfSettings) {

    // Write register settings
    halSpiWriteReg(CCxxx0_FSCTRL1,  pRfSettings->FSCTRL1);
    halSpiWriteReg(CCxxx0_FSCTRL0,  pRfSettings->FSCTRL0);
    halSpiWriteReg(CCxxx0_FREQ2,    pRfSettings->FREQ2);
    halSpiWriteReg(CCxxx0_FREQ1,    pRfSettings->FREQ1);
    halSpiWriteReg(CCxxx0_FREQ0,    pRfSettings->FREQ0);
    halSpiWriteReg(CCxxx0_MDMCFG4,  pRfSettings->MDMCFG4);
    halSpiWriteReg(CCxxx0_MDMCFG3,  pRfSettings->MDMCFG3);
    halSpiWriteReg(CCxxx0_MDMCFG2,  pRfSettings->MDMCFG2);
    halSpiWriteReg(CCxxx0_MDMCFG1,  pRfSettings->MDMCFG1);
    halSpiWriteReg(CCxxx0_MDMCFG0,  pRfSettings->MDMCFG0);
    halSpiWriteReg(CCxxx0_CHANNR,   pRfSettings->CHANNR);
    halSpiWriteReg(CCxxx0_DEVIATN,  pRfSettings->DEVIATN);
    halSpiWriteReg(CCxxx0_FREND1,   pRfSettings->FREND1);
    halSpiWriteReg(CCxxx0_FREND0,   pRfSettings->FREND0);
      
    halSpiWriteReg(CCxxx0_MCSM0 ,   pRfSettings->MCSM0 );
    halSpiWriteReg(CCxxx0_FOCCFG,   pRfSettings->FOCCFG);
    halSpiWriteReg(CCxxx0_BSCFG,    pRfSettings->BSCFG);
    halSpiWriteReg(CCxxx0_AGCCTRL2, pRfSettings->AGCCTRL2);
	halSpiWriteReg(CCxxx0_AGCCTRL1, pRfSettings->AGCCTRL1);
    halSpiWriteReg(CCxxx0_AGCCTRL0, pRfSettings->AGCCTRL0);
    halSpiWriteReg(CCxxx0_FSCAL3,   pRfSettings->FSCAL3);
    halSpiWriteReg(CCxxx0_FSCAL2,   pRfSettings->FSCAL2);
	halSpiWriteReg(CCxxx0_FSCAL1,   pRfSettings->FSCAL1);
    halSpiWriteReg(CCxxx0_FSCAL0,   pRfSettings->FSCAL0);
    halSpiWriteReg(CCxxx0_FSTEST,   pRfSettings->FSTEST);
    halSpiWriteReg(CCxxx0_TEST2,    pRfSettings->TEST2);
    halSpiWriteReg(CCxxx0_TEST1,    pRfSettings->TEST1);
    halSpiWriteReg(CCxxx0_TEST0,    pRfSettings->TEST0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -