Index: firmware/App/Common.h =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/App/Common.h (.../Common.h) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/App/Common.h (.../Common.h) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -84,12 +84,10 @@ { SW_UPDATE_NOT_USED = 0, // 0 ///< Software update not used mailbox. SW_UPDATE_COMMAD, // 0x601 ///< Software update command mailbox. - SW_UPDATE_TD_UPDATE, // 0x602 ///< Software update TD update mailbox. - SW_UPDATE_DD_UPDATE, // 0x603 ///< Software update DD update mailbox. - SW_UPDATE_RO_UPDATE, // 0x604 ///< Software update RO update mailbox. - PLACE_HOLDER_TO_REMOVE_CAN, // 0x605 // TODO remove - SW_UPDATE_RESP, // 0x606 ///< Software update respond mailbox. - SW_TEST, // 0x607 // TODO remove + SW_UPDATE_FW_RESP, // 0x602 ///< Software update firmware respond mailbox. + SW_UPDATE_TD_UPDATE, // 0x603 ///< Software update TD update mailbox. + SW_UPDATE_DD_UPDATE, // 0x604 ///< Software update DD update mailbox. + SW_TEST, // 0x605 // TODO remove NUM_OF_SW_UPDATE_MBOXES, ///< Number of software update mailboxes. } SW_UPDATE_CAN_MAIL_BOX_T; @@ -144,7 +142,6 @@ { SW_UPDATE_TD_UPDATE, ///< Software update TD. SW_UPDATE_DD_UPDATE, ///< Software update DD. - SW_UPDATE_RO_UPDATE ///< Software update RO. }; /**@}*/ Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -91,6 +91,11 @@ } } +BL_OP_MODE_T getCurrentOpMode( void ) +{ + return currentMode; +} + /*********************************************************************//** * @brief * The transitionToNewOperationMode function calls the transition to function Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -20,6 +20,8 @@ void requestNewOperationMode( BL_OP_MODE_T newMode ); +BL_OP_MODE_T getCurrentOpMode( void ); + /**@}*/ #endif Index: firmware/App/Services/Download.c =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/App/Services/Download.c (.../Download.c) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/App/Services/Download.c (.../Download.c) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -10,6 +10,8 @@ #include "SystemComm.h" #include "Utilities.h" +#include "OperationModes.h" + /** * @addtogroup Download * @{ @@ -63,7 +65,7 @@ static void handleIncomingCmdMessage( SW_UPDATE_CAN_MAIL_BOX_T mailBox ); static void handleIncomingUpdateMessage( SW_UPDATE_CAN_MAIL_BOX_T mailBox ); -static void prepareResponseMessage( U08 respOfMsgID, ACK_NACK_STATUS_T ackNack, SW_UPDATE_RESP_STATUS_T* respBuffer ); +static void prepareAndSendFWResponseMessage( U08 respOfMsgID, ACK_NACK_STATUS_T ackNack ); static void clearSWUpdateBuffer( void ); static ACK_NACK_STATUS_T handleFirmwareUpdate( void ); static ACK_NACK_STATUS_T handleFPGAUpdate( void ); @@ -146,10 +148,7 @@ *************************************************************************/ void sendFPGAAckNackStatus( ACK_NACK_STATUS_T ackNackStatus ) { - SW_UPDATE_RESP_STATUS_T resp; - - prepareResponseMessage( SWUpdateRCVStatus.msgID, ackNackStatus, &resp ); - sendAckNackStatusFromFirmware( (U08*)&resp ); + prepareAndSendFWResponseMessage( SWUpdateRCVStatus.msgID, ackNackStatus ); clearCommBuffer( thisStackMailBox ); } @@ -179,7 +178,6 @@ { // If the command buffer has been received, get it from the comm buffer and process it SW_UPDATE_CMD_STATUS_T SWUpdateCmdStatus; - SW_UPDATE_RESP_STATUS_T resp; getCommBuffer( mailBox, (U08*)&SWUpdateCmdStatus, sizeof( SW_UPDATE_CMD_STATUS_T ) ); @@ -193,10 +191,6 @@ calcCRC = crc32( calcCRC, (U08*)&SWUpdateCmdStatus, sizeof( SW_UPDATE_CMD_STATUS_T ) - sizeof( U32 ) ); hasCRCPassed = ( SWUpdateCmdStatus.msgCRC == calcCRC ? TRUE : FALSE ); - // TODO remove - hasCRCPassed = TRUE; - // TODO remove - if ( TRUE == hasCRCPassed ) { ackStatus = ACK; @@ -210,8 +204,7 @@ } // Send the result of the command received - prepareResponseMessage( msgID, ackStatus, &resp ); - sendAckNackStatusFromFirmware( (U08*)&resp ); + prepareAndSendFWResponseMessage( msgID, ackStatus ); clearCommBuffer( mailBox ); } } @@ -231,15 +224,14 @@ // Peek into the comm buffer to see if the entire data has been received S32 bytesInBuffer = getNumberOfBytesInBuffer( mailBox ); - if ( bytesInBuffer == NUM_OF_CAN_BYTES_FOR_UPDATE ) + if ( ( bytesInBuffer == NUM_OF_CAN_BYTES_FOR_UPDATE ) && ( MODE_UPDATE == getCurrentOpMode() ) ) { - SW_UPDATE_RESP_STATUS_T resp; U08 bufferWithNoCRC[ SW_UPDATE_FLASH_BUFFER_SIZE + sizeof( U32 ) ]; - BOOL status = FALSE; - U32 calcCRC = 0; - BOOL hasCRCPassed = FALSE; - ACK_NACK_STATUS_T ackNackStatus = NACK; + U32 calcCRC = 0; + BOOL hasCRCPassed = FALSE; + ACK_NACK_STATUS_T ackStatus = NACK; + U08 msgID = 0; getCommBuffer( mailBox, (U08*)&SWUpdateRCVStatus, NUM_OF_CAN_BYTES_FOR_UPDATE ); @@ -250,22 +242,25 @@ // Calculate the CRC of the local copied buffer and compare it against the message CRC calcCRC = crc32( calcCRC, bufferWithNoCRC, sizeof( bufferWithNoCRC ) ); hasCRCPassed = ( SWUpdateRCVStatus.msgCRC == calcCRC ? TRUE : FALSE ); + msgID = SWUpdateRCVStatus.msgID; - // TODO remove - hasCRCPassed = TRUE; - // TODO remove + if ( FALSE == hasCRCPassed ) + { + BOOL test = TRUE; + } + if ( TRUE == hasCRCPassed ) { // CRC passed, call the corresponding the handlers to update either FPGA or firmware switch ( SWUpdateRCVStatus.updateDest ) { case UPDATE_FIRMWARE: - ackNackStatus = handleFirmwareUpdate(); + ackStatus = handleFirmwareUpdate(); break; case UPDATE_FPGA: - ackNackStatus = handleFPGAUpdate(); + ackStatus = handleFPGAUpdate(); break; default: @@ -274,35 +269,33 @@ } } - // TODo send nack if the CRC failed - - //prepareResponseMessage( SWUpdateRCVStatus.msgID, ackNackStatus, &resp ); - //status = sendAckNackStatusFromFirmware( (U08*)&resp ); // TODO do we have to retry if send failed? + prepareAndSendFWResponseMessage( msgID, ackStatus ); clearCommBuffer( mailBox ); // TODo does this need to be here? How about resync? - //clearSWUpdateBuffer(); // TODO uncomment + clearSWUpdateBuffer(); // TODO uncomment } } /*********************************************************************//** * @brief - * The prepareResponseMessage function prepares the message body that is - * used to respond to the updater app. + * The prepareAndSendFWResponseMessage function prepares the message body that is + * used to respond to the updater app and sends it. * @details \b Inputs: none * @details \b Outputs: none * @param message ID that is being responded for * @param ack nack status - * @param response buffer which is the pointer to the buffer that is used - * to be sent to the app * @return none *************************************************************************/ -static void prepareResponseMessage( U08 respOfMsgID, ACK_NACK_STATUS_T ackNack, SW_UPDATE_RESP_STATUS_T* respBuffer ) +static void prepareAndSendFWResponseMessage( U08 respOfMsgID, ACK_NACK_STATUS_T ackNack ) { + SW_UPDATE_RESP_STATUS_T resp; U32 calcCRC = 0; - respBuffer->msgID = respOfMsgID; - respBuffer->msgAckNackStatus = ackNack; - respBuffer->cyberRandom = 0; - respBuffer->msgCRC = crc32( calcCRC, (U08*)&respBuffer, sizeof( SW_UPDATE_RESP_STATUS_T ) - sizeof( U32 ) ); + resp.msgID = respOfMsgID; + resp.msgAckNackStatus = ackNack; + resp.cyberRandom = 0; + resp.msgCRC = crc32( calcCRC, (U08*)&resp, sizeof( SW_UPDATE_RESP_STATUS_T ) - sizeof( U32 ) ); + + sendAckNackStatusFromFirmware( (U08*)&resp ); // TODO do we have to retry if send failed? } /*********************************************************************//** @@ -328,8 +321,6 @@ *************************************************************************/ static ACK_NACK_STATUS_T handleFirmwareUpdate( void ) { - SW_UPDATE_RESP_STATUS_T resp; - ACK_NACK_STATUS_T ackStatus = ACK; BOOL status = FALSE; @@ -341,10 +332,6 @@ _enable_IRQ(); } - prepareResponseMessage( SWUpdateRCVStatus.msgID, ackStatus, &resp ); - status = sendAckNackStatusFromFirmware( (U08*)&resp ); // TODO do we have to retry if send failed? - clearCommBuffer( thisStackMailBox ); // TODo does this need to be here? How about resync? - return ackStatus; } @@ -377,10 +364,7 @@ } else { - SW_UPDATE_RESP_STATUS_T resp; - - prepareResponseMessage( SWUpdateRCVStatus.msgID, ACK, &resp ); - sendAckNackStatusFromFirmware( (U08*)&resp ); + prepareAndSendFWResponseMessage( SWUpdateRCVStatus.msgID, ACK ); } return ackStatus; Index: firmware/App/Services/NVDataMgmt.c =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/App/Services/NVDataMgmt.c (.../NVDataMgmt.c) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/App/Services/NVDataMgmt.c (.../NVDataMgmt.c) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -217,7 +217,7 @@ U08 dataRead2Verify[ SW_UPDATE_FLASH_BUFFER_SIZE ]; BOOL status = FALSE; - U08 bytesWritten = 0; + U32 bytesWritten = 0; U32 startAddress = SWUpdateFlashStatus.currentWriteAddress; memcpy( dataRead2Verify, data, SW_UPDATE_FLASH_BUFFER_SIZE ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -84,7 +84,7 @@ { BOOL status = FALSE; - if ( 0 != canTransmit( canREG1, (U32)SW_UPDATE_RESP, data ) ) + if ( 0 != canTransmit( canREG1, (U32)SW_UPDATE_FW_RESP, data ) ) { status = TRUE; } Index: firmware/BL.dil =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/BL.dil (.../BL.dil) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/BL.dil (.../BL.dil) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -1,4 +1,4 @@ -# RM46L852PGE 09/23/24 12:06:34 +# RM46L852PGE 02/04/26 13:40:54 # ARCH=RM46L852PGE # @@ -3417,7 +3417,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 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=0x00000000 +DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000200 DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 @@ -3459,7 +3459,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ID.VALUE=32 DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ID.VALUE=24 DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000002 DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DLC.VALUE=8 @@ -3517,7 +3517,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_15_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_5_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ENA.VALUE=0x00000000 @@ -3588,7 +3588,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000040 DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_TIME.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DLC.VALUE=8 @@ -3852,7 +3852,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_TQ.VALUE=250.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_BRPE.VALUE=0 DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ID.VALUE=7 DRIVER.CAN.VAR.CAN_2_MESSAGE_4_RTR.VALUE=0x00000000 @@ -3898,7 +3898,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_10_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_2_EOB.VALUE=0x00000080 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_21_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_13_MASK.VALUE=0x000007FF @@ -3952,7 +3952,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_30_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_22_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000010 DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=75 @@ -4250,7 +4250,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_11_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000400 DRIVER.CAN.VAR.CAN_1_MESSAGE_3_BOOL_ENA.VALUE=1 DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_PORT_RX_PSL.VALUE=1 @@ -4267,7 +4267,7 @@ DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT.VALUE=75.000 DRIVER.CAN.VAR.CAN_1_PORT_TX_DIR.VALUE=1 DRIVER.CAN.VAR.CAN_1_MESSAGE_5_EOB.VALUE=0x00000080 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_RAM_PARITY_ENA.VALUE=0x00000005 @@ -4358,7 +4358,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ID.VALUE=33 DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ID.VALUE=25 DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000004 DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_50_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DIR.VALUE=0x20000000 @@ -4382,7 +4382,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_30_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_22_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x80000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_1_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ID.VALUE=0x601 DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DLC.VALUE=8 @@ -4503,7 +4503,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_36_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_28_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x80000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 @@ -4537,7 +4537,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_56_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_48_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=1 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 @@ -4609,7 +4609,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_35_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_27_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000400 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000800 DRIVER.CAN.VAR.CAN_2_PORT_TX_DOUT.VALUE=1 DRIVER.CAN.VAR.CAN_2_MESSAGE_31_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_23_RTR.VALUE=0x00000000 @@ -4970,7 +4970,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_1_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000020 DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 @@ -5341,7 +5341,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_57_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000008 DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DLC.VALUE=8 @@ -8283,7 +8283,7 @@ DRIVER.PINMUX.VAR.DMA_IET_COUNT_16.VALUE=0 DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_12.VALUE=8BIT DRIVER.PINMUX.VAR.GIOB.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.DMA_ADDMR_29.VALUE=CONSTANT DRIVER.PINMUX.VAR.DMA_IET_COUNT_25.VALUE=0 DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_21.VALUE=8BIT Index: firmware/include/can.h =================================================================== diff -u -r850f8042a02fd17ee53b8db24bc2e3d17bbb9c7f -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/include/can.h (.../can.h) (revision 850f8042a02fd17ee53b8db24bc2e3d17bbb9c7f) +++ firmware/include/can.h (.../can.h) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -630,7 +630,7 @@ /* Configuration registers initial value for CAN1*/ -#define CAN1_CTL_CONFIGVALUE ((uint32)0x00000000U \ +#define CAN1_CTL_CONFIGVALUE ((uint32)0x00000200U \ | (uint32)0x00000000U \ | (uint32)((uint32)0x0000000AU << 10U) | 0x00020002U) #define CAN1_ES_CONFIGVALUE 0x00000007U @@ -641,6 +641,12 @@ #define CAN1_TEST_CONFIGVALUE 0x00000080U #define CAN1_ABOTR_CONFIGVALUE ((uint32)(0U)) #define CAN1_INTMUX0_CONFIGVALUE ((uint32)0x00000000U \ + | (uint32)0x00000002U \ + | (uint32)0x00000004U \ + | (uint32)0x00000008U \ + | (uint32)0x00000010U \ + | (uint32)0x00000020U \ + | (uint32)0x00000040U \ | (uint32)0x00000000U \ | (uint32)0x00000000U \ | (uint32)0x00000000U \ @@ -665,12 +671,6 @@ | (uint32)0x00000000U \ | (uint32)0x00000000U \ | (uint32)0x00000000U \ - | (uint32)0x00000000U \ - | (uint32)0x00000000U \ - | (uint32)0x00000000U \ - | (uint32)0x00000000U \ - | (uint32)0x00000000U \ - | (uint32)0x00000000U \ | (uint32)0x00000000U) #define CAN1_INTMUX1_CONFIGVALUE ((uint32)0x00000000U \ Index: firmware/source/can.c =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r292265111b911fa79c52bb4589911dfb60c921bf --- firmware/source/can.c (.../can.c) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/source/can.c (.../can.c) (revision 292265111b911fa79c52bb4589911dfb60c921bf) @@ -104,7 +104,7 @@ * - Disable status interrupts * - Enter initialization mode */ - canREG1->CTL = (uint32)0x00000000U + canREG1->CTL = (uint32)0x00000200U | (uint32)0x00000000U | (uint32)((uint32)0x0000000AU << 10U) | (uint32)0x00020043U; @@ -114,6 +114,12 @@ /** - Assign interrupt level for messages */ canREG1->INTMUXx[0U] = (uint32)0x00000000U + | (uint32)0x00000002U + | (uint32)0x00000004U + | (uint32)0x00000008U + | (uint32)0x00000010U + | (uint32)0x00000020U + | (uint32)0x00000040U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U @@ -138,12 +144,6 @@ | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U | (uint32)0x00000000U; canREG1->INTMUXx[1U] = (uint32)0x00000000U @@ -216,8 +216,8 @@ } /* Wait */ canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x602U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x602U & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 2U; @@ -236,7 +236,7 @@ canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x603U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 3U; @@ -273,49 +273,11 @@ } /* Wait */ canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x605U & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x605U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 5U; - /** - Initialize message 6 - * - 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)0x606U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; - canREG1->IF2CMD = (uint8) 0xF8U; - canREG1->IF2NO = 6U; - - /** - Initialize message 7 - * - 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)0x20000000U | (uint32)((uint32)((uint32)0x607U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; - canREG1->IF1CMD = (uint8) 0xF8U; - canREG1->IF1NO = 7U; - /** - Setup IF1 for data transmission * - Wait until IF1 is ready for use * - Set IF1 control byte