Move lepton init to MSP

This commit is contained in:
iabdalkader 2018-10-09 23:42:43 +02:00
parent 4c554e2147
commit 5d296cfa0c
3 changed files with 71 additions and 35 deletions

View File

@ -199,6 +199,34 @@
#define I2C_SPIN_DELAY 32
#define LEPTON_SPI (SPI3)
#define LEPTON_SPI_AF (GPIO_AF6_SPI3)
// SPI1/2/3 clock source is PLL2 (160MHz/8 == 20MHz).
#define LEPTON_SPI_PRESCALER (SPI_BAUDRATEPRESCALER_8)
#define LEPTON_SPI_PRESCALER (SPI_BAUDRATEPRESCALER_8)
#define LEPTON_SPI_IRQn (SPI3_IRQn)
#define LEPTON_SPI_IRQHandler (SPI3_IRQHandler)
#define LEPTON_SPI_DMA_IRQn (DMA1_Stream0_IRQn)
#define LEPTON_SPI_DMA_STREAM (DMA1_Stream0)
#define LEPTON_SPI_DMA_REQUEST (DMA_REQUEST_SPI3_RX)
#define LEPTON_SPI_DMA_IRQHandler (DMA1_Stream0_IRQHandler)
#define LEPTON_SPI_RESET() __HAL_RCC_SPI3_FORCE_RESET()
#define LEPTON_SPI_RELEASE() __HAL_RCC_SPI3_RELEASE_RESET()
#define LEPTON_SPI_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE()
#define LEPTON_SPI_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE()
#define LEPTON_SPI_SCLK_PIN (GPIO_PIN_3)
#define LEPTON_SPI_MISO_PIN (GPIO_PIN_4)
#define LEPTON_SPI_MOSI_PIN (GPIO_PIN_5)
#define LEPTON_SPI_SSEL_PIN (GPIO_PIN_15)
#define LEPTON_SPI_SCLK_PORT (GPIOB)
#define LEPTON_SPI_MISO_PORT (GPIOB)
#define LEPTON_SPI_MOSI_PORT (GPIOB)
#define LEPTON_SPI_SSEL_PORT (GPIOA)
#endif //__OMV_BOARDCONFIG_H__

View File

