SPI: Interface: Rename init()->start(), add stop().
This commit is contained in:
@ -75,7 +75,8 @@ const ssp_config_t ssp_config_max5864 = {
|
|||||||
spi_t spi_ssp1 = {
|
spi_t spi_ssp1 = {
|
||||||
.obj = (void*)SSP1_BASE,
|
.obj = (void*)SSP1_BASE,
|
||||||
.config = &ssp_config_max2837,
|
.config = &ssp_config_max2837,
|
||||||
.init = spi_ssp_init,
|
.start = spi_ssp_start,
|
||||||
|
.stop = spi_ssp_stop,
|
||||||
.transfer = spi_ssp_transfer,
|
.transfer = spi_ssp_transfer,
|
||||||
.transfer_gather = spi_ssp_transfer_gather,
|
.transfer_gather = spi_ssp_transfer_gather,
|
||||||
};
|
};
|
||||||
@ -93,7 +94,8 @@ max5864_driver_t max5864 = {
|
|||||||
|
|
||||||
spi_t rffc5071_spi = {
|
spi_t rffc5071_spi = {
|
||||||
.config = NULL,
|
.config = NULL,
|
||||||
.init = rffc5071_spi_init,
|
.start = rffc5071_spi_start,
|
||||||
|
.stop = rffc5071_spi_stop,
|
||||||
.transfer = rffc5071_spi_transfer,
|
.transfer = rffc5071_spi_transfer,
|
||||||
.transfer_gather = rffc5071_spi_transfer_gather,
|
.transfer_gather = rffc5071_spi_transfer_gather,
|
||||||
};
|
};
|
||||||
@ -113,7 +115,8 @@ const ssp_config_t ssp_config_w25q80bv = {
|
|||||||
spi_t spi_ssp0 = {
|
spi_t spi_ssp0 = {
|
||||||
.obj = (void*)SSP0_BASE,
|
.obj = (void*)SSP0_BASE,
|
||||||
.config = &ssp_config_w25q80bv,
|
.config = &ssp_config_w25q80bv,
|
||||||
.init = spi_ssp_init,
|
.start = spi_ssp_start,
|
||||||
|
.stop = spi_ssp_stop,
|
||||||
.transfer = spi_ssp_transfer,
|
.transfer = spi_ssp_transfer,
|
||||||
.transfer_gather = spi_ssp_transfer_gather,
|
.transfer_gather = spi_ssp_transfer_gather,
|
||||||
};
|
};
|
||||||
@ -600,12 +603,12 @@ void cpu_clock_pll1_max_speed(void)
|
|||||||
|
|
||||||
void ssp1_set_mode_max2837(void)
|
void ssp1_set_mode_max2837(void)
|
||||||
{
|
{
|
||||||
spi_init(max2837.spi, &ssp_config_max2837);
|
spi_start(max2837.spi, &ssp_config_max2837);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ssp1_set_mode_max5864(void)
|
void ssp1_set_mode_max5864(void)
|
||||||
{
|
{
|
||||||
spi_init(max5864.spi, &ssp_config_max5864);
|
spi_start(max5864.spi, &ssp_config_max5864);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pin_setup(void) {
|
void pin_setup(void) {
|
||||||
@ -649,8 +652,8 @@ void pin_setup(void) {
|
|||||||
/* GPIO3[6] on P6_10 as output. */
|
/* GPIO3[6] on P6_10 as output. */
|
||||||
GPIO3_DIR |= PIN_EN1V8;
|
GPIO3_DIR |= PIN_EN1V8;
|
||||||
|
|
||||||
spi_init(&spi_ssp1, &ssp_config_max2837);
|
spi_start(&spi_ssp1, &ssp_config_max2837);
|
||||||
spi_init(&rffc5071_spi, NULL);
|
spi_start(&rffc5071_spi, NULL);
|
||||||
|
|
||||||
rf_path_pin_setup();
|
rf_path_pin_setup();
|
||||||
|
|
||||||
|
@ -82,12 +82,16 @@ static void rffc5071_spi_target_init(spi_t* const spi) {
|
|||||||
gpio_set(PORT_MIXER_RESETX, PIN_MIXER_RESETX); /* active low */
|
gpio_set(PORT_MIXER_RESETX, PIN_MIXER_RESETX); /* active low */
|
||||||
}
|
}
|
||||||
|
|
||||||
void rffc5071_spi_init(spi_t* const spi, const void* const config) {
|
void rffc5071_spi_start(spi_t* const spi, const void* const config) {
|
||||||
(void)config;
|
(void)config;
|
||||||
rffc5071_spi_bus_init(spi);
|
rffc5071_spi_bus_init(spi);
|
||||||
rffc5071_spi_target_init(spi);
|
rffc5071_spi_target_init(spi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rffc5071_spi_stop(spi_t* const spi) {
|
||||||
|
(void)spi;
|
||||||
|
}
|
||||||
|
|
||||||
static void rffc5071_spi_serial_delay(spi_t* const spi) {
|
static void rffc5071_spi_serial_delay(spi_t* const spi) {
|
||||||
(void)spi;
|
(void)spi;
|
||||||
volatile uint32_t i;
|
volatile uint32_t i;
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
|
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
|
||||||
void rffc5071_spi_init(spi_t* const spi, const void* const config);
|
void rffc5071_spi_start(spi_t* const spi, const void* const config);
|
||||||
|
void rffc5071_spi_stop(spi_t* const spi);
|
||||||
void rffc5071_spi_transfer(spi_t* const spi, void* const data, const size_t count);
|
void rffc5071_spi_transfer(spi_t* const spi, void* const data, const size_t count);
|
||||||
void rffc5071_spi_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfer, const size_t count);
|
void rffc5071_spi_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfer, const size_t count);
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ isp_iap_ret_code_t iap_cmd_call(iap_cmd_res_t* iap_cmd_res)
|
|||||||
Alternative way to retrieve Part Id on MCU with no IAP
|
Alternative way to retrieve Part Id on MCU with no IAP
|
||||||
Read Serial No => Read Unique ID in SPIFI (only compatible with W25Q80BV
|
Read Serial No => Read Unique ID in SPIFI (only compatible with W25Q80BV
|
||||||
*/
|
*/
|
||||||
spi_init(spi_flash.spi, &ssp_config_w25q80bv);
|
spi_start(spi_flash.spi, &ssp_config_w25q80bv);
|
||||||
w25q80bv_setup(&spi_flash);
|
w25q80bv_setup(&spi_flash);
|
||||||
|
|
||||||
switch(iap_cmd_res->cmd_param.command_code)
|
switch(iap_cmd_res->cmd_param.command_code)
|
||||||
|
@ -21,8 +21,12 @@
|
|||||||
|
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
|
||||||
void spi_init(spi_t* const spi, const void* const config) {
|
void spi_start(spi_t* const spi, const void* const config) {
|
||||||
spi->init(spi, config);
|
spi->start(spi, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
void spi_stop(spi_t* const spi) {
|
||||||
|
spi->stop(spi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void spi_transfer(spi_t* const spi, void* const data, const size_t count) {
|
void spi_transfer(spi_t* const spi, void* const data, const size_t count) {
|
||||||
|
@ -35,12 +35,14 @@ typedef struct spi_t spi_t;
|
|||||||
struct spi_t {
|
struct spi_t {
|
||||||
void* const obj;
|
void* const obj;
|
||||||
const void* config;
|
const void* config;
|
||||||
void (*init)(spi_t* const spi, const void* const config);
|
void (*start)(spi_t* const spi, const void* const config);
|
||||||
|
void (*stop)(spi_t* const spi);
|
||||||
void (*transfer)(spi_t* const spi, void* const data, const size_t count);
|
void (*transfer)(spi_t* const spi, void* const data, const size_t count);
|
||||||
void (*transfer_gather)(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count);
|
void (*transfer_gather)(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count);
|
||||||
};
|
};
|
||||||
|
|
||||||
void spi_init(spi_t* const spi, const void* const config);
|
void spi_start(spi_t* const spi, const void* const config);
|
||||||
|
void spi_stop(spi_t* const spi);
|
||||||
void spi_transfer(spi_t* const spi, void* const data, const size_t count);
|
void spi_transfer(spi_t* const spi, void* const data, const size_t count);
|
||||||
void spi_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count);
|
void spi_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count);
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include <libopencm3/lpc43xx/rgu.h>
|
#include <libopencm3/lpc43xx/rgu.h>
|
||||||
#include <libopencm3/lpc43xx/ssp.h>
|
#include <libopencm3/lpc43xx/ssp.h>
|
||||||
|
|
||||||
void spi_ssp_init(spi_t* const spi, const void* const _config) {
|
void spi_ssp_start(spi_t* const spi, const void* const _config) {
|
||||||
const ssp_config_t* const config = _config;
|
const ssp_config_t* const config = _config;
|
||||||
|
|
||||||
if( spi->obj == (void*)SSP0_BASE ) {
|
if( spi->obj == (void*)SSP0_BASE ) {
|
||||||
@ -50,6 +50,10 @@ void spi_ssp_init(spi_t* const spi, const void* const _config) {
|
|||||||
spi->config = config;
|
spi->config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void spi_ssp_stop(spi_t* const spi) {
|
||||||
|
SSP_CR1(spi->obj) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void spi_ssp_wait_for_tx_fifo_not_full(spi_t* const spi) {
|
static void spi_ssp_wait_for_tx_fifo_not_full(spi_t* const spi) {
|
||||||
while( (SSP_SR(spi->obj) & SSP_SR_TNF) == 0 );
|
while( (SSP_SR(spi->obj) & SSP_SR_TNF) == 0 );
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,8 @@ typedef struct ssp_config_t {
|
|||||||
void (*unselect)(spi_t* const spi);
|
void (*unselect)(spi_t* const spi);
|
||||||
} ssp_config_t;
|
} ssp_config_t;
|
||||||
|
|
||||||
void spi_ssp_init(spi_t* const spi, const void* const config);
|
void spi_ssp_start(spi_t* const spi, const void* const config);
|
||||||
|
void spi_ssp_stop(spi_t* const spi);
|
||||||
void spi_ssp_transfer(spi_t* const spi, void* const data, const size_t count);
|
void spi_ssp_transfer(spi_t* const spi, void* const data, const size_t count);
|
||||||
void spi_ssp_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count);
|
void spi_ssp_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count);
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ usb_request_status_t usb_vendor_request_erase_spiflash(
|
|||||||
//FIXME This should refuse to run if executing from SPI flash.
|
//FIXME This should refuse to run if executing from SPI flash.
|
||||||
|
|
||||||
if (stage == USB_TRANSFER_STAGE_SETUP) {
|
if (stage == USB_TRANSFER_STAGE_SETUP) {
|
||||||
spi_init(spi_flash.spi, &ssp_config_w25q80bv);
|
spi_start(spi_flash.spi, &ssp_config_w25q80bv);
|
||||||
w25q80bv_setup(&spi_flash);
|
w25q80bv_setup(&spi_flash);
|
||||||
/* only chip erase is implemented */
|
/* only chip erase is implemented */
|
||||||
w25q80bv_chip_erase(&spi_flash);
|
w25q80bv_chip_erase(&spi_flash);
|
||||||
@ -66,7 +66,7 @@ usb_request_status_t usb_vendor_request_write_spiflash(
|
|||||||
} else {
|
} else {
|
||||||
usb_transfer_schedule_block(endpoint->out, &spiflash_buffer[0], len,
|
usb_transfer_schedule_block(endpoint->out, &spiflash_buffer[0], len,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
spi_init(spi_flash.spi, &ssp_config_w25q80bv);
|
spi_start(spi_flash.spi, &ssp_config_w25q80bv);
|
||||||
w25q80bv_setup(&spi_flash);
|
w25q80bv_setup(&spi_flash);
|
||||||
return USB_REQUEST_STATUS_OK;
|
return USB_REQUEST_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user