Skip to content

Commit f11519c

Browse files
committed
test and fix SPI hardware write (still slow at the moment because of #695)
1 parent 3c6946e commit f11519c

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

targetlibs/nrf5x/nrf52_config/sdk_config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1268,7 +1268,7 @@
12681268

12691269

12701270
#ifndef SPI0_USE_EASY_DMA
1271-
#define SPI0_USE_EASY_DMA 1
1271+
#define SPI0_USE_EASY_DMA 0 // FIXME: This breaks SPI send on Espruino (just returns 0)
12721272
#endif
12731273

12741274
#endif //SPI0_ENABLED

targets/nrf5x/jshardware.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ unsigned int ticksSinceStart = 0;
8585
JshPinFunction pinStates[JSH_PIN_COUNT];
8686

8787
#if SPI_ENABLED
88-
static const NRF_SPI_Type *spi0 = NRF_DRV_SPI_PERIPHERAL(0);
88+
static const nrf_drv_spi_t spi0 = NRF_DRV_SPI_INSTANCE(0);
8989
bool spi0Initialised = false;
9090
#endif
9191

@@ -723,6 +723,11 @@ bool jshIsEventForPin(IOEvent *event, Pin pin) {
723723

724724
/** Is the given device initialised? */
725725
bool jshIsDeviceInitialised(IOEventFlags device) {
726+
#if SPI_ENABLED
727+
if (device==EV_SPI1) return spi0Initialised;
728+
#endif
729+
if (device==EV_I2C1) return twi1Initialised;
730+
if (device==EV_SERIAL1) return uartInitialised;
726731
return false;
727732
}
728733

@@ -830,12 +835,14 @@ void jshSPISetup(IOEventFlags device, JshSPIInfo *inf) {
830835
spi_config.frequency = freq;
831836
spi_config.mode = inf->spiMode;
832837
spi_config.bit_order = inf->spiMSB ? NRF_DRV_SPI_BIT_ORDER_MSB_FIRST : NRF_DRV_SPI_BIT_ORDER_LSB_FIRST;
833-
838+
if (jshIsPinValid(inf->pinSCK))
839+
spi_config.sck_pin = (uint32_t)pinInfo[inf->pinSCK].pin;
834840
if (jshIsPinValid(inf->pinMISO))
835841
spi_config.miso_pin = (uint32_t)pinInfo[inf->pinMISO].pin;
836842
if (jshIsPinValid(inf->pinMOSI))
837-
spi_config.mosi_pin = (uint32_t)pinInfo[inf->pinMOSI].pin;
838-
if (spi0Initialised) nrf_drv_twi_uninit(&spi0);
843+
spi_config.mosi_pin = (uint32_t)pinInfo[inf->pinMOSI].pin;
844+
845+
if (spi0Initialised) nrf_drv_spi_uninit(&spi0);
839846
spi0Initialised = true;
840847
// No event handler means SPI transfers are blocking
841848
uint32_t err_code = nrf_drv_spi_init(&spi0, &spi_config, NULL);
@@ -863,7 +870,9 @@ int jshSPISend(IOEventFlags device, int data) {
863870
if (device!=EV_SPI1) return -1;
864871
uint8_t tx = (uint8_t)data;
865872
uint8_t rx = 0;
866-
nrf_drv_spi_transfer(&spi0, &tx, 1, &rx, 1);
873+
uint32_t err_code = nrf_drv_spi_transfer(&spi0, &tx, 1, &rx, 1);
874+
if (err_code != NRF_SUCCESS)
875+
jsExceptionHere(JSET_INTERNALERROR, "SPI Send Error %d\n", err_code);
867876
return rx;
868877
#endif
869878
}
@@ -873,7 +882,9 @@ void jshSPISend16(IOEventFlags device, int data) {
873882
#if SPI_ENABLED
874883
if (device!=EV_SPI1) return;
875884
uint16_t tx = (uint16_t)data;
876-
nrf_drv_spi_transfer(&spi0, (uint8_t*)&tx, 1, 0, 0);
885+
uint32_t err_code = nrf_drv_spi_transfer(&spi0, (uint8_t*)&tx, 1, 0, 0);
886+
if (err_code != NRF_SUCCESS)
887+
jsExceptionHere(JSET_INTERNALERROR, "SPI Send Error %d\n", err_code);
877888
#endif
878889
}
879890

0 commit comments

Comments
 (0)