MBED driver for Max1471.
Diff: MAX1471.h
- Revision:
- 0:99e9397112f0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MAX1471.h Fri Oct 04 15:15:06 2019 +0300 @@ -0,0 +1,454 @@ +/* + * MAX1471.h + * + * Created on: Dec 17, 2018 + * Author: Erman.Komurcu + */ + +#ifndef MAX1471_MAX1471_H_ +#define MAX1471_MAX1471_H_ + +#include "mbed.h" +#include "rtos.h" +#include "MAX1471_regs.h" + + +class MAX1471 +{ +private: + max1471_reg_map_t *reg; + SPI *spi_handler; + DigitalOut *ssel; + DigitalOut *bLED; + DigitalIn *dio; + + int spi_mode; + int modulation; /*!< Current modulation mode */ + float oscFrequency; /*!< Extern oscillator frequency */ + + +public: + + typedef enum { + PWR_CFG_ADDR = 0x00, + CFG_ADDR = 0x01, + CTRL_ADDR = 0x02, + OSC_FREQ_ADDR = 0x03, + OFF_TMR_UP_ADDR = 0x04, + OFF_TMR_DWN_ADDR = 0x05, + CPU_REC_ADDR = 0x06, + RF_ST_UP_ADDR = 0x07, + RF_ST_DWN_ADDR = 0x08, + STAT_ADDR = 0x09, + AGC_DWL_TMR_ADDR = 0x0A, + } register_address_t; + + typedef enum { + ASK = 0, + FSK, + BOTH + } modulation_type_t; + + + //Constructors + + MAX1471(DigitalOut *cs); + + + /* PUBLIC FUNCTION DECLARATIONS */ + + /** + * @brief Read from a register. + * + * @param[in] reg Address of a register to be read. + * @param[out] value Pointer to save result value. + * @param[in] len Size of result to be read. + * + * @returns 0 on success, negative error code on failure. + */ + int read_register(uint8_t reg, uint8_t *value, uint8_t len); + + /** + * @brief Write to a register. + * + * @param[in] reg Address of a register to be written. + * @param[out] value Pointer of value to be written to register. + * @param[in] len Size of result to be written. + * + * @returns 0 on success, negative error code on failure. + */ + int write_register(uint8_t reg, const uint8_t *value, uint8_t len); + + /** + * @brief Write to a register. + * + * @param[in] reg Address of a register to be written. + * @param[out] value Value to be written to register. + * @param[in] len Size of result to be written. + * + * @returns 0 on success, negative error code on failure. + */ + int write_register(uint8_t reg, const uint8_t value, uint8_t len); + /** + * @brief Set 3-Wire or 4-Wire SPI + * + * @param[in] type Type of SPI interface + * 0 -> 3-Wire SPI interface (default) + * 1 -> 4-Wire SPI interface (DOUT_FSK) enabled + * 2 -> 4-Wire SPI interface (DOUT_ASK) enabled + * + * @returns 0 on success, negative error code on failure. + */ + int set_spi_type(uint8_t type); + + /** + * @brief ASK peak detector management + * + * @param[in] enable Requested status of ASK Peak Detector + * + * @returns 0 on success, negative error code on failure. + */ + int ASKPeakDetectorEnable(bool enable); + + /** + * @brief FSK peak detector management + * + * @param[in] enable Requested status of FSK Peak Detector + * + * @returns 0 on success, negative error code on failure. + */ + int FSKPeakDetectorEnable(bool enable); + + /** + * @brief ASK base band receiver management + * + * @param[in] enable Requested status of ASK base band receiver + * + * @returns 0 on success, negative error code on failure. + */ + int ASKBaseBandReceiverEnable(bool enable); + + /** + * @brief FSK base band receiver management + * + * @param[in] enable Requested status of FSK base band receiver + * + * @returns 0 on success, negative error code on failure. + */ + int FSKBaseBandReceiverEnable(bool enable); + + /** + * @brief RF Mixer on/off management + * + * @param[in] enable Requested status of RF mixer + * + * @returns 0 on success, negative error code on failure. + */ + int RFMixerEnable(bool enable); + + /** + * @brief Automatic gain controller on/off management + * + * @param[in] enable Requested status of AGC + * + * @returns 0 on success, negative error code on failure. + */ + int AGCEnable(bool enable); + + /** + * @brief Low noise amplifier on/off management + * + * @param[in] enable Requested status of LNA + * + * @returns 0 on success, negative error code on failure. + */ + int LNAEnable(bool enable); + + /** + * @brief 4-wire SPI MISO pin assignment to FSK data pin + * + * @param[in] enable Requested status of DOUT as FSK data pin + * + * @returns 0 on success, negative error code on failure. + */ + int SetFDATAasDOUTPin(bool enable); + + /** + * @brief 4-wire SPI MISO pin assignment to ASK data pin + * + * @param[in] enable Requested status of DOUT as ASK data pin + * + * @returns 0 on success, negative error code on failure. + */ + int SetADATAasDOUTPin(bool enable); + + /** + * @brief Long FSK calibration on/off management + * + * @param[in] enable Requested status of longer FSK calibration mode + * + * @returns 0 on success, negative error code on failure. + */ + int LongerFSKCalibrationEnable(bool enable); + + /** + * @brief Discontinuous receive mode on/off management + * + * @param[in] enable Requested status of discontinuous receive mode + * + * @returns 0 on success, negative error code on failure. + */ + int DRXEnable(bool enable); + + /** + * @brief LNA's low or high gain mode selection + * + * @param[in] isHighGain Requested gain mode is high gain or low gain + * + * @returns 0 on success, negative error code on failure. + */ + int LNAGainState(bool isHighGain); + + /** + * @brief FSK Calibration starter + * + * @param[in] enable Start or stop FSK calibration + * + * @returns 0 on success, negative error code on failure. + */ + int FSKCalibrationDone(bool enable); + + /** + * @brief Get AGC Dwell timer value + * + * @param[out] valuePtr Pointer to AGC Dwell timer value + * + * @returns 0 on success, negative error code on failure. + */ + int GetAGCDwellTimer( unsigned char *valuePtr ); + + /** + * @brief Set AGC Dwell timer value + * + * @param[in] value Desired value of AGC Dwell timer + * + * @returns 0 on success, negative error code on failure. + */ + int SetAGCDwellTimer( unsigned char value ); + + /** + * @brief Poll timer calibration starter + * + * @param[in] enable Start or stop poll timer calibration + * + * @returns 0 on success, negative error code on failure. + */ + int PollTimerCalibrationEnable(bool enable); + + /** + * @brief Track mode for ASK peak detector on/off control + * + * @param[in] enable Enable/disable track mode of ASK peak detector + * + * @returns 0 on success, negative error code on failure. + */ + int ASKPeakDetectorTrackEnable(bool enable); + + /** + * @brief Track mode for FSK peak detector on/off control + * + * @param[in] enable Enable/disable track mode of FSK peak detector + * + * @returns 0 on success, negative error code on failure. + */ + int FSKPeakDetectorTrackEnable(bool enable); + + /** + * @brief Locks AGC's current state + * + * @returns 0 on success, negative error code on failure. + */ + int LockAGCCurrentState(); + + /** + * @brief Gets calibration status of poll timer calibration + * + * @param[out] valuePtr Pointer to current status of poll timer calibration + * + * @returns 0 on success, negative error code on failure. + */ + int GetPollTimerCalibrationDoneStatus( unsigned char *valuePtr ); + + /** + * @brief Gets calibration status of FSK calibration + * + * @param[out] valuePtr Pointer to current status of FSK calibration + * + * @returns 0 on success, negative error code on failure. + */ + int GetFSKCalibrationDoneStatus( unsigned char *valuePtr ); + + /** + * @brief Gets clock alive status + * + * @param[out] valuePtr Pointer to clock alive status + * + * @returns 0 on success, negative error code on failure. + */ + int GetClockAliveStatus( unsigned char *valuePtr ); + + /** + * @brief Gets AGC's current status + * + * @param[out] valuePtr Pointer to AGC's current status + * + * @returns 0 on success, negative error code on failure. + */ + int GetAGCStatus( unsigned char *valuePtr ); + + /** + * @brief Get whether PLL is locked or not + * + * @param[out] valuePtr Pointer to PLL's current status + * + * @returns 0 on success, negative error code on failure. + */ + int GetPLLLockStatus( unsigned char *valuePtr ); + + /** + * @brief Get off timer prescale value + * + * @param[out] valuePtr Pointer to off timer prescale value + * + * @returns 0 on success, negative error code on failure. + */ + int GetOffTimerPrescale( unsigned char *valuePtr ); + + /** + * @brief Set off timer prescale value + * + * @param[in] value Desired value of off timer prescale + * + * @returns 0 on success, negative error code on failure. + */ + int SetOffTimerPrescale( unsigned char value ); + + /** + * @brief Set rf settle timer value + * + * @param[in] value Desired value of off timer rf settle timer + * + * @returns 0 on success, negative error code on failure. + */ + int SetRFSettleTimer( unsigned short int value ); + + /** + * @brief Get rf settle timer value + * + * @param[out] valuePtr Pointer to rf settle timer value + * + * @returns 0 on success, negative error code on failure. + */ + int GetRFSettleTimer( unsigned short int *valuePtr ); + + /** + * @brief Set off timer value + * + * @param[in] value Desired value of off timer + * + * @returns 0 on success, negative error code on failure. + */ + int SetOFFTimer( unsigned short int value ); + + /** + * @brief Get off timer value + * + * @param[out] valuePtr Pointer to off timer value + * + * @returns 0 on success, negative error code on failure. + */ + int GetOFFTimer( unsigned short int *valuePtr ); + + /** + * @brief Set CPU recovery timer value + * + * @param[in] value Desired value of CPU recovery timer + * + * @returns 0 on success, negative error code on failure. + */ + int SetCPURecoveryTimer( unsigned char value ); + + /** + * @brief Get CPU recovery timer value + * + * @param[out] valuePtr Pointer to CPU recovery timer value + * + * @returns 0 on success, negative error code on failure. + */ + int GetCPURecoveryTimer( unsigned char *valuePtr ); + + /** + * @brief Set RF oscillator frequency + * + * @param[in] value Desired frequency + * + * @returns 0 on success, negative error code on failure. + */ + int SetRFOscillatorFreq( float frequency ); + + /** + * @brief Get RF oscillator frequency + * + * @param[out] freqPtr Pointer to RF oscillator frequency + * + * @returns 0 on success, negative error code on failure. + */ + int GetRFOscillatorFreq( float *freqPtr ); + + /** + * @brief Reset the chip + * + * @returns 0 on success, negative error code on failure. + */ + int reset(); + + /** + * @brief NOP command + * + * @returns 0 on success, negative error code on failure. + */ + int nop(); + + /** + * @brief Initialize the chip + * + * @returns 0 on success, negative error code on failure. + */ + int InitMAX1471(); + + int PrepMAX1471RX(); + + int PrepMAX1471RX( modulation_type_t modType ); + + int PrepMAX1471RX_DRX(); + + /** + * @brief Prepare MAX1471's sleep mode + * + * @param[in] enable Sleep mode enable/disable + * + * @returns 0 on success, negative error code on failure. + */ + int PrepMAX1471Sleep(bool enable); + +}; +extern const uint32_t pmu_program_sample_data_in[]; +extern const uint32_t pmu_program_stop_buff1_filling[]; +extern const uint32_t pmu_program_stop_buff0_filling[]; +extern const uint32_t pmu_program_start_buff1_filling[]; +extern const uint32_t pmu_program_save_current_data_to_buffer0[]; +extern const uint32_t pmu_program_save_current_data_to_buffer1[]; +extern const uint32_t pmu_program_sample_0[]; +extern const uint32_t pmu_program_sample_1[]; + +#endif /* MAX1471_MAX1471_H_ */