Use SPI3 instead of SPI1, fixed radio/camera mutex bug

Develop
Sven Steudte 2017-09-07 01:02:45 +02:00
rodzic 4ad6bf098d
commit 3b496b3658
3 zmienionych plików z 27 dodań i 34 usunięć

Wyświetl plik

@ -32,9 +32,9 @@ void Si4464_Init(void) {
chThdSleepMilliseconds(10);
// Configure SPI pins
palSetLineMode(LINE_SPI_SCK, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); // SCK
palSetLineMode(LINE_SPI_MISO, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); // MISO
palSetLineMode(LINE_SPI_MOSI, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); // MOSI
palSetLineMode(LINE_SPI_SCK, PAL_MODE_ALTERNATE(6) | PAL_STM32_OSPEED_HIGHEST); // SCK
palSetLineMode(LINE_SPI_MISO, PAL_MODE_ALTERNATE(6) | PAL_STM32_OSPEED_HIGHEST); // MISO
palSetLineMode(LINE_SPI_MOSI, PAL_MODE_ALTERNATE(6) | PAL_STM32_OSPEED_HIGHEST); // MOSI
palSetLineMode(LINE_RADIO_CS, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); // RADIO CS
palSetLineMode(LINE_RADIO_SDN, PAL_MODE_OUTPUT_PUSHPULL); // RADIO SDN
palSetLine(LINE_RADIO_CS);
@ -62,12 +62,12 @@ void Si4464_write(uint8_t* txData, uint32_t len) {
uint8_t rxData[len];
// SPI transfer
spiAcquireBus(&SPID1);
spiStart(&SPID1, getSPIDriver());
spiAcquireBus(&SPID3);
spiStart(&SPID3, getSPIDriver());
spiSelect(&SPID1);
spiExchange(&SPID1, len, txData, rxData);
spiUnselect(&SPID1);
spiSelect(&SPID3);
spiExchange(&SPID3, len, txData, rxData);
spiUnselect(&SPID3);
// Reqest ACK by Si4464
rxData[1] = 0x00;
@ -77,12 +77,12 @@ void Si4464_write(uint8_t* txData, uint32_t len) {
uint8_t rx_ready[] = {0x44};
// SPI transfer
spiSelect(&SPID1);
spiExchange(&SPID1, 3, rx_ready, rxData);
spiUnselect(&SPID1);
spiSelect(&SPID3);
spiExchange(&SPID3, 3, rx_ready, rxData);
spiUnselect(&SPID3);
}
spiStop(&SPID1);
spiReleaseBus(&SPID1);
spiStop(&SPID3);
spiReleaseBus(&SPID3);
}
/**
@ -92,12 +92,12 @@ void Si4464_read(uint8_t* txData, uint32_t txlen, uint8_t* rxData, uint32_t rxle
// Transmit data by SPI
uint8_t null_spi[txlen];
// SPI transfer
spiAcquireBus(&SPID1);
spiStart(&SPID1, getSPIDriver());
spiAcquireBus(&SPID3);
spiStart(&SPID3, getSPIDriver());
spiSelect(&SPID1);
spiExchange(&SPID1, txlen, txData, null_spi);
spiUnselect(&SPID1);
spiSelect(&SPID3);
spiExchange(&SPID3, txlen, txData, null_spi);
spiUnselect(&SPID3);
// Reqest ACK by Si4464
rxData[1] = 0x00;
@ -108,12 +108,12 @@ void Si4464_read(uint8_t* txData, uint32_t txlen, uint8_t* rxData, uint32_t rxle
rx_ready[0] = 0x44;
// SPI transfer
spiSelect(&SPID1);
spiExchange(&SPID1, rxlen, rx_ready, rxData);
spiUnselect(&SPID1);
spiSelect(&SPID3);
spiExchange(&SPID3, rxlen, rx_ready, rxData);
spiUnselect(&SPID3);
}
spiStop(&SPID1);
spiReleaseBus(&SPID1);
spiStop(&SPID3);
spiReleaseBus(&SPID3);
}
void setFrequency(uint32_t freq, uint16_t shift) {

Wyświetl plik

@ -198,9 +198,9 @@
/*
* SPI driver system settings.
*/
#define STM32_SPI_USE_SPI1 TRUE
#define STM32_SPI_USE_SPI1 FALSE
#define STM32_SPI_USE_SPI2 FALSE
#define STM32_SPI_USE_SPI3 FALSE
#define STM32_SPI_USE_SPI3 TRUE
#define STM32_SPI_USE_SPI4 FALSE
#define STM32_SPI_USE_SPI5 FALSE
#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)

Wyświetl plik

@ -415,7 +415,6 @@ void encode_ssdv(const uint8_t *image, uint32_t image_len, module_conf_t* conf,
i++;
}
chThdSleepMilliseconds(7000); // FIXME: To fix bug temporarly
}
THD_FUNCTION(imgThread, arg) {
@ -436,10 +435,6 @@ THD_FUNCTION(imgThread, arg) {
// Lock camera FIXME: Removed for testing
TRACE_INFO("IMG > Lock camera");
chMtxLock(&camera_mtx);
TRACE_INFO("IMG > Locked camera");
//TRACE_INFO("IMG > Lock radio");
//lockRadio(); // Lock radio because SPI and pseudo DCMI use the same DMA
//TRACE_INFO("IMG > Locked radio");
uint8_t tries;
bool status = false;
@ -466,7 +461,9 @@ THD_FUNCTION(imgThread, arg) {
// Sample data from DCMI through DMA into RAM
tries = 5; // Try 5 times at maximum
do { // Try capturing image until capture successful
lockRadio(); // Lock radio
status = OV5640_Snapshot2RAM();
unlockRadio(); // Unlock radio
} while(!status && --tries);
conf->ssdv_conf.res--; // Decrement resolution in next attempt (if status==false)
@ -509,12 +506,8 @@ THD_FUNCTION(imgThread, arg) {
}
// Unlock camera FIXME: Removed for testing
//TRACE_INFO("IMG > Unlock radio");
//unlockRadio(); // Unlock radio
//TRACE_INFO("IMG > Unlocked radio");
TRACE_INFO("IMG > Unlock camera");
chMtxUnlock(&camera_mtx);
TRACE_INFO("IMG > Unlocked camera");
// Encode/Transmit SSDV if image sampled successfully
if(status) {