📄 rf_hal.c
字号:
/*******************************************************************************************************
* 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 + -