# HG changeset patch # User Ideenmodellierer # Date 1551542466 -3600 # Node ID ee744c7160cedf7d6636c1810a90845f78bc9df0 # Parent 14e4c83a755938698e7e8ea4eb311aeaf76eb0b5 Use SPI TX callback to synchronize to main CPU diff -r 14e4c83a7559 -r ee744c7160ce Small_CPU/Inc/scheduler.h --- a/Small_CPU/Inc/scheduler.h Sat Mar 02 16:57:59 2019 +0100 +++ b/Small_CPU/Inc/scheduler.h Sat Mar 02 17:01:06 2019 +0100 @@ -88,6 +88,7 @@ /* Variables ---------------------------------------------------------*/ extern SGlobal global; +extern uint8_t dohardspisync; /* Function prototypes -----------------------------------------------*/ diff -r 14e4c83a7559 -r ee744c7160ce Small_CPU/Src/baseCPU2.c --- a/Small_CPU/Src/baseCPU2.c Sat Mar 02 16:57:59 2019 +0100 +++ b/Small_CPU/Src/baseCPU2.c Sat Mar 02 17:01:06 2019 +0100 @@ -164,7 +164,7 @@ // See CPU2-RTE.ld const SFirmwareData cpu2_FirmwareData __attribute__(( section(".firmware_data") ))= { .versionFirst = 1, - .versionSecond = 6, + .versionSecond = 7, .versionThird = 0, .versionBeta = 0, @@ -384,6 +384,7 @@ MX_SPI1_Init(); MX_EXTI_wireless_Init(); SPI_Start_single_TxRx_with_Master(); /* be prepared for the first data exchange */ + dohardspisync = 1; EXTI_Test_Button_Init(); /* @@ -479,11 +480,11 @@ compass_init(0, 7); accelerator_init(); wireless_init(); -// SPI_synchronize_with_Master(); TODO: REMOVE + SPI_synchronize_with_Master(); MX_DMA_Init(); MX_SPI1_Init(); MX_EXTI_wireless_Init(); -// SPI_Start_single_TxRx_with_Master(); + SPI_Start_single_TxRx_with_Master(); // EXTILine0_Button_DeInit(); not now, later after testing break; diff -r 14e4c83a7559 -r ee744c7160ce Small_CPU/Src/scheduler.c --- a/Small_CPU/Src/scheduler.c Sat Mar 02 16:57:59 2019 +0100 +++ b/Small_CPU/Src/scheduler.c Sat Mar 02 17:01:06 2019 +0100 @@ -58,6 +58,7 @@ SDevice DeviceDataFlash; uint8_t deviceDataFlashValid = 0; uint8_t deviceDataSubSeconds = 0; +uint8_t dohardspisync = 1; /* Private variables ---------------------------------------------------------*/ /* can be lost while in sleep */ @@ -181,6 +182,8 @@ global.deviceData.temperatureMaximum.value_int32 = INT32_MIN; global.deviceData.temperatureMinimum.value_int32 = INT32_MAX; global.deviceData.voltageMinimum.value_int32 = INT32_MAX; + + dohardspisync = 1; } @@ -430,7 +433,7 @@ void schedule_check_resync(void) { //TODO: REMOVE - if((global.check_sync_not_running >= 2)) + if((global.check_sync_not_running >= 3)) { // global.dataSendToSlaveIsNotValidCount = 0; global.check_sync_not_running = 0; @@ -904,7 +907,6 @@ } } } -static uint8_t dohardspisync = 1; void HardSyncToSPI() { diff -r 14e4c83a7559 -r ee744c7160ce Small_CPU/Src/spi.c --- a/Small_CPU/Src/spi.c Sat Mar 02 16:57:59 2019 +0100 +++ b/Small_CPU/Src/spi.c Sat Mar 02 17:01:06 2019 +0100 @@ -137,7 +137,7 @@ hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_HARD_INPUT; //SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLED; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; //_DISABLED; _ENABLED; @@ -154,6 +154,7 @@ GPIO_InitTypeDef GPIO_InitStruct; if (hspi->Instance == SPI1) { + SPIDataRX = 0; // Peripheral clock enable __SPI1_CLK_ENABLE(); __GPIOA_CLK_ENABLE(); @@ -280,9 +281,9 @@ } void SPI_synchronize_with_Master(void) { +#ifdef USE_OLD_SYNC_METHOD GPIO_InitTypeDef GPIO_InitStruct; // -#if 0 __GPIOA_CLK_ENABLE(); /**SPI1 GPIO Configuration PA5 ------> SPI1_SCK @@ -290,14 +291,14 @@ GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_LOW; + GPIO_InitStruct.Speed = GPIO_SPEED_FAST; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // HAL_Delay(10); while (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == 0); HAL_Delay(10); while (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == 1); - HAL_Delay(20); + HAL_Delay(50); #endif } @@ -321,6 +322,7 @@ /* restart SPI */ if (hspi == &hspi1) { + HardSyncToSPI(); SPIDataRX = 1; global.check_sync_not_running = 0; @@ -330,7 +332,6 @@ global.dataSendToSlavePending = 0; global.dataSendToSlaveIsValid = 1; global.dataSendToSlaveIsNotValidCount = 0; - return; } } } @@ -351,13 +352,11 @@ HAL_SPI_Abort_IT(&hspi1); global.dataSendToMaster.header.checkCode[SPI_HEADER_INDEX_SLAVE] = global.dataSendToSlave.header.checkCode[SPI_HEADER_INDEX_MASTER]; global.dataSendToSlave.header.checkCode[SPI_HEADER_INDEX_SLAVE] = 0; - return; } else { global.dataSendToMaster.header.checkCode[SPI_HEADER_INDEX_SLAVE] = global.dataSendToSlave.header.checkCode[SPI_HEADER_INDEX_MASTER]; } - HardSyncToSPI(); } else { // GPIO_new_DEBUG_LOW(); //For debug. global.dataSendToSlaveIsValid = 0; @@ -387,7 +386,7 @@ static uint8_t SPI_check_header_and_footer_ok(void) { if (global.dataSendToSlave.header.checkCode[0] != 0xBB) return 0; -#if USE_OLD_HEADER_FORMAT +#ifdef USE_OLD_HEADER_FORMAT if (global.dataSendToSlave.header.checkCode[1] != 0x01) return 0; if (global.dataSendToSlave.header.checkCode[2] != 0x01)