diff --git a/LinTasks.c b/LinTasks.c index f0a1421..92596be 100644 --- a/LinTasks.c +++ b/LinTasks.c @@ -25,8 +25,10 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) { if (env->direction == LIN_DIRECTION_SET) { LIN_DrvSendFrameNonBlocking(u8LinIndex, env->g_aTxBuffer, env->g_aTxBufferLen); + return; } else if (env->direction == LIN_DIRECTION_GET) { LIN_DrvReceiveFrameNonBlocking(u8LinIndex, env->g_aRxBuffer, env->g_aRxBufferLen); + return; } else { // Misra check. uint8_t data = LIN_TIMEOUT; @@ -37,12 +39,12 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) { break; case LIN_PID_ERROR: // Go to idle mode - LIN_DrvGoToIdleMode(u8LinIndex); +// LIN_DrvGoToIdleMode(u8LinIndex); // FCUART_Printf(DEBUG_FCUART_INSTANCE, "Receive PID error!\r\n"); break; case LIN_TX_COMPLETED: // Go to IDLE state. - LIN_DrvGoToIdleMode(u8LinIndex); +// LIN_DrvGoToIdleMode(u8LinIndex); // FCUART_Printf(DEBUG_FCUART_INSTANCE, "This test case will send data to slave node. Send data: \r\n"); // for (s_countIndex = 0U; s_countIndex < sizeof(g_aTxBuffer); s_countIndex++) { // FCUART_Printf(DEBUG_FCUART_INSTANCE, " 0x%x ", g_aTxBuffer[s_countIndex]); @@ -51,7 +53,7 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) { break; case LIN_RX_COMPLETED: // Go to idle mode - LIN_DrvGoToIdleMode(u8LinIndex); +// LIN_DrvGoToIdleMode(u8LinIndex); // FCUART_Printf(DEBUG_FCUART_INSTANCE, "Master node receive data:\r\n"); //for (s_countIndex = 0U; s_countIndex < sizeof(env->g_aRxBuffer); s_countIndex++) { @@ -81,7 +83,7 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) { break; case LIN_WAKEUP_SIGNAL: // FCUART_Printf(DEBUG_FCUART_INSTANCE, "Wake up signal received!\r\n"); - LIN_DrvGoToIdleMode(u8LinIndex); + //LIN_DrvGoToIdleMode(u8LinIndex); break; case LIN_TIMEOUT: // FCUART_Printf(DEBUG_FCUART_INSTANCE, "LIN transfer timeout occurred!\r\n"); @@ -103,8 +105,8 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) { } static lin_event_id_t SEND_ACTUATOR_COM_x(tLinIO *linIo, uint8_t COM_ADR) { - lin_event_id_t res = linIo->runCommand(linIo->env, COM_ADR, 50); - SystemDelayMs(20); + lin_event_id_t res = linIo->runCommand(linIo->env, COM_ADR, 40); + SystemDelayMs(30); return res; } @@ -121,7 +123,7 @@ lin_event_id_t DFR_PRG_x(tLinIO *linIo, tLinData *linData, ACT_DFR_PRG_->BUS_ADR = BUS_ADR; ACT_DFR_PRG_->Data1_DFR_PRG = 0xFF; - uint8_t retry = 3; + uint8_t retry = 1; while (retry) { @@ -139,7 +141,7 @@ lin_event_id_t DFR_PRG_x(tLinIO *linIo, tLinData *linData, return res; } -lin_event_id_t RFR_PRG_x(tLinIO *linIo, tLinData *linData, +lin_event_id_t RFR_PRG_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, uint8_t *BUS_ADR, uint8_t *BUS_NEW_ADR, uint8_t *NOTL_DREH_Master, @@ -149,29 +151,35 @@ lin_event_id_t RFR_PRG_x(tLinIO *linIo, tLinData *linData, uint8_t *Version_CFR) { lin_event_id_t res; - linData->direction = LIN_DIRECTION_GET; - - linData->g_aTxBufferLen = 0; - linData->g_aRxBufferLen = sizeof(ACT_RFR_PRG); - ACT_RFR_PRG *ACT_RFR_PRG_ = (ACT_RFR_PRG *) linData->g_aRxBuffer; uint8_t retry = 3; while (retry) { - res = SEND_ACTUATOR_COM_x(linIo, RFR_PRG); + res = DFR_PRG_x(linIo, linData, BUS_ADDRESS); - if (res == LIN_RX_COMPLETED) { - *BUS_ADR = ACT_RFR_PRG_->BUS_ADR; - *BUS_NEW_ADR = ACT_RFR_PRG_->BUS_NEW_ADR; - *NOTL_DREH_Master = ACT_RFR_PRG_->NOTL_DREH_Master; - *NOTL_ENAB_Master = ACT_RFR_PRG_->NOTL_ENAB_Master; - *DREH_Slave = ACT_RFR_PRG_->DREH_Slave; - *ParitySlave = ACT_RFR_PRG_->ParitySlave; - *Version_CFR = ACT_RFR_PRG_->Version_CFR; + if (res == LIN_TX_COMPLETED) { + + linData->direction = LIN_DIRECTION_GET; + + linData->g_aTxBufferLen = 0; + linData->g_aRxBufferLen = sizeof(ACT_RFR_PRG); + + res = SEND_ACTUATOR_COM_x(linIo, RFR_PRG); + + if (res == LIN_RX_COMPLETED) { + *BUS_ADR = ACT_RFR_PRG_->BUS_ADR; + *BUS_NEW_ADR = ACT_RFR_PRG_->BUS_NEW_ADR; + *NOTL_DREH_Master = ACT_RFR_PRG_->NOTL_DREH_Master; + *NOTL_ENAB_Master = ACT_RFR_PRG_->NOTL_ENAB_Master; + *DREH_Slave = ACT_RFR_PRG_->DREH_Slave; + *ParitySlave = ACT_RFR_PRG_->ParitySlave; + *Version_CFR = ACT_RFR_PRG_->Version_CFR; + + break; + } - break; } --retry; @@ -193,7 +201,7 @@ lin_event_id_t DFR_IDE_x(tLinIO *linIo, tLinData *linData, ACT_DFR_IDE_->BUS_ADR = BUS_ADR; ACT_DFR_IDE_->Data1_DFR_IDE = 0xFF; - uint8_t retry = 3; + uint8_t retry = 1; while (retry) { @@ -209,33 +217,39 @@ lin_event_id_t DFR_IDE_x(tLinIO *linIo, tLinData *linData, return res; } -lin_event_id_t RFR_IDE_x(tLinIO *linIo, tLinData *linData, +lin_event_id_t RFR_IDE_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, uint8_t *BUS_ADR, uint8_t *IDE_ref, uint8_t *IDE_Sup, uint8_t *IDE_Har) { lin_event_id_t res; - linData->direction = LIN_DIRECTION_GET; - - linData->g_aTxBufferLen = 0; - linData->g_aRxBufferLen = sizeof(ACT_RFR_IDE); - ACT_RFR_IDE *ACT_RFR_IDE_ = (ACT_RFR_IDE *) linData->g_aRxBuffer; uint8_t retry = 3; while (retry) { - res = SEND_ACTUATOR_COM_x(linIo, RFR_IDE); + res = DFR_IDE_x(linIo, linData, BUS_ADDRESS); - if (res == LIN_RX_COMPLETED) { - *BUS_ADR = ACT_RFR_IDE_->BUS_ADR; - *IDE_ref = ACT_RFR_IDE_->IDE_ref; - *IDE_Sup = ACT_RFR_IDE_->IDE_Sup; - *IDE_Har = ACT_RFR_IDE_->IDE_Har; + if (res == LIN_TX_COMPLETED) { + + linData->direction = LIN_DIRECTION_GET; + + linData->g_aTxBufferLen = 0; + linData->g_aRxBufferLen = sizeof(ACT_RFR_IDE); + + res = SEND_ACTUATOR_COM_x(linIo, RFR_IDE); + + if (res == LIN_RX_COMPLETED) { + *BUS_ADR = ACT_RFR_IDE_->BUS_ADR; + *IDE_ref = ACT_RFR_IDE_->IDE_ref; + *IDE_Sup = ACT_RFR_IDE_->IDE_Sup; + *IDE_Har = ACT_RFR_IDE_->IDE_Har; + + break; + } - break; } --retry; @@ -255,7 +269,7 @@ lin_event_id_t DFR_STA_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADR) { ACT_DFR_STA_->BUS_ADR = BUS_ADR; ACT_DFR_STA_->Data1_DFR_STA = 0xFF; - uint8_t retry = 3; + uint8_t retry = 1; while (retry) { @@ -271,7 +285,7 @@ lin_event_id_t DFR_STA_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADR) { return res; } -lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData, +lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, uint8_t *BUS_ADR, uint16_t *CPOS_ALL, eEmrf_Slave_STA *Emrf_Slave, @@ -284,33 +298,40 @@ lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData, eReset_STA *Reset_Slave) { lin_event_id_t res; - linData->direction = LIN_DIRECTION_GET; - - linData->g_aTxBufferLen = 0; - linData->g_aRxBufferLen = sizeof(ACT_RFR_STA); - ACT_RFR_STA *ACT_RFR_STA_ = (ACT_RFR_STA *) linData->g_aRxBuffer; - uint8_t retry = 3; + uint8_t retry = 1; while (retry) { - res = SEND_ACTUATOR_COM_x(linIo, RFR_STA); + res = DFR_STA_x(linIo, linData, BUS_ADDRESS); - if (res == LIN_RX_COMPLETED) { + if (res == LIN_TX_COMPLETED) { + + linData->direction = LIN_DIRECTION_GET; + + linData->g_aTxBufferLen = 0; + linData->g_aRxBufferLen = sizeof(ACT_RFR_STA); + + res = SEND_ACTUATOR_COM_x(linIo, RFR_STA); + + if (res == LIN_RX_COMPLETED) { + + *BUS_ADR = ACT_RFR_STA_->BUS_ADR; + *CPOS_ALL = ACT_RFR_STA_->CPOS_ALL; + *Emrf_Slave = ACT_RFR_STA_->Emrf_Slave; + *Mode_Slave = ACT_RFR_STA_->Mode_Slave; + *Error1_Supply_Slave = ACT_RFR_STA_->Error1_Supply_Slave; + *Error2_Communication_Slave = ACT_RFR_STA_->Error2_Communication_Slave; + *Error3_Temperature_Slave = ACT_RFR_STA_->Error3_Temperature_Slave; + *Error4_Permanent_Electrical_Slave = ACT_RFR_STA_->Error4_Permanent_Electrical_Slave; + *Stall_Slave = ACT_RFR_STA_->Stall_Slave; + *Reset_Slave = ACT_RFR_STA_->Reset_Slave; + + break; + } - *BUS_ADR = ACT_RFR_STA_->BUS_ADR; - *CPOS_ALL = ACT_RFR_STA_->CPOS_ALL; - *Emrf_Slave = ACT_RFR_STA_->Emrf_Slave; - *Mode_Slave = ACT_RFR_STA_->Mode_Slave; - *Error1_Supply_Slave = ACT_RFR_STA_->Error1_Supply_Slave; - *Error2_Communication_Slave = ACT_RFR_STA_->Error2_Communication_Slave; - *Error3_Temperature_Slave = ACT_RFR_STA_->Error3_Temperature_Slave; - *Error4_Permanent_Electrical_Slave = ACT_RFR_STA_->Error4_Permanent_Electrical_Slave; - *Stall_Slave = ACT_RFR_STA_->Stall_Slave; - *Reset_Slave = ACT_RFR_STA_->Reset_Slave; - break; } --retry; @@ -319,8 +340,7 @@ lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData, return res; } -lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData, - uint8_t BUS_ADR, +lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData, uint8_t COM, uint8_t *BLOCK_MT, uint16_t *CPOS_ALL, uint8_t *DIAGNOSE_MT) { @@ -334,14 +354,14 @@ lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData, while (retry) { - res = SEND_ACTUATOR_COM_x(linIo, BUS_ADR); + res = SEND_ACTUATOR_COM_x(linIo, COM); if (res == LIN_RX_COMPLETED) { ACT_RFR_ISSR *ACT_RFR_ISSR_ = (ACT_RFR_ISSR *) linData->g_aRxBuffer; *BLOCK_MT = ACT_RFR_ISSR_->BLOCK_MT; - *CPOS_ALL = ACT_RFR_ISSR_->CPOS_1_LSB_MT | (ACT_RFR_ISSR_->CPOS_1_MSB_MT << 8); + *CPOS_ALL = ACT_RFR_ISSR_->CPOS_1_LSB_MT | (ACT_RFR_ISSR_->CPOS_1_MSB_MT << 7); *DIAGNOSE_MT = ACT_RFR_ISSR_->DIAGNOSE_MT; break; @@ -355,8 +375,7 @@ lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData, } -lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData, - uint8_t BUS_ADR, +lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, eMode_Mod Mode_Slave) { lin_event_id_t res; @@ -365,7 +384,7 @@ lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData, linData->g_aRxBufferLen = 0; ACT_CFR_MOD *ACT_CFR_MOD_ = (ACT_CFR_MOD *) linData->g_aTxBuffer; - ACT_CFR_MOD_->BUS_ADR = BUS_ADR; + ACT_CFR_MOD_->BUS_ADR = BUS_ADDRESS; ACT_CFR_MOD_->Mode_Slave = Mode_Slave; ACT_CFR_MOD_->Unused = 0xFF; ACT_CFR_MOD_->Data2_Mod = 0xFF; @@ -387,8 +406,7 @@ lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData, return res; } -lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData, - uint8_t BUS_ADR, +lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, uint16 INI_CPOS) { lin_event_id_t res; @@ -397,7 +415,7 @@ lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData, linData->g_aRxBufferLen = 0; ACT_CFR_INI *ACT_CFR_INI_ = (ACT_CFR_INI *) linData->g_aTxBuffer; - ACT_CFR_INI_->BUS_ADR = BUS_ADR; + ACT_CFR_INI_->BUS_ADR = BUS_ADDRESS; ACT_CFR_INI_->INI_CPOS = INI_CPOS; ACT_CFR_INI_->unused = 0xFF; ACT_CFR_INI_->Not_Used_INI = 0xFF; @@ -418,8 +436,7 @@ lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData, return res; } -lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData, - uint8_t BUS_ADR, +lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, uint16 FINAL_POS, eStall_SET Stall_SET, eLnoise_SET Lnoise_SET, @@ -433,7 +450,7 @@ lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData, linData->g_aRxBufferLen = 0; ACT_CFR_SET *ACT_CFR_SET_ = (ACT_CFR_SET *) linData->g_aTxBuffer; - ACT_CFR_SET_->BUS_ADR = BUS_ADR; + ACT_CFR_SET_->BUS_ADR = BUS_ADDRESS; ACT_CFR_SET_->FINAL_POS = FINAL_POS; ACT_CFR_SET_->unused = 0xFF; @@ -461,8 +478,8 @@ lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData, return res; } -lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData, - uint8_t BUS_ADR, +/* +lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, uint16_t BUS_NEW_ADR, uint8_t NOTL_DREH_Master, uint8_t NOTL_ENAB_Master, @@ -477,7 +494,7 @@ lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData, linData->g_aRxBufferLen = 0; ACT_CFR_PRG *ACT_CFR_PRG_ = (ACT_CFR_PRG *) linData->g_aTxBuffer; - ACT_CFR_PRG_->BUS_ADR = BUS_ADR; + ACT_CFR_PRG_->BUS_ADR = BUS_ADDRESS; ACT_CFR_PRG_->BUS_NEW_ADR = BUS_NEW_ADR; ACT_CFR_PRG_->NOTL_DREH_Master = NOTL_DREH_Master; ACT_CFR_PRG_->NOTL_ENAB_Master = NOTL_ENAB_Master; @@ -502,7 +519,7 @@ lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData, return res; } - +*/ void Lin_0_Init(tLinTaskActuator *env, tLinData *linData, tLinIO *linIO) { @@ -511,10 +528,15 @@ void Lin_0_Init(tLinTaskActuator *env, env->linData = linData; env->access = osMutexNew(NULL); + for (uint8_t i = 0; i < 9; ++i) { + env->linCommandActuator[i].COM = LIN_ACT_CFR_MOD; + } + InitThreadAtrStatic(&env->thread.attr, "Lin0", env->thread.controlBlock, env->thread.stack, osPriorityNormal); } + lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { lin_event_id_t ret; @@ -530,11 +552,20 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { env->linCommandActuator[i].isRFR_STA = 1; + if (env->linCommandActuator[i].BUS_ADR == 0x20) { + + for (uint8_t j = 0; j < LIN0_ISSR_ALL; ++j) { + env->linCommandActuator[j].isRFR_STA = 1; + } + + break; + } + } else { - return ret; +// return ret; } - if (env->linCommandActuator[i].BUS_ADR & 0x1F) { + if (env->linCommandActuator[i].BUS_ADR == 0x20) { break; } @@ -549,13 +580,12 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS); - if (ret == LIN_TX_COMPLETED) { +// if (ret == LIN_TX_COMPLETED) { +// } else { +// return ret; +// } - } else { - return ret; - } - - if (env->linCommandActuator[i].BUS_ADR & 0x1F) { + if (env->linCommandActuator[i].BUS_ADR == 0x20) { break; } @@ -575,13 +605,12 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { env->linCommandActuator[i].Speed_SET, env->linCommandActuator[i].Coils_Stop_SET); - if (ret == LIN_TX_COMPLETED) { +// if (ret == LIN_TX_COMPLETED) { +// } else { +// return ret; +// } - } else { - return ret; - } - - if (env->linCommandActuator[i].BUS_ADR & 0x1F) { + if (env->linCommandActuator[i].BUS_ADR == 0x20) { break; } @@ -589,76 +618,6 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { } - for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { - - if (env->linCommandActuator[i].COM == LIN_ACT_CFR_PRG) { - - ret = CFR_PRG_x(env->linIo, env->linData, - env->linCommandActuator[i].BUS_ADR, - env->linCommandActuator[i].BUS_NEW_ADR, - env->linCommandActuator[i].NOTL_DREH_Master, - env->linCommandActuator[i].NOTL_ENAB_Master, - env->linCommandActuator[i].DREH_Master, - env->linCommandActuator[i].Motor, - env->linCommandActuator[i].Baudrate, - env->linCommandActuator[i].Version_CFR); - - if (ret == LIN_TX_COMPLETED) { - - ret = DFR_PRG_x(env->linIo, env->linData, i); - - if (ret == LIN_TX_COMPLETED) { - - - uint8_t BUS_ADR; - uint8_t BUS_NEW_ADR; - uint8_t NOTL_DREH_Master; - uint8_t NOTL_ENAB_Master; - uint8_t DREH_Slave; - uint8_t ParitySlave; - uint8_t Version_CFR; - - ret = RFR_PRG_x(env->linIo, env->linData, - &BUS_ADR, - &BUS_NEW_ADR, - &NOTL_DREH_Master, - &NOTL_ENAB_Master, - &DREH_Slave, - &ParitySlave, - &Version_CFR); - - if (ret == LIN_RX_COMPLETED) { - - if (BUS_ADR != i) { - asm("nop"); - } - - if (BUS_ADR < LIN0_ISSR_ALL) { - env->linStateActuator[BUS_ADR].BUS_NEW_ADR = BUS_NEW_ADR; - env->linStateActuator[BUS_ADR].NOTL_DREH_Master = NOTL_DREH_Master; - env->linStateActuator[BUS_ADR].NOTL_ENAB_Master = NOTL_ENAB_Master; - env->linStateActuator[BUS_ADR].DREH_Slave = DREH_Slave; - env->linStateActuator[BUS_ADR].ParitySlave = ParitySlave; - env->linStateActuator[BUS_ADR].Version_CFR = Version_CFR; - } else { - asm("nop"); - } - - } else { - return ret; - } - - } else { - return ret; - } - - } else { - return ret; - } - - } - } - for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { ret = ISSR_x(env->linIo, env->linData, @@ -673,65 +632,61 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { env->linCommandActuator[i].isRFR_STA = 0; - ret = DFR_STA_x(env->linIo, env->linData, i); + uint8_t BUS_ADR; + uint16_t CPOS_ALL; + eEmrf_Slave_STA Emrf_Slave; + eMode_Mod Mode_Slave; + uint8_t Error1_Supply_Slave; + uint8_t Error2_Communication_Slave; + uint8_t Error3_Temperature_Slave; + uint8_t Error4_Permanent_Electrical_Slave; + eStall_STA Stall_Slave; + eReset_STA Reset_Slave; - if (ret == LIN_TX_COMPLETED) { + ret = RFR_STA_x(env->linIo, env->linData, i | 0x20, + &BUS_ADR, + &CPOS_ALL, + &Emrf_Slave, + &Mode_Slave, + &Error1_Supply_Slave, + &Error2_Communication_Slave, + &Error3_Temperature_Slave, + &Error4_Permanent_Electrical_Slave, + &Stall_Slave, + &Reset_Slave); - uint8_t BUS_ADR; - uint16_t CPOS_ALL; - eEmrf_Slave_STA Emrf_Slave; - eMode_Mod Mode_Slave; - uint8_t Error1_Supply_Slave; - uint8_t Error2_Communication_Slave; - uint8_t Error3_Temperature_Slave; - uint8_t Error4_Permanent_Electrical_Slave; - eStall_STA Stall_Slave; - eReset_STA Reset_Slave; + if (ret == LIN_RX_COMPLETED) { - ret = RFR_STA_x(env->linIo, env->linData, - &BUS_ADR, - &CPOS_ALL, - &Emrf_Slave, - &Mode_Slave, - &Error1_Supply_Slave, - &Error2_Communication_Slave, - &Error3_Temperature_Slave, - &Error4_Permanent_Electrical_Slave, - &Stall_Slave, - &Reset_Slave); + BUS_ADR &= 0x1F; - if (ret == LIN_RX_COMPLETED) { - - if (BUS_ADR != i) { - asm("nop"); - } - - if (BUS_ADR < LIN0_ISSR_ALL) { - env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL; - env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave; - env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave; - env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave; - env->linStateActuator[BUS_ADR].Error2_Communication_Slave = Error2_Communication_Slave; - env->linStateActuator[BUS_ADR].Error3_Temperature_Slave = Error3_Temperature_Slave; - env->linStateActuator[BUS_ADR].Error4_Permanent_Electrical_Slave = Error4_Permanent_Electrical_Slave; - env->linStateActuator[BUS_ADR].Stall_Slave = Stall_Slave; - env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave; - } else { - asm("nop"); - } - - - } else { - return ret; + if (BUS_ADR != i) { + asm("nop"); } + + if (BUS_ADR < LIN0_ISSR_ALL) { + env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL; + env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave; + env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave; + env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave; + env->linStateActuator[BUS_ADR].Error2_Communication_Slave = Error2_Communication_Slave; + env->linStateActuator[BUS_ADR].Error3_Temperature_Slave = Error3_Temperature_Slave; + env->linStateActuator[BUS_ADR].Error4_Permanent_Electrical_Slave = Error4_Permanent_Electrical_Slave; + env->linStateActuator[BUS_ADR].Stall_Slave = Stall_Slave; + env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave; + } else { + asm("nop"); + } + + + } else { +// return ret; } - } else { - return ret; + } } else { - return ret; +// return ret; } } @@ -744,6 +699,295 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { return LIN_NO_EVENT; } + +/* +lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { + + lin_event_id_t ret; + + + ret = CFR_MOD_x(env->linIo, env->linData, + 0x20, + LIN_MODE_STOP); + + + if (ret == LIN_TX_COMPLETED) { + asm("nop"); + } + + + ret = CFR_INI_x(env->linIo, env->linData, + 0x20, + 6000); + + if (ret == LIN_TX_COMPLETED) { + asm("nop"); + } + + ret = CFR_MOD_x(env->linIo, env->linData, + 0x20, + LIN_MODE_NORMAL); + + + if (ret == LIN_TX_COMPLETED) { + asm("nop"); + } + + asm("nop"); + + + + + + ret = DFR_STA_x(env->linIo, env->linData, 0x27); + + uint8_t BUS_ADR; + uint16_t CPOS_ALL; + eEmrf_Slave_STA Emrf_Slave; + eMode_Mod Mode_Slave; + uint8_t Error1_Supply_Slave; + uint8_t Error2_Communication_Slave; + uint8_t Error3_Temperature_Slave; + uint8_t Error4_Permanent_Electrical_Slave; + eStall_STA Stall_Slave; + eReset_STA Reset_Slave; + + ret = RFR_STA_x(env->linIo, env->linData, + &BUS_ADR, + &CPOS_ALL, + &Emrf_Slave, + &Mode_Slave, + &Error1_Supply_Slave, + &Error2_Communication_Slave, + &Error3_Temperature_Slave, + &Error4_Permanent_Electrical_Slave, + &Stall_Slave, + &Reset_Slave); + + if (ret == LIN_RX_COMPLETED) { + asm("nop"); + } else { + asm("nop"); + } + + +//asm("nop"); + + + ret = CFR_SET_x(env->linIo, env->linData, + 0x27, + 0, + 1, + 0, + 0, + 0, + 0); + + if (ret == LIN_TX_COMPLETED) { + asm("nop"); + } + + asm("nop"); + + ret = ISSR_x(env->linIo, env->linData, + 7, + &env->linStateActuator[7].BLOCK_MT, + &env->linStateActuator[7].CPOS_ALL, + &env->linStateActuator[7].DIAGNOSE_MT); + + if (ret == LIN_RX_COMPLETED) { + asm("nop"); + } + + uint8_t BUS_ADR; + uint8_t IDE_ref; + uint8_t IDE_Sup; + uint8_t IDE_Har; + + ret = DFR_IDE_x(env->linIo, env->linData, 7); + + if (ret == LIN_TX_COMPLETED) { + asm("nop"); + } + + ret = RFR_IDE_x(env->linIo, env->linData, + &BUS_ADR, + &IDE_ref, + &IDE_Sup, + &IDE_Har); + + if (ret == LIN_RX_COMPLETED) { + asm("nop"); + } + + asm("nop"); + + + ret = ISSR_x(env->linIo, env->linData, + 7, + &env->linStateActuator[7].BLOCK_MT, + &env->linStateActuator[7].CPOS_ALL, + &env->linStateActuator[7].DIAGNOSE_MT); + + if (ret == LIN_RX_COMPLETED) { + + if ((env->linStateActuator[7].DIAGNOSE_MT) || (env->linCommandActuator[7].isRFR_STA)) { + + env->linCommandActuator[7].isRFR_STA = 0; + + ret = DFR_STA_x(env->linIo, env->linData, 7); + + if (ret == LIN_TX_COMPLETED) { + + uint8_t BUS_ADR; + uint16_t CPOS_ALL; + eEmrf_Slave_STA Emrf_Slave; + eMode_Mod Mode_Slave; + uint8_t Error1_Supply_Slave; + uint8_t Error2_Communication_Slave; + uint8_t Error3_Temperature_Slave; + uint8_t Error4_Permanent_Electrical_Slave; + eStall_STA Stall_Slave; + eReset_STA Reset_Slave; + + ret = RFR_STA_x(env->linIo, env->linData, + &BUS_ADR, + &CPOS_ALL, + &Emrf_Slave, + &Mode_Slave, + &Error1_Supply_Slave, + &Error2_Communication_Slave, + &Error3_Temperature_Slave, + &Error4_Permanent_Electrical_Slave, + &Stall_Slave, + &Reset_Slave); + + if (ret == LIN_RX_COMPLETED) { + + if (BUS_ADR != 7) { + asm("nop"); + } + + if (BUS_ADR < LIN0_ISSR_ALL) { + env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL; + env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave; + env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave; + env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave; + env->linStateActuator[BUS_ADR].Error2_Communication_Slave = Error2_Communication_Slave; + env->linStateActuator[BUS_ADR].Error3_Temperature_Slave = Error3_Temperature_Slave; + env->linStateActuator[BUS_ADR].Error4_Permanent_Electrical_Slave = Error4_Permanent_Electrical_Slave; + env->linStateActuator[BUS_ADR].Stall_Slave = Stall_Slave; + env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave; + } else { + asm("nop"); + } + + + } else { + asm("nop"); + //return ret; + } + } + + } else { + asm("nop"); + //return ret; + } + + } else { + asm("nop"); + //return ret; + } + + + uint8_t BUS_ADR; + uint8_t IDE_ref; + uint8_t IDE_Sup; + uint8_t IDE_Har; + + ret = DFR_IDE_x(env->linIo, env->linData,7); + ret = RFR_IDE_x(env->linIo, env->linData, + &BUS_ADR, + &IDE_ref, + &IDE_Sup, + &IDE_Har); + + + ret = CFR_INI_x(env->linIo, env->linData, + 0x20, + 0); + + + ret = ISSR_x(env->linIo, env->linData, + 7, + &env->linStateActuator[7].BLOCK_MT, + &env->linStateActuator[7].CPOS_ALL, + &env->linStateActuator[7].DIAGNOSE_MT); + + + ret = DFR_PRG_x(env->linIo, env->linData, 7); + + uint8_t BUS_ADR; + uint8_t BUS_NEW_ADR; + uint8_t NOTL_DREH_Master; + uint8_t NOTL_ENAB_Master; + uint8_t DREH_Slave; + uint8_t ParitySlave; + uint8_t Version_CFR; + + ret = RFR_PRG_x(env->linIo, env->linData, + &BUS_ADR, + &BUS_NEW_ADR, + &NOTL_DREH_Master, + &NOTL_ENAB_Master, + &DREH_Slave, + &ParitySlave, + &Version_CFR); + + + for (uint8_t i = 0; i < 31; ++i) { + + ret = DFR_STA_x(env->linIo, env->linData, i); + + uint8_t BUS_ADR; + uint16_t CPOS_ALL; + eEmrf_Slave_STA Emrf_Slave; + eMode_Mod Mode_Slave; + uint8_t Error1_Supply_Slave; + uint8_t Error2_Communication_Slave; + uint8_t Error3_Temperature_Slave; + uint8_t Error4_Permanent_Electrical_Slave; + eStall_STA Stall_Slave; + eReset_STA Reset_Slave; + + ret = RFR_STA_x(env->linIo, env->linData, + &BUS_ADR, + &CPOS_ALL, + &Emrf_Slave, + &Mode_Slave, + &Error1_Supply_Slave, + &Error2_Communication_Slave, + &Error3_Temperature_Slave, + &Error4_Permanent_Electrical_Slave, + &Stall_Slave, + &Reset_Slave); + + if (ret == LIN_RX_COMPLETED) { + asm("nop"); + } else { + asm("nop"); + } + } + + if ((ret == LIN_TX_COMPLETED) || (ret == LIN_RX_COMPLETED)) { + + } else { + return ret; + } + + return LIN_NO_EVENT; +} +*/ static _Noreturn void Lin0_Thread(tLinTaskActuator *env) { for (;;) { if (osMutexAcquire(env->access, 100) == osOK) { diff --git a/LinTasks.h b/LinTasks.h index 471f833..63eb78d 100644 --- a/LinTasks.h +++ b/LinTasks.h @@ -415,10 +415,10 @@ typedef struct { // COM - Команда typedef enum { - LIN_ACT_CFR_MOD = 0, - LIN_ACT_CFR_INI = 1, - LIN_ACT_CFR_SET = 2, - LIN_ACT_CFR_PRG = 3, + LIN_ACT_CFR_NONE = 0, + LIN_ACT_CFR_MOD = 1, + LIN_ACT_CFR_INI = 2, + LIN_ACT_CFR_SET = 3 } eLinCOM; typedef struct { @@ -459,7 +459,7 @@ typedef struct { struct { osThreadId_t id; - uint32_t stack[512]; + uint32_t stack[1024]; StaticTask_t controlBlock; osThreadAttr_t attr; } thread;