zhaohe 2 years ago
parent
commit
198fd1f355
  1. 6
      Core/Inc/stm32f4xx_it.h
  2. 13
      Core/Src/dma.c
  3. 100
      Core/Src/spi.c
  4. 90
      Core/Src/stm32f4xx_it.c
  5. 3
      usrc/base_service/config_service.c
  6. 66
      usrc/base_service/fpga_if.c
  7. 1
      usrc/base_service/fpga_if.h
  8. 2
      usrc/main.cpp
  9. 2
      usrc/service/extern_if_service.c
  10. 0
      usrc/service/global_flag.c
  11. 0
      usrc/service/global_flag.h
  12. 8
      usrc/service/reg_manager.c
  13. 4
      usrc/service/report_generator_service.c
  14. 2
      usrc/service/report_generator_service.h
  15. 61
      xsync_stm32.ioc

6
Core/Inc/stm32f4xx_it.h

@ -52,10 +52,16 @@ void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void DebugMon_Handler(void);
void DMA1_Stream3_IRQHandler(void);
void DMA1_Stream4_IRQHandler(void);
void TIM1_TRG_COM_TIM11_IRQHandler(void);
void SPI1_IRQHandler(void);
void SPI2_IRQHandler(void);
void TIM6_DAC_IRQHandler(void);
void TIM7_IRQHandler(void);
void DMA2_Stream0_IRQHandler(void);
void DMA2_Stream2_IRQHandler(void);
void DMA2_Stream3_IRQHandler(void);
void ETH_IRQHandler(void);
/* USER CODE BEGIN EFP */

13
Core/Src/dma.c

@ -41,11 +41,24 @@ void MX_DMA_Init(void)
/* DMA controller clock enable */
__HAL_RCC_DMA2_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
/* DMA interrupt init */
/* DMA1_Stream3_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
/* DMA1_Stream4_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn);
/* DMA2_Stream0_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
/* DMA2_Stream2_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
/* DMA2_Stream3_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn);
}

100
Core/Src/spi.c

@ -26,6 +26,10 @@
SPI_HandleTypeDef hspi1;
SPI_HandleTypeDef hspi2;
DMA_HandleTypeDef hdma_spi1_rx;
DMA_HandleTypeDef hdma_spi1_tx;
DMA_HandleTypeDef hdma_spi2_tx;
DMA_HandleTypeDef hdma_spi2_rx;
/* SPI1 init function */
void MX_SPI1_Init(void)
@ -45,7 +49,7 @@ void MX_SPI1_Init(void)
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi1.Init.FirstBit = SPI_FIRSTBIT_LSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
@ -77,7 +81,7 @@ void MX_SPI2_Init(void)
hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi2.Init.NSS = SPI_NSS_HARD_OUTPUT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
hspi2.Init.FirstBit = SPI_FIRSTBIT_LSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
@ -126,6 +130,46 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* SPI1 DMA Init */
/* SPI1_RX Init */
hdma_spi1_rx.Instance = DMA2_Stream0;
hdma_spi1_rx.Init.Channel = DMA_CHANNEL_3;
hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_spi1_rx.Init.Mode = DMA_NORMAL;
hdma_spi1_rx.Init.Priority = DMA_PRIORITY_LOW;
hdma_spi1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(spiHandle,hdmarx,hdma_spi1_rx);
/* SPI1_TX Init */
hdma_spi1_tx.Instance = DMA2_Stream3;
hdma_spi1_tx.Init.Channel = DMA_CHANNEL_3;
hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_spi1_tx.Init.Mode = DMA_NORMAL;
hdma_spi1_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_spi1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx);
/* SPI1 interrupt Init */
HAL_NVIC_SetPriority(SPI1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI1_IRQn);
/* USER CODE BEGIN SPI1_MspInit 1 */
/* USER CODE END SPI1_MspInit 1 */
@ -160,6 +204,46 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* SPI2 DMA Init */
/* SPI2_TX Init */
hdma_spi2_tx.Instance = DMA1_Stream4;
hdma_spi2_tx.Init.Channel = DMA_CHANNEL_0;
hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_spi2_tx.Init.Mode = DMA_NORMAL;
hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(spiHandle,hdmatx,hdma_spi2_tx);
/* SPI2_RX Init */
hdma_spi2_rx.Instance = DMA1_Stream3;
hdma_spi2_rx.Init.Channel = DMA_CHANNEL_0;
hdma_spi2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_spi2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi2_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_spi2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_spi2_rx.Init.Mode = DMA_NORMAL;
hdma_spi2_rx.Init.Priority = DMA_PRIORITY_LOW;
hdma_spi2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_spi2_rx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(spiHandle,hdmarx,hdma_spi2_rx);
/* SPI2 interrupt Init */
HAL_NVIC_SetPriority(SPI2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI2_IRQn);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
@ -187,6 +271,12 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_5);
/* SPI1 DMA DeInit */
HAL_DMA_DeInit(spiHandle->hdmarx);
HAL_DMA_DeInit(spiHandle->hdmatx);
/* SPI1 interrupt Deinit */
HAL_NVIC_DisableIRQ(SPI1_IRQn);
/* USER CODE BEGIN SPI1_MspDeInit 1 */
/* USER CODE END SPI1_MspDeInit 1 */
@ -209,6 +299,12 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_9);
/* SPI2 DMA DeInit */
HAL_DMA_DeInit(spiHandle->hdmatx);
HAL_DMA_DeInit(spiHandle->hdmarx);
/* SPI2 interrupt Deinit */
HAL_NVIC_DisableIRQ(SPI2_IRQn);
/* USER CODE BEGIN SPI2_MspDeInit 1 */
/* USER CODE END SPI2_MspDeInit 1 */

