Index: firmware/App/Controllers/BloodFlow.h =================================================================== diff -u -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) +++ firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -33,9 +33,9 @@ SELF_TEST_STATUS_T execBloodFlowTest( void ); DATA_GET_PROTOTYPE( U32, getTargetBloodFlowRate ); -//DATA_GET_PROTOTYPE( F32, getMeasuredBloodFlowRate) -//DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpSpeed ); -//DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpCurrent ); +DATA_GET_PROTOTYPE( F32, getMeasuredBloodFlowRate); +DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpSpeed ); +DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpCurrent ); BOOL testSetTargetBloodFlowRateOverride( U32 value ); BOOL testResetTargetBloodFlowRateOverride( void ); Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r1156c9be51ef9f40054860355ebee40b49ef03ca -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 1156c9be51ef9f40054860355ebee40b49ef03ca) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -18,6 +18,7 @@ #include "Common.h" #include "AlarmLamp.h" +#include "SystemCommMessages.h" #include "Timers.h" #include "AlarmMgmt.h" @@ -56,12 +57,6 @@ BOOL alarmNoNewTreatment; // alarm prevents any new treatments BOOL alarmDialyzerBypass; // alarm activation should cause dialyzer bypass until cleared } ALARM_T; - -typedef struct -{ - BOOL alarmActive; // alarm is currently active? - U32 alarmStart; // time stamp for when alarm was activated -} ALARM_STATUS_T; #pragma pack(pop) const ALARM_T alarmTable[NUM_OF_ALARM_IDS] = @@ -72,11 +67,9 @@ // ********** private data ********** -static ALARM_STATUS_T alarmStatusTable[NUM_OF_ALARM_IDS] = -{ - { FALSE, 0 }, // ALARM_ID_NO_ALARM - { FALSE, 0 } // ALARM_ID_SOFTWARE_FAULT -}; +DATA_ARRAY_DECL( BOOL, AlarmStates, NUM_OF_ALARM_IDS, alarmIsActive ); +DATA_ARRAY_DECL( U32, AlarmStarts, NUM_OF_ALARM_IDS, alarmStartedAt ); + static COMP_ALARM_STATUS_T alarmStatus; static ALARM_ID_T alarmPriorityFIFO[NUM_OF_ALARM_PRIORITIES]; @@ -91,6 +84,9 @@ static void resetAlarmPriorityFIFO( ALARM_PRIORITY_T priority ); +static DATA_ARRAY_GET_PROTOTYPE( BOOL, getAlarmActive, alarmID ); +static DATA_ARRAY_GET_PROTOTYPE( U32, getAlarmStartTime, alarmID ); + /************************************************************************* * @brief initAlarmMgmt * The initAlarmMgmt function initializes the AlarmMgmt module. @@ -103,11 +99,26 @@ void initAlarmMgmt( void ) { ALARM_PRIORITY_T p; + ALARM_ID_T a; + // initialize alarm states and start time stamps + for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) + { + alarmIsActive[a].data = FALSE; + alarmIsActive[a].ovData = FALSE; + alarmIsActive[a].ovInitData = TRUE; + alarmIsActive[a].override = OVERRIDE_RESET; + alarmStartedAt[a].data = 0; + alarmStartedAt[a].ovData = 0; + alarmStartedAt[a].ovInitData = 0; + alarmStartedAt[a].override = OVERRIDE_RESET; + } + // initialize alarm FIFOs for ( p = ALARM_PRIORITY_NONE; p < NUM_OF_ALARM_PRIORITIES; p++ ) { alarmPriorityFIFO[p] = ALARM_ID_NO_ALARM; } + // initialize composite alarm state alarmStatus.alarmsState = ALARM_PRIORITY_NONE; alarmStatus.alarmsSilenced = FALSE; alarmStatus.alarmsSilenceStart = 0; @@ -160,8 +171,8 @@ // verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = TRUE; + alarmStartedAt[alarm].data = getMSTimerCount(); // TODO - send alarm broadcast msg } else @@ -187,8 +198,8 @@ // verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = TRUE; + alarmStartedAt[alarm].data = getMSTimerCount(); // TODO - send alarm broadcast msg w/ alarm data } else @@ -215,8 +226,8 @@ // verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = TRUE; + alarmStartedAt[alarm].data = getMSTimerCount(); // TODO - send alarm broadcast msg w/ alarm data } else @@ -243,8 +254,8 @@ // verify alarm can be cleared if ( FALSE == alarmTable[alarm].alarmNoClear ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = FALSE; + alarmStartedAt[alarm].data = 0; // clear FIFO if this alarm was in it if ( alarmPriorityFIFO[alarmTable[alarm].alarmPriority] == alarm ) { @@ -260,6 +271,28 @@ } /************************************************************************* + * @brief getAlarmActive + * The getAlarmActive function gets the active state of a given alarm. + * @details + * Inputs : alarmIsActive[] + * Outputs : none + * @param alarmID : ID of alarm to check + * @return TRUE if given alarm is active, FALSE if not + *************************************************************************/ +static DATA_ARRAY_GET( BOOL, getAlarmActive, alarmID, NUM_OF_ALARM_IDS-1, alarmIsActive, TRUE ) + +/************************************************************************* + * @brief getAlarmStartTime + * The getAlarmStartTime function gets the active state of a given alarm. + * @details + * Inputs : alarmStartedAt[] + * Outputs : none + * @param alarmID : ID of alarm to check + * @return The start time stamp of given alarm ID + *************************************************************************/ +static DATA_ARRAY_GET( U32, getAlarmStartTime, alarmID, NUM_OF_ALARM_IDS-1, alarmStartedAt, 0 ) + +/************************************************************************* * @brief updateAlarmsState * The updateAlarmsState function updates the alarms state and alarm to \n * display. @@ -279,7 +312,7 @@ // update FIFOs per alarm status table for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) { - if ( TRUE == alarmStatusTable[a].alarmActive ) + if ( TRUE == getAlarmActive(a) ) { if ( ALARM_ID_NO_ALARM == alarmPriorityFIFO[alarmTable[a].alarmPriority] ) { @@ -407,3 +440,42 @@ } } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/************************************************************************* + * @brief testSetAlarmStateOverride and testResetAlarmStateOverride + * The testSetAlarmStateOverride function overrides the state of the \n + * alarm active state for a given alarm with the alarm management with \n + * a given active state. + * The testResetAlarmStateOverride function resets the override of the \n + * state of the active state for a given alarm with the alarm management. + * @details + * Inputs : none + * Outputs : alarmIsActive[] + * @param alarmID : ID of alarm to override active state for + * @param value : override state for the given alarm ID + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_ARRAY_OVERRIDE_FUNC( BOOL, testSetAlarmStateOverride, testResetAlarmStateOverride, alarmIsActive, alarmID, NUM_OF_ALARM_IDS-1 ) + +/************************************************************************* + * @brief testSetAlarmStartOverride and testResetAlarmStartOverride + * The testSetAlarmStartOverride function overrides the start time \n + * for a given alarm with the alarm management with a given start time. \n + * The testResetAlarmStartOverride function resets the override of the \n + * start time for a given alarm with the alarm management. + * @details + * Inputs : none + * Outputs : alarmStartedAt[] + * @param alarmID : ID of alarm to override start time for + * @param value : override start time for the given alarm ID + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_ARRAY_OVERRIDE_FUNC( U32, testSetAlarmStartOverride, testResetAlarmStartOverride, alarmStartedAt, alarmID, NUM_OF_ALARM_IDS-1 ) + + + Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -re27e413ff88e196f300fee9c05f5c4e30ccf5e1b -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision e27e413ff88e196f300fee9c05f5c4e30ccf5e1b) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -91,4 +91,9 @@ void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2 ); void clearAlarm( ALARM_ID_T alarm ); +BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); +BOOL testResetAlarmStateOverride( U32 alarmID ); +BOOL testSetAlarmStartOverride( U32 alarmID, U32 value ); +BOOL testResetAlarmStartOverride( U32 alarmID ); + #endif Index: firmware/App/Services/CommBuffers.h =================================================================== diff -u -reff7b1575f008f81b29ef906f6346fac6012d3ab -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Services/CommBuffers.h (.../CommBuffers.h) (revision eff7b1575f008f81b29ef906f6346fac6012d3ab) +++ firmware/App/Services/CommBuffers.h (.../CommBuffers.h) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -34,6 +34,8 @@ COMM_BUFFER_IN_CAN_DG_BROADCAST, COMM_BUFFER_IN_CAN_UI_2_HD, COMM_BUFFER_IN_CAN_UI_BROADCAST, + COMM_BUFFER_IN_CAN_PC, + COMM_BUFFER_OUT_CAN_PC, COMM_BUFFER_IN_UART_PC, COMM_BUFFER_OUT_UART_PC, NUM_OF_COMM_BUFFERS Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -34,9 +34,9 @@ // ********** private definitions ********** -#define NUM_OF_CAN_OUT_BUFFERS 4 // # of CAN buffers for transmit -#define NUM_OF_CAN_IN_BUFFERS 6 // # of CAN buffers for receiving -#define NUM_OF_MSG_IN_BUFFERS 7 // # of Msg buffers for receiving +#define NUM_OF_CAN_OUT_BUFFERS 5 // # of CAN buffers for transmit +#define NUM_OF_CAN_IN_BUFFERS 7 // # of CAN buffers for receiving +#define NUM_OF_MSG_IN_BUFFERS 8 // # of Msg buffers for receiving - 1 is UART #define SCI1_RECEIVE_DMA_REQUEST 30 #define SCI1_TRANSMIT_DMA_REQUEST 31 @@ -48,7 +48,8 @@ COMM_BUFFER_OUT_CAN_HD_ALARM, COMM_BUFFER_OUT_CAN_HD_2_DG, COMM_BUFFER_OUT_CAN_HD_2_UI, - COMM_BUFFER_OUT_CAN_HD_BROADCAST + COMM_BUFFER_OUT_CAN_HD_BROADCAST, + COMM_BUFFER_OUT_CAN_PC }; const COMM_BUFFER_T MSG_IN_BUFFERS[NUM_OF_MSG_IN_BUFFERS] = @@ -59,10 +60,11 @@ COMM_BUFFER_IN_CAN_DG_BROADCAST, COMM_BUFFER_IN_CAN_UI_2_HD, COMM_BUFFER_IN_CAN_UI_BROADCAST, + COMM_BUFFER_IN_CAN_PC, COMM_BUFFER_IN_UART_PC }; -static U08 pcXmitPacket[PC_MESSAGE_PACKET_SIZE] = {0,0,0,0,0,0,0,0};// = {1,2,3,4,5,6,7,8}; +static U08 pcXmitPacket[PC_MESSAGE_PACKET_SIZE] = {0,0,0,0,0,0,0,0}; static U08 pcRecvPacket[PC_MESSAGE_PACKET_SIZE] = {0,0,0,0,0,0,0,0}; // DMA control records @@ -98,11 +100,6 @@ { // initialize UART and DMA for PC communication initUARTAndDMA(); - - // TODO - remove this test code that sends a packet -// dmaSetCtrlPacket( DMA_CH3, pcDMAXmitControlRecord ); -// dmaSetChEnable( DMA_CH3, DMA_HW ); -// setSCI1DMATransmitInterrupt(); } /************************************************************************* @@ -644,7 +641,7 @@ } // handle any test messages if tester has logged in successfully - if ( ( msgID > MSG_ID_FIRST_TESTER_MESSAGE ) && ( TRUE == isTestingActivated() ) ) + if ( ( msgID > MSG_ID_FIRST_TESTER_MESSAGE ) && ( msgID < NUM_OF_MSG_IDS ) && ( TRUE == isTestingActivated() ) ) { switch ( msgID ) { @@ -669,9 +666,13 @@ break; case MSG_ID_ALARM_STATE_OVERRIDE: - //handleTestAlarmStateOverrideRequest( message ); + handleTestAlarmStateOverrideRequest( message ); break; + case MSG_ID_ALARM_START_OVERRIDE: + handleTestAlarmStartOverrideRequest( message ); + break; + case MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE: handleTestBloodFlowSetPointOverrideRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -20,6 +20,7 @@ #include "Common.h" #include "AlarmLamp.h" +#include "AlarmMgmt.h" #include "BloodFlow.h" #include "Buttons.h" #include "MsgQueues.h" @@ -227,7 +228,7 @@ msgSize = serializeMessage( msg, data ); // add serialized message data to appropriate comm buffer - result = addToCommBuffer( COMM_BUFFER_OUT_UART_PC, data, msgSize ); + result = addToCommBuffer( COMM_BUFFER_OUT_CAN_PC, data, msgSize ); return result; } @@ -342,9 +343,21 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -//DATA_ARRAY_OVERRIDE_HANDLER_FUNC( BOOL, handleTestAlarmStateOverrideRequest, testSetAlarmStateOverride, testResetAlarmStateOverride ) +DATA_ARRAY_OVERRIDE_HANDLER_FUNC( BOOL, handleTestAlarmStateOverrideRequest, testSetAlarmStateOverride, testResetAlarmStateOverride ) /************************************************************************* + * @brief handleTestAlarmStartOverrideRequest + * The handleTestAlarmStartOverrideRequest function handles a request to \n + * override the start time of a given alarm. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_ARRAY_OVERRIDE_HANDLER_FUNC( U32, handleTestAlarmStartOverrideRequest, testSetAlarmStartOverride, testResetAlarmStartOverride ) + +/************************************************************************* * @brief handleTestBloodFlowSetPointOverrideRequest * The handleTestBloodFlowSetPointOverrideRequest function handles a request to \n * override the set point for the blood flow rate (mL/min). Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -28,16 +28,17 @@ MSG_ID_OFF_BUTTON_PRESS, MSG_ID_FIRST_TESTER_MESSAGE = 0x8000, MSG_ID_TESTER_LOGIN_REQUEST = MSG_ID_FIRST_TESTER_MESSAGE, - MSG_ID_HD_MESSAGE, - MSG_ID_OFF_BUTTON_STATE_OVERRIDE, - MSG_ID_STOP_BUTTON_STATE_OVERRIDE, - MSG_ID_ALARM_LAMP_PATTERN_OVERRIDE, - MSG_ID_WATCHDOG_TASK_CHECKIN_OVERRIDE, - MSG_ID_ALARM_STATE_OVERRIDE, - MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE, - MSG_ID_BLOOD_FLOW_MEAS_OVERRIDE, - MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, - MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE, + MSG_ID_HD_MESSAGE, // 0x8001 + MSG_ID_OFF_BUTTON_STATE_OVERRIDE, // 0x8002 + MSG_ID_STOP_BUTTON_STATE_OVERRIDE, // 0x8003 + MSG_ID_ALARM_LAMP_PATTERN_OVERRIDE, // 0x8004 + MSG_ID_WATCHDOG_TASK_CHECKIN_OVERRIDE, // 0x8005 + MSG_ID_ALARM_STATE_OVERRIDE, // 0x8006 + MSG_ID_ALARM_START_OVERRIDE, // 0x8007 + MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE, // 0x8008 + MSG_ID_BLOOD_FLOW_MEAS_OVERRIDE, // 0x8009 + MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, // 0x800A + MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE, // 0x800B NUM_OF_MSG_IDS } MSG_ID_T; @@ -74,6 +75,9 @@ // MSG_ID_ALARM_STATE_OVERRIDE void handleTestAlarmStateOverrideRequest( MESSAGE_T *message ); +// MSG_ID_ALARM_START_OVERRIDE +void handleTestAlarmStartOverrideRequest( MESSAGE_T *message ); + // MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE void handleTestBloodFlowSetPointOverrideRequest( MESSAGE_T *message ); Index: firmware/HD.dil =================================================================== diff -u -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/HD.dil (.../HD.dil) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) +++ firmware/HD.dil (.../HD.dil) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -1,4 +1,4 @@ -# RM46L852PGE 11/11/19 14:34:38 +# RM46L852PGE 11/13/19 13:30:04 # ARCH=RM46L852PGE # @@ -3299,8 +3299,8 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_21_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000080 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA.VALUE=0x00000000 @@ -3398,7 +3398,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000800 DRIVER.CAN.VAR.CAN_3_MESSAGE_7_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 @@ -3414,8 +3414,8 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_22_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000080 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000200 DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 @@ -3678,7 +3678,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_11_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000400 DRIVER.CAN.VAR.CAN_1_MESSAGE_4_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_3_MESSAGE_62_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_54_RTR.VALUE=0x00000000 @@ -3981,7 +3981,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=11 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=0x400 DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=9 DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 @@ -4036,7 +4036,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_49_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=12 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=0x401 DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DLC.VALUE=8 @@ -4113,7 +4113,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_11_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_6_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=13 +DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=0x402 DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_40_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DIR.VALUE=0x20000000 @@ -4156,7 +4156,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_1_MESSAGE_4_EOB.VALUE=0x00000080 DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_30_MASK.VALUE=0x000007FF @@ -4169,7 +4169,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ID.VALUE=30 DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=14 +DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=0x403 DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DLC.VALUE=8 @@ -4749,7 +4749,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=1 DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_40_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_32_RTR.VALUE=0x00000000 @@ -5009,7 +5009,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_59_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_59_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_3_MESSAGE_5_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_3_PIN_MODE.VALUE=0 @@ -5310,7 +5310,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_34_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_26_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x80000000 DRIVER.CAN.VAR.CAN_3_PORT_TX_PDR.VALUE=0 DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_4_RTR.VALUE=0x00000000 @@ -5324,8 +5324,8 @@ DRIVER.CAN.VAR.CAN_2_PORT_RX_DIR.VALUE=1 DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x20000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000080 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_20_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_12_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_7_BOOL_ENA.VALUE=0 @@ -5416,8 +5416,8 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=0 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x80000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=1 DRIVER.CAN.VAR.CAN_3_MESSAGE_5_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ID.VALUE=11 @@ -5429,7 +5429,7 @@ DRIVER.CAN.VAR.CAN_2_AUTO_RETRANSMISSION.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_20_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000080 DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_30_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_2_MESSAGE_22_MASK.VALUE=0x000007FF Index: firmware/source/can.c =================================================================== diff -u -reff7b1575f008f81b29ef906f6346fac6012d3ab -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/source/can.c (.../can.c) (revision eff7b1575f008f81b29ef906f6346fac6012d3ab) +++ firmware/source/can.c (.../can.c) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -373,6 +373,44 @@ canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 10U; + /** - Initialize message 11 + * - Wait until IF1 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF1 control byte + * - Set IF1 message number + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x400U & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF1CMD = (uint8) 0xF8U; + canREG1->IF1NO = 11U; + + /** - Initialize message 12 + * - Wait until IF2 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF2 control byte + * - Set IF2 message number + */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF2STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x401U & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF2CMD = (uint8) 0xF8U; + canREG1->IF2NO = 12U; + /** - Setup IF1 for data transmission * - Wait until IF1 is ready for use * - Set IF1 control byte