SPI: Interface: Rename init()->start(), add stop().

This commit is contained in:
Jared Boone
2014-11-13 09:51:48 -08:00
parent 81dfde2a29
commit 05b8c4c153
9 changed files with 37 additions and 18 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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);

View File

@ -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)

View File

@ -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) {

View File

@ -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);

View File

@ -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 );
} }

View File

@ -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);

View File

@ -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;
} }