90
Core/Src/stm32f4xx_it.c

@ -56,6 +56,12 @@
/* External variables --------------------------------------------------------*/
extern ETH_HandleTypeDef heth;
extern DMA_HandleTypeDef hdma_spi1_rx;
extern DMA_HandleTypeDef hdma_spi1_tx;
extern DMA_HandleTypeDef hdma_spi2_tx;
extern DMA_HandleTypeDef hdma_spi2_rx;
extern SPI_HandleTypeDef hspi1;
extern SPI_HandleTypeDef hspi2;
extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7;
@ -165,6 +171,34 @@ void DebugMon_Handler(void)
/******************************************************************************/
/**
* @brief This function handles DMA1 stream3 global interrupt.
*/
void DMA1_Stream3_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Stream3_IRQn 0 */
/* USER CODE END DMA1_Stream3_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi2_rx);
/* USER CODE BEGIN DMA1_Stream3_IRQn 1 */
/* USER CODE END DMA1_Stream3_IRQn 1 */
}
/**
* @brief This function handles DMA1 stream4 global interrupt.
*/
void DMA1_Stream4_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Stream4_IRQn 0 */
/* USER CODE END DMA1_Stream4_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi2_tx);
/* USER CODE BEGIN DMA1_Stream4_IRQn 1 */
/* USER CODE END DMA1_Stream4_IRQn 1 */
}
/**
* @brief This function handles TIM1 trigger and commutation interrupts and TIM11 global interrupt.
*/
void TIM1_TRG_COM_TIM11_IRQHandler(void)
@ -180,6 +214,34 @@ void TIM1_TRG_COM_TIM11_IRQHandler(void)
}
/**
* @brief This function handles SPI1 global interrupt.
*/
void SPI1_IRQHandler(void)
{
/* USER CODE BEGIN SPI1_IRQn 0 */
/* USER CODE END SPI1_IRQn 0 */
HAL_SPI_IRQHandler(&hspi1);
/* USER CODE BEGIN SPI1_IRQn 1 */
/* USER CODE END SPI1_IRQn 1 */
}
/**
* @brief This function handles SPI2 global interrupt.
*/
void SPI2_IRQHandler(void)
{
/* USER CODE BEGIN SPI2_IRQn 0 */
/* USER CODE END SPI2_IRQn 0 */
HAL_SPI_IRQHandler(&hspi2);
/* USER CODE BEGIN SPI2_IRQn 1 */
/* USER CODE END SPI2_IRQn 1 */
}
/**
* @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts.
*/
void TIM6_DAC_IRQHandler(void)
@ -208,6 +270,20 @@ void TIM7_IRQHandler(void)
}
/**
* @brief This function handles DMA2 stream0 global interrupt.
*/
void DMA2_Stream0_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Stream0_IRQn 0 */
/* USER CODE END DMA2_Stream0_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi1_rx);
/* USER CODE BEGIN DMA2_Stream0_IRQn 1 */
/* USER CODE END DMA2_Stream0_IRQn 1 */
}
/**
* @brief This function handles DMA2 stream2 global interrupt.
*/
void DMA2_Stream2_IRQHandler(void)
@ -222,6 +298,20 @@ void DMA2_Stream2_IRQHandler(void)
}
/**
* @brief This function handles DMA2 stream3 global interrupt.
*/
void DMA2_Stream3_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Stream3_IRQn 0 */
/* USER CODE END DMA2_Stream3_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi1_tx);
/* USER CODE BEGIN DMA2_Stream3_IRQn 1 */
/* USER CODE END DMA2_Stream3_IRQn 1 */
}
/**
* @brief This function handles Ethernet global interrupt.
*/
void ETH_IRQHandler(void)

