📄 halsrf04.h
字号:
/*******************************************************************************************************
* Compiler: AVR-GCC *
* Target platform: CCxx00 + any ATMEGA MCU *
* Author: WangChaoyan
*******************************************************************************************************
* Revision history: See end of file *
******************************************************************************************************/
#ifndef _HALSRF04_H
#define _HALSRF04_H
#include "regssrf04.h"
#include "common.h"
// Definitions to support burst/single access:
#define WRITE_BURST 0x40
#define READ_SINGLE 0x80
#define READ_BURST 0xC0
#define ENABLE_TX halSpiStrobe(CCxxx0_STX)
#define ENABLE_RX halSpiStrobe(CCxxx0_SRX)
#define FREQ_433
//#define BYTES_IN_RXFIFO 0x7F
//-------------------------------------------------------------------------------------------------------
// void halSpiStrobe(BYTE strobe)
//
// DESCRIPTION:
// Function for writing a strobe command to the CCxxx0
//
// ARGUMENTS:
// BYTE strobe
// Strobe command
//-------------------------------------------------------------------------------------------------------
void halSpiStrobe(BYTE strobe);
//-------------------------------------------------------------------------------------------------------
// BYTE halSpiReadStatus(BYTE addr)
//
// 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);
//-------------------------------------------------------------------------------------------------------
// 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);
//-------------------------------------------------------------------------------------------------------
// 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);
//-------------------------------------------------------------------------------------------------------
// void halSpiWriteBurstReg(BYTE addr, BYTE *buffer, BYTE count)
//
// DESCRIPTION:
// This function writes to multiple CCxxx0 register, using SPI burst access.
//
// ARGUMENTS:
// BYTE addr
// Address of the first CCxxx0 register to be accessed.
// BYTE *buffer
// Array of bytes to be written into a corresponding range of
// CCxx00 registers, starting by the address specified in _addr_.
// BYTE count
// Number of bytes to be written to the subsequent CCxxx0 registers.
//-------------------------------------------------------------------------------------------------------
void halSpiWriteBurstReg(BYTE addr, BYTE *buffer, BYTE count);
//-------------------------------------------------------------------------------------------------------
// 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 read from the subsequent CCxxx0 registers.
//-------------------------------------------------------------------------------------------------------
void halSpiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count);
//-------------------------------------------------------------------------------------------------------
// Macro to reset the CCxxx0 and wait for it to be ready
#define RESET_CCxxx0() \
do { \
SPI_ENABLE(); \
while ((PINB&0x08)); \
SPDR = CCxxx0_SRES; \
FASTSPI_WAIT(); \
while ((PINB&0x08)); \
SPI_DISABLE(); \
} while (0)
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
// Macro to reset the CCxxx0 after power_on and wait for it to be ready
// IMPORTANT NOTICE:
// The file Wait.c must be included if this macro shall be used
// The file is located under: ..\Lib\Chipcon\Hal\CCxx00
//
// min 40 us
// <------------------>
// CSn |--| |--------------------| |-----
// | | | | |
// -- ------------
//
// MISO |----|
// -----------------------------| | |
// -- ---------
// Unknown / don't care
// SRES done
//
#if 1
#define POWER_UP_RESET_CCxxx0() \
do { \
SPI_DISABLE(); \
halWait(1); \
SPI_ENABLE(); \
halWait(1); \
SPI_DISABLE(); \
halWait(41); \
RESET_CCxxx0(); \
} while (0)
#endif
//-------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** RF communication functions/macros ****************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// This section contains functions used to write rf settings to CCxxx0, and for sending and
// receiving a packet.
// void RfWriteRfSettings(RF_SETTINGS *pRfSettings);
// void halRfSendPacket(BYTE *txBuffer, UINT8 size);
// BOOL halRfReceivePacket(BYTE *rxBuffer, UINT8 *length)
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
// RF_SETTINGS is a data structure which contains all relevant CCxxx0 registers
typedef struct S_RF_SETTINGS{
BYTE FSCTRL1; // Frequency synthesizer control.
BYTE FSCTRL0; // Frequency synthesizer control.
BYTE FREQ2; // Frequency control word, high byte.
BYTE FREQ1; // Frequency control word, middle byte.
BYTE FREQ0; // Frequency control word, low byte.
BYTE MDMCFG4; // Modem configuration.
BYTE MDMCFG3; // Modem configuration.
BYTE MDMCFG2; // Modem configuration.
BYTE MDMCFG1; // Modem configuration.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -