MAX2837: Finish SPI abstraction.
Conflicts: firmware/common/hackrf_core.c
This commit is contained in:
@ -38,8 +38,14 @@
|
|||||||
|
|
||||||
#define WAIT_CPU_CLOCK_INIT_DELAY (10000)
|
#define WAIT_CPU_CLOCK_INIT_DELAY (10000)
|
||||||
|
|
||||||
|
spi_t max2837_spi = {
|
||||||
|
.init = max2837_spi_init,
|
||||||
|
.transfer = max2837_spi_transfer,
|
||||||
|
.transfer_gather = max2837_spi_transfer_gather,
|
||||||
|
};
|
||||||
|
|
||||||
max2837_driver_t max2837 = {
|
max2837_driver_t max2837 = {
|
||||||
.spi = NULL, /* TODO */
|
.spi = &max2837_spi,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -537,7 +543,7 @@ void ssp1_init(void)
|
|||||||
|
|
||||||
void ssp1_set_mode_max2837(void)
|
void ssp1_set_mode_max2837(void)
|
||||||
{
|
{
|
||||||
max2837_spi_init(max2837.spi);
|
spi_init(max2837.spi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ssp1_set_mode_max5864(void)
|
void ssp1_set_mode_max5864(void)
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "max2837.h"
|
#include "max2837.h"
|
||||||
#include "max2837_spi.h"
|
|
||||||
#include "max2837_target.h"
|
#include "max2837_target.h"
|
||||||
#include "max2837_regs.def" // private register def macros
|
#include "max2837_regs.def" // private register def macros
|
||||||
|
|
||||||
@ -80,7 +79,7 @@ static const uint16_t max2837_regs_default[MAX2837_NUM_REGS] = {
|
|||||||
/* Set up all registers according to defaults specified in docs. */
|
/* Set up all registers according to defaults specified in docs. */
|
||||||
static void max2837_init(max2837_driver_t* const drv)
|
static void max2837_init(max2837_driver_t* const drv)
|
||||||
{
|
{
|
||||||
max2837_spi_init(drv->spi);
|
spi_init(drv->spi);
|
||||||
max2837_mode_shutdown(drv);
|
max2837_mode_shutdown(drv);
|
||||||
max2837_target_init(drv);
|
max2837_target_init(drv);
|
||||||
|
|
||||||
@ -126,13 +125,13 @@ void max2837_setup(max2837_driver_t* const drv)
|
|||||||
|
|
||||||
static uint16_t max2837_read(max2837_driver_t* const drv, uint8_t r) {
|
static uint16_t max2837_read(max2837_driver_t* const drv, uint8_t r) {
|
||||||
uint16_t value = (1 << 15) | (r << 10);
|
uint16_t value = (1 << 15) | (r << 10);
|
||||||
max2837_spi_transfer(drv->spi, &value, 1);
|
spi_transfer(drv->spi, &value, 1);
|
||||||
return value & 0x3ff;
|
return value & 0x3ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void max2837_write(max2837_driver_t* const drv, uint8_t r, uint16_t v) {
|
static void max2837_write(max2837_driver_t* const drv, uint8_t r, uint16_t v) {
|
||||||
uint16_t value = (r << 10) | (v & 0x3ff);
|
uint16_t value = (r << 10) | (v & 0x3ff);
|
||||||
max2837_spi_transfer(drv->spi, &value, 1);
|
spi_transfer(drv->spi, &value, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t max2837_reg_read(max2837_driver_t* const drv, uint8_t r)
|
uint16_t max2837_reg_read(max2837_driver_t* const drv, uint8_t r)
|
||||||
|
@ -57,14 +57,23 @@ void max2837_spi_init(spi_t* const spi) {
|
|||||||
scu_pinmux(SCU_SSP1_SCK, (SCU_SSP_IO | SCU_CONF_FUNCTION1));
|
scu_pinmux(SCU_SSP1_SCK, (SCU_SSP_IO | SCU_CONF_FUNCTION1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void max2837_spi_transfer(spi_t* const spi, void* const _data, const size_t count) {
|
void max2837_spi_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count) {
|
||||||
(void)spi;
|
(void)spi;
|
||||||
|
|
||||||
uint16_t* const data = _data;
|
|
||||||
|
|
||||||
gpio_clear(PORT_XCVR_CS, PIN_XCVR_CS);
|
gpio_clear(PORT_XCVR_CS, PIN_XCVR_CS);
|
||||||
for(size_t i=0; i<count; i++) {
|
for(size_t i=0; i<count; i++) {
|
||||||
data[i] = ssp_transfer(SSP1_NUM, data[i]);
|
const size_t data_count = transfers[i].count;
|
||||||
}
|
uint16_t* const data = transfers[i].data;
|
||||||
|
for(size_t j=0; j<data_count; j++) {
|
||||||
|
data[j] = ssp_transfer(SSP1_NUM, data[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
gpio_set(PORT_XCVR_CS, PIN_XCVR_CS);
|
gpio_set(PORT_XCVR_CS, PIN_XCVR_CS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void max2837_spi_transfer(spi_t* const spi, void* const data, const size_t count) {
|
||||||
|
const spi_transfer_t transfers[] = {
|
||||||
|
{ data, count },
|
||||||
|
};
|
||||||
|
max2837_spi_transfer_gather(spi, transfers, 1);
|
||||||
|
}
|
||||||
|
@ -30,5 +30,6 @@
|
|||||||
|
|
||||||
void max2837_spi_init(spi_t* const spi);
|
void max2837_spi_init(spi_t* const spi);
|
||||||
void max2837_spi_transfer(spi_t* const spi, void* const data, const size_t count);
|
void max2837_spi_transfer(spi_t* const spi, void* const data, const size_t count);
|
||||||
|
void max2837_spi_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count);
|
||||||
|
|
||||||
#endif/*__MAX2837_SPI_H__*/
|
#endif/*__MAX2837_SPI_H__*/
|
||||||
|
Reference in New Issue
Block a user