3
usrc/base_service/config_service.c

@ -60,12 +60,13 @@ void config_init(void) {
dump_config(&_config);
}
config_t *config_get(void) { return &_config; }
void config_flush(void) { xs_flash_flush(); }
void config_flush(void) { xs_flash_flush(); }
void config_factory_reset(void) { xs_flash_factory_reset(); }
void config_generate_random_mac(void) {
static mac_t mac;
xs_id_generate_random_mac(&mac);
ZLOGI(TAG, "gen random mac is %02x:%02x:%02x:%02x:%02x:%02x", mac.mac[0], mac.mac[1], mac.mac[2], mac.mac[3], mac.mac[4], mac.mac[5]);
memset(&_config.mac[0], 0, sizeof(_config.mac));
memcpy(&_config.mac[0], mac.mac, 6);
}

66
usrc/base_service/fpga_if.c

@ -3,11 +3,26 @@
/**
* @brief fpga_if初始化
*/
#define TAG "fpga_if"
static fpga_if_t fpga_if;
void fpga_if_init() { //
fpga_if.spi1 = &hspi1;
fpga_if.spi2 = &hspi2;
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);
/**
* @brief SPI在未传输第一帧数据之前线()
* 使线
*/
uint8_t rxbuf[1];
HAL_SPI_Receive(fpga_if.spi1, rxbuf, 1, 1000);
HAL_SPI_Receive(fpga_if.spi2, rxbuf, 1, 1000);
// xs_gpio_init_as_output(PA)
#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);
@ -68,6 +83,7 @@ void fpga_if_get_timecode(uint32_t *timecode0, uint32_t *timecode1) {
*/
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};
txbuf[0] = add & 0xFF;
txbuf[1] = (add >> 8) & 0xFF;
txbuf[1] |= 0x80; // write flag
@ -76,8 +92,12 @@ 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(hspi, txbuf, txbuf, 2 + 4, 1000);
*rxdata = txbuf[2] | (txbuf[3] << 8) | (txbuf[4] << 16) | (txbuf[5] << 24);
HAL_SPI_TransmitReceive_DMA(hspi, txbuf, rxbuf, 2 + 4);
while (HAL_SPI_GetState(hspi) != HAL_SPI_STATE_READY) {
}
// HAL_SPI_Transmit(hspi, txbuf, 2 + 4, 1000);
*rxdata = rxbuf[2] | (rxbuf[3] << 8) | (rxbuf[4] << 16) | (rxbuf[5] << 24);
}
/**
* @brief SPI寄存器读指令
@ -87,19 +107,31 @@ static void _fpga_if_spi_write_data(SPI_HandleTypeDef *hspi, uint32_t add, uint3
*/
static void _fpga_if_spi_read_data(SPI_HandleTypeDef *hspi, uint32_t add, uint32_t *rxdata) {
uint8_t txbuf[2 + 4] = {0};
txbuf[0] = add & 0xFF;
txbuf[1] = (add >> 8) & 0xFF;
txbuf[2] = 0;
txbuf[3] = 0;
txbuf[4] = 0;
txbuf[5] = 0;
HAL_SPI_TransmitReceive(hspi, txbuf, txbuf, 2 + 4, 1000);
*rxdata = txbuf[2] | (txbuf[3] << 8) | (txbuf[4] << 16) | (txbuf[5] << 24);
}
uint8_t rxbuf[2 + 4] = {0};
void fpga_if_spi_write_data_01(uint32_t add, uint32_t txdata, uint32_t *rxdata) { _fpga_if_spi_write_data(fpga_if.spi1, add, txdata, rxdata); }
void fpga_if_spi_read_data_01(uint32_t add, uint32_t *rxdata) { _fpga_if_spi_read_data(fpga_if.spi1, add, rxdata); }
txbuf[0] = add & 0xFF;
txbuf[1] = (add >> 8) & 0xFF;
txbuf[2] = 0;
txbuf[3] = 0;
txbuf[4] = 0;
txbuf[5] = 0;
HAL_SPI_TransmitReceive_DMA(hspi, txbuf, rxbuf, 2 + 4);
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_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); }