@ -59,12 +59,12 @@ static volatile uint32_t vospi_pid = 0;
static volatile uint32_t vospi_seg = 1;
static uint32_t vospi_packets = 60;
void SPI3_IRQHandler(void)
void LEPTON_SPI_IRQHandler(void)
{
HAL_SPI_IRQHandler(&SPIHandle);
}
void DMA1_Stream0_IRQHandler(void)
void LEPTON_SPI_DMA_IRQHandler(void)
{
HAL_DMA_IRQHandler(SPIHandle.hdmarx);
}
@ -74,7 +74,7 @@ static void lepton_sync()
HAL_SPI_Abort(&SPIHandle);
// Disable DMA IRQ
HAL_NVIC_DisableIRQ(DMA1_Stream0_IRQn);
HAL_NVIC_DisableIRQ(LEPTON_SPI_DMA_IRQn);
debug_printf("resync...\n");
systick_sleep(200);
@ -83,7 +83,7 @@ static void lepton_sync()
vospi_pid = VOSPI_FIRST_PACKET;
vospi_seg = VOSPI_FIRST_SEGMENT;
HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
HAL_NVIC_EnableIRQ(LEPTON_SPI_DMA_IRQn);
HAL_SPI_Receive_DMA(&SPIHandle, vospi_packet, VOSPI_PACKET_SIZE);
}
@ -451,33 +451,15 @@ int lepton_init(sensor_t *sensor)
SENSOR_HW_FLAGS_SET(sensor, SENSOR_HW_FLAGS_FSYNC, 0);
SENSOR_HW_FLAGS_SET(sensor, SENSOR_HW_FLAGS_JPEGE, 0);
GPIO_InitTypeDef GPIO_Init;
GPIO_Init.Pull = GPIO_PULLUP;
GPIO_Init.Mode = GPIO_MODE_AF_PP;
GPIO_Init.Alternate = GPIO_AF6_SPI3;
GPIO_Init.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_Init.Pin = GPIO_PIN_3;
HAL_GPIO_Init(GPIOB, &GPIO_Init);
GPIO_Init.Pin = GPIO_PIN_4;
HAL_GPIO_Init(GPIOB, &GPIO_Init);
GPIO_Init.Pin = GPIO_PIN_5;
HAL_GPIO_Init(GPIOB, &GPIO_Init);
GPIO_Init.Pin = GPIO_PIN_15;
HAL_GPIO_Init(GPIOA, &GPIO_Init);
// Configure the DMA handler for Transmission process
DMAHandle.Instance = DMA1_Stream0;
DMAHandle.Init.Request = DMA_REQUEST_SPI3_RX;
DMAHandle.Instance = LEPTON_SPI_DMA_STREAM;
DMAHandle.Init.Request = LEPTON_SPI_DMA_REQUEST;
DMAHandle.Init.Mode = DMA_CIRCULAR;
DMAHandle.Init.Priority = DMA_PRIORITY_HIGH;
DMAHandle.Init.Direction = DMA_PERIPH_TO_MEMORY;
// When the DMA is configured in direct mode (the FIFO is disabled), the source and
// destination transfer widths are equal, and both defined by PSIZE (MSIZE is ignored).
// Additionally, the burst transfers are not possible (MBURST and PBURST are ignored).
// Additionally, burst transfers are not possible (MBURST and PBURST are both ignored).
DMAHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
DMAHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
// Note MBURST and PBURST are ignored.
@ -489,8 +471,8 @@ int lepton_init(sensor_t *sensor)
DMAHandle.Init.PeriphInc = DMA_PINC_DISABLE;
// NVIC configuration for DMA transfer complete interrupt
NVIC_SetPriority(DMA1_Stream0_IRQn, IRQ_PRI_DMA21);
HAL_NVIC_DisableIRQ(DMA1_Stream0_IRQn);
NVIC_SetPriority(LEPTON_SPI_DMA_IRQn, IRQ_PRI_DMA21);
HAL_NVIC_DisableIRQ(LEPTON_SPI_DMA_IRQn);
HAL_DMA_DeInit(&DMAHandle);
if (HAL_DMA_Init(&DMAHandle) != HAL_OK) {
@ -499,7 +481,7 @@ int lepton_init(sensor_t *sensor)
}
memset(&SPIHandle, 0, sizeof(SPIHandle));
SPIHandle.Instance = SPI3;
SPIHandle.Instance = LEPTON_SPI;
SPIHandle.Init.NSS = SPI_NSS_HARD_OUTPUT;
SPIHandle.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
SPIHandle.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
@ -515,11 +497,10 @@ int lepton_init(sensor_t *sensor)
// Recommanded setting to avoid glitches
SPIHandle.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
__HAL_RCC_SPI3_CLK_ENABLE();
if (HAL_SPI_Init(&SPIHandle) != HAL_OK) {
__HAL_RCC_SPI3_FORCE_RESET();
__HAL_RCC_SPI3_RELEASE_RESET();
__HAL_RCC_SPI3_CLK_DISABLE();
LEPTON_SPI_RESET();
LEPTON_SPI_RELEASE();
LEPTON_SPI_CLK_DISABLE();
return -1;
}
@ -527,8 +508,8 @@ int lepton_init(sensor_t *sensor)
__HAL_LINKDMA(&SPIHandle, hdmarx, DMAHandle);
// NVIC configuration for SPI transfer complete interrupt
NVIC_SetPriority(SPI3_IRQn, IRQ_PRI_DCMI);
HAL_NVIC_EnableIRQ(SPI3_IRQn);
NVIC_SetPriority(LEPTON_SPI_IRQn, IRQ_PRI_DCMI);
HAL_NVIC_EnableIRQ(LEPTON_SPI_IRQn);
return 0;
}

View File

@ -200,6 +200,33 @@ void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi)
}
}
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
#if defined(LEPTON_SPI)
if (hspi->Instance == LEPTON_SPI) {
LEPTON_SPI_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pull = GPIO_PULLUP;
GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.Alternate = LEPTON_SPI_AF;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStructure.Pin = LEPTON_SPI_SCLK_PIN;
HAL_GPIO_Init(LEPTON_SPI_SCLK_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = LEPTON_SPI_MISO_PIN;
HAL_GPIO_Init(LEPTON_SPI_MISO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = LEPTON_SPI_MOSI_PIN;
HAL_GPIO_Init(LEPTON_SPI_MOSI_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = LEPTON_SPI_SSEL_PIN;
HAL_GPIO_Init(LEPTON_SPI_SSEL_PORT, &GPIO_InitStructure);
}
#endif
}
void HAL_MspDeInit(void)
{