kopia lustrzana https://github.com/DL7AD/pecanpico9
Use SPI3 instead of SPI1, fixed radio/camera mutex bug
rodzic
4ad6bf098d
commit
3b496b3658
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
Ładowanie…
Reference in New Issue