1
usrc/base_service/fpga_if.h

@ -6,7 +6,6 @@
extern "C" {
#endif
typedef struct {
/**
* @brief Ö¸ÁîSPI ½Ó¿Ú

2
usrc/main.cpp

@ -137,6 +137,8 @@ void umain() {
ZLOGI(TAG, "system init done");
while (true) {
// HAL_SPI_Transmit(&hspi1, (uint8_t*)"hello", 5, 1000);
// HAL_SPI_Transmit(&hspi2, (uint8_t*)"hello", 5, 1000);
osDelay(10);
debug_light_ctrl();
// factory_reset_key_detect();

2
usrc/service/extern_if_service.c

@ -95,7 +95,7 @@ static void udp_on_packet(udp_t *server, struct sockaddr_in *client, uint8_t *da
receipt[0] = 0; // receipt
receipt[1] = reg_manager_read_reg(regadd); // regdata
ZLOGI(TAG, "regadd: %d, regdata: 0x%08x", regadd, receipt[1]);
// ZLOGI(TAG, "regadd: %d, regdata: 0x%08x", regadd, receipt[1]);
create_and_send_receipt(&cx, receipt, 2);
} else if (rxpacket->cmd == kxsync_packet_type_reg_write) {
uint32_t regadd = rxpacket->data[0];

0
usrc/service/global_flag.c

0
usrc/service/global_flag.h

8
usrc/service/reg_manager.c

@ -17,6 +17,7 @@ void reg_manager_init() {}
static uint32_t doaction(uint32_t action, uint32_t val) {
if (action == xsync_stm32_action_generator_new_mac) {
config_generate_random_mac();
config_flush();
return 0;
} else if (action == xsync_stm32_action_factory_reset) {
config_factory_reset();
@ -85,7 +86,7 @@ uint32_t reg_manager_read_reg(uint32_t addr) {
/*******************************************************************************
* FPGA芯片寄存器读写 *
*******************************************************************************/
else if (addr > XYSNC_REG_FPGA_REG_START) {
else if (addr >= XYSNC_REG_FPGA_REG_START) {
fpga_if_spi_read_data_01(addr, &readbak);
}
return readbak;
@ -121,8 +122,7 @@ uint32_t reg_manager_write_reg(uint32_t addr, uint32_t value) {
config_get()->netmask = value;
readbak = config_get()->netmask;
} else if (addr == kxsync_reg_stm32_camera_sync_signal_count) {
//
report_generator_service_xsync_clear_count();
report_generator_service_xsync_set_count(value);
readbak = report_generator_service_xsync_get_count();
} else if (addr == kxsync_reg_stm32_config0) {
readbak = config_get()->config0;
@ -142,7 +142,7 @@ uint32_t reg_manager_write_reg(uint32_t addr, uint32_t value) {
/*******************************************************************************
* FPGA芯片寄存器读写 *
*******************************************************************************/
else if (addr > XYSNC_REG_FPGA_REG_START) {
else if (addr >= XYSNC_REG_FPGA_REG_START) {
fpga_if_spi_write_data_01(addr, value, &readbak);
}

4
usrc/service/report_generator_service.c

@ -95,5 +95,7 @@ void report_generator_service_init() {
m_xync_trigger_input_off = fpga_if_get_instance()->camera_sync_code_irq_io.pinoff;
}
void report_generator_service_xsync_clear_count(void) { m_sync_count = 0; }
void report_generator_service_xsync_set_count(uint32_t count){
m_sync_count = count;
}
uint32_t report_generator_service_xsync_get_count(void) { return m_sync_count; }

2
usrc/service/report_generator_service.h

@ -34,7 +34,7 @@ void report_generator_service_irq_trigger(uint16_t gpiopin);
/**
* @brief xync计数
*/
void report_generator_service_xsync_clear_count(void);
void report_generator_service_xsync_set_count(uint32_t count);
/**
* @brief xync计数
*

61
xsync_stm32.ioc

@ -3,7 +3,51 @@ CAD.formats=
CAD.pinconfig=
CAD.provider=
Dma.Request0=USART1_RX
Dma.RequestsNb=1
Dma.Request1=SPI2_TX
Dma.Request2=SPI2_RX
Dma.Request3=SPI1_RX
Dma.Request4=SPI1_TX
Dma.RequestsNb=5
Dma.SPI1_RX.3.Direction=DMA_PERIPH_TO_MEMORY
Dma.SPI1_RX.3.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.SPI1_RX.3.Instance=DMA2_Stream0
Dma.SPI1_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.SPI1_RX.3.MemInc=DMA_MINC_ENABLE
Dma.SPI1_RX.3.Mode=DMA_NORMAL
Dma.SPI1_RX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.SPI1_RX.3.PeriphInc=DMA_PINC_DISABLE
Dma.SPI1_RX.3.Priority=DMA_PRIORITY_LOW
Dma.SPI1_RX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
Dma.SPI1_TX.4.Direction=DMA_MEMORY_TO_PERIPH
Dma.SPI1_TX.4.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.SPI1_TX.4.Instance=DMA2_Stream3
Dma.SPI1_TX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.SPI1_TX.4.MemInc=DMA_MINC_ENABLE
Dma.SPI1_TX.4.Mode=DMA_NORMAL
Dma.SPI1_TX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.SPI1_TX.4.PeriphInc=DMA_PINC_DISABLE
Dma.SPI1_TX.4.Priority=DMA_PRIORITY_LOW
Dma.SPI1_TX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
Dma.SPI2_RX.2.Direction=DMA_PERIPH_TO_MEMORY
Dma.SPI2_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.SPI2_RX.2.Instance=DMA1_Stream3
Dma.SPI2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.SPI2_RX.2.MemInc=DMA_MINC_ENABLE
Dma.SPI2_RX.2.Mode=DMA_NORMAL
Dma.SPI2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.SPI2_RX.2.PeriphInc=DMA_PINC_DISABLE
Dma.SPI2_RX.2.Priority=DMA_PRIORITY_LOW
Dma.SPI2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
Dma.SPI2_TX.1.Direction=DMA_MEMORY_TO_PERIPH
Dma.SPI2_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.SPI2_TX.1.Instance=DMA1_Stream4
Dma.SPI2_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.SPI2_TX.1.MemInc=DMA_MINC_ENABLE
Dma.SPI2_TX.1.Mode=DMA_NORMAL
Dma.SPI2_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.SPI2_TX.1.PeriphInc=DMA_PINC_DISABLE
Dma.SPI2_TX.1.Priority=DMA_PRIORITY_LOW
Dma.SPI2_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.USART1_RX.0.Instance=DMA2_Stream2
@ -118,7 +162,11 @@ Mcu.UserName=STM32F407VETx
MxCube.Version=6.7.0
MxDb.Version=DB.6.0.70
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Stream4_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.ETH_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.ForceEnableDMAVector=true
@ -127,6 +175,8 @@ NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SPI1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.SPI2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false
NVIC.SavedPendsvIrqHandlerGenerated=true
NVIC.SavedSvcallIrqHandlerGenerated=true
@ -259,22 +309,23 @@ RCC.VCOI2SOutputFreq_Value=128000000
RCC.VCOInputFreq_Value=2000000
RCC.VCOOutputFreq_Value=288000000
RCC.VcooutputI2S=64000000
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
SPI1.CLKPhase=SPI_PHASE_2EDGE
SPI1.CLKPolarity=SPI_POLARITY_HIGH
SPI1.CalculateBaudRate=18.0 MBits/s
SPI1.CalculateBaudRate=4.5 MBits/s
SPI1.Direction=SPI_DIRECTION_2LINES
SPI1.FirstBit=SPI_FIRSTBIT_LSB
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,BaudRatePrescaler,FirstBit,CLKPolarity,CLKPhase
SPI1.Mode=SPI_MODE_MASTER
SPI1.VirtualNSS=VM_NSSHARD
SPI1.VirtualType=VM_MASTER
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8
SPI2.CLKPhase=SPI_PHASE_2EDGE
SPI2.CLKPolarity=SPI_POLARITY_HIGH
SPI2.CalculateBaudRate=18.0 MBits/s
SPI2.CalculateBaudRate=4.5 MBits/s
SPI2.Direction=SPI_DIRECTION_2LINES
SPI2.FirstBit=SPI_FIRSTBIT_LSB
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,CLKPolarity,CLKPhase,FirstBit
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,CLKPolarity,CLKPhase,FirstBit,BaudRatePrescaler
SPI2.Mode=SPI_MODE_MASTER
SPI2.VirtualNSS=VM_NSSHARD
SPI2.VirtualType=VM_MASTER

Loading…
Cancel
Save