149 lines
4.0 KiB
C
149 lines
4.0 KiB
C
/**
|
|
****************************************************************************************
|
|
*
|
|
* @file frspim.c
|
|
*
|
|
* @brief freqchip spi master initialization and specific functions
|
|
*
|
|
* Copyright (C) RivieraWaves 2009-2013
|
|
*
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup RF_FR
|
|
* @ingroup RF
|
|
* @brief FREQCHIP Radio Driver
|
|
*
|
|
* This is the driver block for FR radio
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
#include "fr30xx.h"
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
volatile struct frspim_reg_t * const frspim_reg = (volatile struct frspim_reg_t * )FRSPIM_BASE;
|
|
|
|
/*
|
|
* FUNCTION DEFINITIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
void frspim_init(uint8_t ratio)
|
|
{
|
|
frspim_reg->ctrl.ratio = ratio;
|
|
}
|
|
|
|
|
|
/*****************************************************************************************
|
|
* @brief SPI access
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
/*****************************************************************************************
|
|
* @brief Bluejay specific read access
|
|
*
|
|
* @param[in] addr register address
|
|
*
|
|
* @return uint32_t value
|
|
****************************************************************************************
|
|
*/
|
|
__RAM_CODE uint32_t frspim_rd (uint8_t chan_num, uint8_t addr, uint8_t len)
|
|
{
|
|
uint32_t data;
|
|
|
|
GLOBAL_INT_DISABLE();
|
|
frspim_reg->ctrl.len = len;
|
|
frspim_reg->ctrl.sel = chan_num;
|
|
frspim_reg->ctrl.op = 0;
|
|
frspim_reg->ctrl.addr = addr;
|
|
|
|
frspim_reg->ctrl.go = 1;
|
|
while(!frspim_reg->ctrl.done);
|
|
|
|
data = (*((uint32_t *)(&frspim_reg->rdat)));
|
|
GLOBAL_INT_RESTORE();
|
|
|
|
return data;
|
|
}
|
|
|
|
/*****************************************************************************************
|
|
* @brief Bluejay specific read access for ram
|
|
*
|
|
* @param[in] addr register address
|
|
*
|
|
* @return uint32_t value
|
|
****************************************************************************************
|
|
*/
|
|
__RAM_CODE uint32_t frspim_rd_ram (uint8_t chan_num, uint8_t addr, uint8_t len)
|
|
{
|
|
uint32_t data;
|
|
|
|
GLOBAL_INT_DISABLE();
|
|
|
|
*(volatile uint32_t *)(&frspim_reg->ctrl) = 0x00001011 | (addr<<16);
|
|
while(!frspim_reg->ctrl.done);
|
|
|
|
data = *(volatile uint32_t *)(&frspim_reg->rdat);
|
|
GLOBAL_INT_RESTORE();
|
|
|
|
return data;
|
|
}
|
|
/*****************************************************************************************
|
|
* @brief Freqchip specific write access
|
|
*
|
|
* @param[in] addr register address
|
|
* @param[in] value value to write
|
|
*
|
|
* @return uint32_t value
|
|
****************************************************************************************
|
|
*/
|
|
__RAM_CODE void frspim_wr (uint8_t chan_num, uint8_t addr, uint8_t len, uint32_t val)
|
|
{
|
|
GLOBAL_INT_DISABLE();
|
|
frspim_reg->ctrl.len = len;
|
|
frspim_reg->ctrl.sel = chan_num;
|
|
frspim_reg->ctrl.op = 1;
|
|
frspim_reg->ctrl.addr = addr;
|
|
(*((uint32_t *)(&frspim_reg->wdat))) = val;
|
|
|
|
frspim_reg->ctrl.go = 1;
|
|
while(!frspim_reg->ctrl.done);
|
|
GLOBAL_INT_RESTORE();
|
|
}
|
|
|
|
/*****************************************************************************************
|
|
* @brief Freqchip specific write access for ram
|
|
*
|
|
* @param[in] addr register address
|
|
* @param[in] value value to write
|
|
*
|
|
* @return uint32_t value
|
|
****************************************************************************************
|
|
*/
|
|
__RAM_CODE void frspim_wr_ram (uint8_t chan_num, uint8_t addr, uint8_t len, uint32_t val)
|
|
{
|
|
GLOBAL_INT_DISABLE();
|
|
|
|
*(volatile uint32_t *)(&frspim_reg->wdat) = val;
|
|
*(volatile uint32_t *)(&frspim_reg->ctrl) = 0x00001111 | (addr<<16);;
|
|
|
|
while(!frspim_reg->ctrl.done);
|
|
GLOBAL_INT_RESTORE();
|
|
}
|
|
|
|
|