|
|
@ -10,20 +10,20 @@ xs_gpio_t spi1_cs; |
|
|
|
void fpga_if_init() { // |
|
|
|
// fpga_if.spi1 = &hspi1; |
|
|
|
// fpga_if.spi2 = &hspi2; |
|
|
|
fpga_if.spi1 = &hspi2; |
|
|
|
fpga_if.spi2 = &hspi1; |
|
|
|
|
|
|
|
xs_gpio_init_as_output(&spi1_cs, PC6, kxs_gpio_nopull, false, true); |
|
|
|
uint8_t rxbuf[1]; |
|
|
|
|
|
|
|
/** |
|
|
|
* @brief 由于SPI在未传输第一帧数据之前,时钟线是低电平(理论上应该为高),这里 |
|
|
|
* 假传输一帧数据,使时钟线变为高电平。 |
|
|
|
*/ |
|
|
|
uint8_t rxbuf[1]; |
|
|
|
|
|
|
|
fpga_if.spi1 = &hspi2; |
|
|
|
xs_gpio_init_as_output(&spi1_cs, PB9, kxs_gpio_nopull, false, true); |
|
|
|
HAL_SPI_Receive(fpga_if.spi1, rxbuf, 1, 1000); |
|
|
|
HAL_SPI_Receive(fpga_if.spi2, rxbuf, 1, 1000); |
|
|
|
|
|
|
|
// xs_gpio_init_as_output(PA) |
|
|
|
// fpga_if.spi2 = &hspi1; |
|
|
|
// HAL_SPI_Receive(fpga_if.spi2, rxbuf, 1, 1000); |
|
|
|
|
|
|
|
#if 0 |
|
|
|
xs_gpio_init_as_input(&fpga_if.camera_sync_code_irq_io, fpga_if.camera_sync_code_irq_pin, kxs_gpio_pulldown, kxs_gpio_rising_irq, false); |
|
|
|
xs_gpio_init_as_input(&fpga_if.timecode_irq_io, fpga_if.timecode_irq_pin, kxs_gpio_pulldown, kxs_gpio_rising_irq, false); |
|
|
@ -82,8 +82,8 @@ void fpga_if_get_timecode(uint32_t *timecode0, uint32_t *timecode1) { |
|
|
|
* @param rxdata |
|
|
|
*/ |
|
|
|
static void _fpga_if_spi_write_data(SPI_HandleTypeDef *hspi, uint32_t add, uint32_t txdata, uint32_t *rxdata) { |
|
|
|
uint8_t txbuf[2 + 4] = {0}; |
|
|
|
uint8_t rxbuf[2 + 4] = {0}; |
|
|
|
uint8_t txbuf[2 + 5] = {0}; |
|
|
|
uint8_t rxbuf[2 + 5] = {0}; |
|
|
|
txbuf[0] = add & 0xFF; |
|
|
|
txbuf[1] = (add >> 8) & 0xFF; |
|
|
|
txbuf[1] |= 0x80; // write flag |
|
|
@ -92,7 +92,7 @@ static void _fpga_if_spi_write_data(SPI_HandleTypeDef *hspi, uint32_t add, uint3 |
|
|
|
txbuf[4] = (txdata >> 16) & 0xFF; |
|
|
|
txbuf[5] = (txdata >> 24) & 0xFF; |
|
|
|
|
|
|
|
HAL_SPI_TransmitReceive_DMA(hspi, txbuf, rxbuf, 2 + 4); |
|
|
|
HAL_SPI_TransmitReceive_DMA(hspi, txbuf, rxbuf, 2 + 5); |
|
|
|
while (HAL_SPI_GetState(hspi) != HAL_SPI_STATE_READY) { |
|
|
|
} |
|
|
|
|
|
|
@ -106,8 +106,8 @@ static void _fpga_if_spi_write_data(SPI_HandleTypeDef *hspi, uint32_t add, uint3 |
|
|
|
* @param rxdata |
|
|
|
*/ |
|
|
|
static void _fpga_if_spi_read_data(SPI_HandleTypeDef *hspi, uint32_t add, uint32_t *rxdata) { |
|
|
|
uint8_t txbuf[2 + 4] = {0}; |
|
|
|
uint8_t rxbuf[2 + 4] = {0}; |
|
|
|
uint8_t txbuf[2 + 5] = {0}; |
|
|
|
uint8_t rxbuf[2 + 5] = {0}; |
|
|
|
|
|
|
|
txbuf[0] = add & 0xFF; |
|
|
|
txbuf[1] = (add >> 8) & 0xFF; |
|
|
@ -115,24 +115,29 @@ static void _fpga_if_spi_read_data(SPI_HandleTypeDef *hspi, uint32_t add, uint32 |
|
|
|
txbuf[3] = 0; |
|
|
|
txbuf[4] = 0; |
|
|
|
txbuf[5] = 0; |
|
|
|
HAL_SPI_TransmitReceive_DMA(hspi, txbuf, rxbuf, 2 + 4); |
|
|
|
HAL_SPI_TransmitReceive_DMA(hspi, txbuf, rxbuf, 2 + 5); |
|
|
|
while (HAL_SPI_GetState(hspi) != HAL_SPI_STATE_READY) { |
|
|
|
} |
|
|
|
*rxdata = rxbuf[2] | (rxbuf[3] << 8) | (rxbuf[4] << 16) | (rxbuf[5] << 24); |
|
|
|
} |
|
|
|
|
|
|
|
void fpga_if_spi_write_data_01(uint32_t add, uint32_t txdata, uint32_t *rxdata) { |
|
|
|
// ZLOGI(TAG, "fpga_if_spi_write_data_01 add:%d txdata:%d", add, txdata); |
|
|
|
xs_gpio_write(&spi1_cs, false); |
|
|
|
_fpga_if_spi_write_data(fpga_if.spi1, add, txdata, rxdata); |
|
|
|
xs_gpio_write(&spi1_cs, true); |
|
|
|
} |
|
|
|
void fpga_if_spi_read_data_01(uint32_t add, uint32_t *rxdata) { |
|
|
|
xs_delay_us(1); |
|
|
|
xs_gpio_write(&spi1_cs, false); |
|
|
|
_fpga_if_spi_read_data(fpga_if.spi1, add, rxdata); |
|
|
|
xs_gpio_write(&spi1_cs, true); |
|
|
|
} |
|
|
|
void fpga_if_spi_write_data_02(uint32_t add, uint32_t txdata, uint32_t *rxdata) { _fpga_if_spi_write_data(fpga_if.spi2, add, txdata, rxdata); } |
|
|
|
void fpga_if_spi_read_data_02(uint32_t add, uint32_t *rxdata) { _fpga_if_spi_read_data(fpga_if.spi2, add, rxdata); } |
|
|
|
void fpga_if_spi_read_data_01(uint32_t add, uint32_t *rxdata) { _fpga_if_spi_read_data(fpga_if.spi1, add, rxdata); } |
|
|
|
void fpga_if_spi_write_data_02(uint32_t add, uint32_t txdata, uint32_t *rxdata) { |
|
|
|
if (!fpga_if.spi2) return; |
|
|
|
_fpga_if_spi_write_data(fpga_if.spi2, add, txdata, rxdata); |
|
|
|
} |
|
|
|
void fpga_if_spi_read_data_02(uint32_t add, uint32_t *rxdata) { |
|
|
|
if (!fpga_if.spi2) return; |
|
|
|
_fpga_if_spi_read_data(fpga_if.spi2, add, rxdata); |
|
|
|
} |
|
|
|
|
|
|
|
fpga_if_t *fpga_if_get_instance() { return &fpga_if; } |