Index: App/Common.h =================================================================== diff -u -rbbd766eed69a6ae143a42731965848da85fd4500 -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Common.h (.../Common.h) (revision bbd766eed69a6ae143a42731965848da85fd4500) +++ App/Common.h (.../Common.h) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -19,6 +19,11 @@ #include "hal_stdtypes.h" +// ********** build switches ********** + +#define RM46_EVAL_BOARD_TARGET 1 +#define SIMULATE_UI 1 + // ********** public definitions ********** // **** Types **** Index: App/Contollers/Buttons.c =================================================================== diff -u -r833095dbbe2b21a989b05f48bd7ddc390ad964cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Contollers/Buttons.c (.../Buttons.c) (revision 833095dbbe2b21a989b05f48bd7ddc390ad964cb) +++ App/Contollers/Buttons.c (.../Buttons.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -16,9 +16,10 @@ #include "Common.h" #include "CPLD.h" +#include "OperationModes.h" +#include "SystemCommMessages.h" #include "TaskPriority.h" #include "Timers.h" -#include "OperationModes.h" #include "Buttons.h" // ********** private definitions ********** @@ -302,12 +303,9 @@ { // send off button to UI for user confirmation sendOffButtonMsgToUI(); -// ***************************** TEST CODE ****************************** -// TODO - remove later (just pretend user confirmed for now) -#if 1 +#ifdef SIMULATE_UI userConfirmOffButton( USER_CONFIRMED ); #endif -// ************************** END TEST CODE ****************************** } } prevOffButtonState = offButtonState; Index: App/Drivers/CPLD.c =================================================================== diff -u -r833095dbbe2b21a989b05f48bd7ddc390ad964cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Drivers/CPLD.c (.../CPLD.c) (revision 833095dbbe2b21a989b05f48bd7ddc390ad964cb) +++ App/Drivers/CPLD.c (.../CPLD.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -57,32 +57,29 @@ #define CLR_BLUE() {mibspiREG5->PC3 &= ~BLUE_SPI5_PORT_MASK;} #define CLR_RED() {mibspiREG5->PC3 &= ~RED_SPI5_PORT_MASK;} -// ***************************** TEST CODE ****************************** -// TODO - remove later -#if 1 -// for RM46 eval board, user button B uses the MIBSPI1_nCS[4] pin, so need to re-purpose that pin as GPIO to see the button -#define USER_BUTTON_MASK 0x00000010 // (nCS[4] -#define GET_USER_BUTTON() (PIN_SIGNAL_STATE_T)(((mibspiREG1->PC2 & USER_BUTTON_MASK) == 0 ? PIN_SIGNAL_LOW : PIN_SIGNAL_HIGH)) -PIN_SIGNAL_STATE_T getUserButtonState( void ) -{ - PIN_SIGNAL_STATE_T result = GET_USER_BUTTON(); - - return result; -} -// for RM46 eval board, user LED A uses the same GPIO pin that CPLD uses for watchdog pet. Had to disable watchdog pet to use as LED. -void setUserLED( BOOL on ) -{ - if ( on == TRUE ) +#ifdef RM46_EVAL_BOARD_TARGET + // for RM46 eval board, user button B uses the MIBSPI1_nCS[4] pin, so need to re-purpose that pin as GPIO to see the button + #define USER_BUTTON_MASK 0x00000010 // (nCS[4] + #define GET_USER_BUTTON() (PIN_SIGNAL_STATE_T)(((mibspiREG1->PC2 & USER_BUTTON_MASK) == 0 ? PIN_SIGNAL_LOW : PIN_SIGNAL_HIGH)) + PIN_SIGNAL_STATE_T getUserButtonState( void ) { - SET_WD_PET(); + PIN_SIGNAL_STATE_T result = GET_USER_BUTTON(); + + return result; } - else + // for RM46 eval board, user LED A uses the same GPIO pin that CPLD uses for watchdog pet. Had to disable watchdog pet to use as LED. + void setUserLED( BOOL on ) { - CLR_WD_PET(); + if ( on == TRUE ) + { + SET_WD_PET(); + } + else + { + CLR_WD_PET(); + } } -} #endif -// ************************** END TEST CODE ****************************** /************************************************************************* * @brief initCPLD Index: App/Drivers/CPLD.h =================================================================== diff -u -rc91e9da338d92432930d3589a4055ebbb404c6cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Drivers/CPLD.h (.../CPLD.h) (revision c91e9da338d92432930d3589a4055ebbb404c6cb) +++ App/Drivers/CPLD.h (.../CPLD.h) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -34,12 +34,9 @@ PIN_SIGNAL_STATE_T getCPLDOffButton( void ); PIN_SIGNAL_STATE_T getCPLDStopButton( void ); -// ***************************** TEST CODE ****************************** -// TODO - remove later -#if 1 -PIN_SIGNAL_STATE_T getUserButtonState( void ); -void setUserLED( BOOL on ); +#ifdef RM46_EVAL_BOARD_TARGET + PIN_SIGNAL_STATE_T getUserButtonState( void ); + void setUserLED( BOOL on ); #endif -// ************************** END TEST CODE ****************************** #endif Index: App/Services/SystemComm.c =================================================================== diff -u -r83de6e3e3de4767fd50713e18b0bd75a06479fc7 -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Services/SystemComm.c (.../SystemComm.c) (revision 83de6e3e3de4767fd50713e18b0bd75a06479fc7) +++ App/Services/SystemComm.c (.../SystemComm.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -24,12 +24,9 @@ #include "SystemCommMessages.h" #include "SystemComm.h" -// ***************************** TEST CODE ****************************** -// TODO - remove later -#if 1 -#include "CPLD.h" +#ifdef RM46_EVAL_BOARD_TARGET + #include "CPLD.h" #endif -// ************************** END TEST CODE ****************************** // ********** private definitions ********** @@ -58,6 +55,11 @@ // ********** private function prototypes ********** +static void handleCANPacketReceivedInt( CAN_MESSAGE_BOX_T srcCANBox ); +static void handleCANXmitCompleteInt( void ); +static BOOL isCANBoxForXmit( CAN_MESSAGE_BOX_T srcCANBox ); +static BOOL isCANBoxForRecv( CAN_MESSAGE_BOX_T srcCANBox ); + static COMM_BUFFER_T findNextHighestPriorityCANPacketToTransmit( void ); static void transmitNextCANPacket( void ); static void transmitPendingUARTData( void ); @@ -125,8 +127,92 @@ } } +/************************************************************************* + * @brief handleCANMsgInterrupt + * The handleCANMsgInterrupt function handles a CAN message interrupt. \n + * This may have occurred because a CAN packet transmission has completed \n + * or because a CAN packet has been received. The appropriate handler is \n + * called. + * @details + * Inputs : none + * Outputs : message interrupt handled + * @param srcCANBox : which CAN message box triggered this interrupt + * @return none + *************************************************************************/ +void handleCANMsgInterrupt( CAN_MESSAGE_BOX_T srcCANBox ) +{ + // message interrupt is for a transmit message box? + if ( TRUE == isCANBoxForXmit( srcCANBox ) ) + { + handleCANXmitCompleteInt(); + } + else if ( TRUE == isCANBoxForRecv( srcCANBox ) ) + { + handleCANPacketReceivedInt( srcCANBox ); + } + else + { + // shouldn't get here - not an active message box + // s/w fault? + } +} /************************************************************************* + * @brief isCANBoxForXmit + * The isCANBoxForXmit function determines whether a given CAN message box \n + * is configured for transmit. + * @details + * Inputs : CAN_OUT_BUFFERS[] + * Outputs : none + * @param srcCANBox : which CAN message box to check + * @return TRUE if the given CAN message box is configured for transmit, FALSE if not. + *************************************************************************/ +static BOOL isCANBoxForXmit( CAN_MESSAGE_BOX_T srcCANBox ) +{ + BOOL result = FALSE; + U32 i; + + for ( i = 0; i < NUM_OF_CAN_OUT_BUFFERS; i++ ) + { + if ( CAN_OUT_BUFFERS[i] == srcCANBox ) + { + result = TRUE; + break; + } + } + + return result; +} + +/************************************************************************* + * @brief isCANBoxForRecv + * The isCANBoxForRecv function determines whether a given CAN message box \n + * is configured for receiving. + * @details + * Inputs : CAN_IN_BUFFERS[] + * Outputs : none + * @param srcCANBox : which CAN message box to check + * @return TRUE if the given CAN message box is configured for receiving, FALSE if not. + *************************************************************************/ +static BOOL isCANBoxForRecv( CAN_MESSAGE_BOX_T srcCANBox ) +{ + BOOL result = FALSE; + U32 i; + + for ( i = 0; i < NUM_OF_CAN_IN_BUFFERS; i++ ) + { + if ( CAN_IN_BUFFERS[i] == srcCANBox ) + { + result = TRUE; + break; + } + } + + return result; +} + + +/************************************************************************* ********************** TRANSMIT SUPPORT FUNCTIONS ************************ *************************************************************************/ @@ -143,7 +229,7 @@ * @param none * @return none *************************************************************************/ -void handleCANXmitCompleteInt( void ) +static void handleCANXmitCompleteInt( void ) { transmitNextCANPacket(); } @@ -237,15 +323,15 @@ * @param srcCANBox : CAN message box that the packet arrived in * @return none *************************************************************************/ -void handleCANPacketReceivedInt( CAN_MESSAGE_BOX_T srcCANBox ) +static void handleCANPacketReceivedInt( CAN_MESSAGE_BOX_T srcCANBox ) { U08 data[CAN_MESSAGE_CARGO_SIZE]; - // TODO - get received packets from any/all CAN message boxes that have a new packet - if ( FALSE != canIsRxMessageArrived( canREG1, srcCANBox ) ) // TODO - is this even necessary? when interrupt is calling, don't we already know it's arrived? + // get CAN packet received on given CAN message box + if ( FALSE != canIsRxMessageArrived( canREG1, srcCANBox ) ) { canGetData( canREG1, srcCANBox, data ); - // TODO - select appropriate comm buffer based on the message box it came in on (s/b same #) + // add CAN packet to appropriate comm buffer based on the message box it came in on (s/b same #) addToCommBuffer( srcCANBox, data, CAN_MESSAGE_CARGO_SIZE ); } } @@ -266,7 +352,7 @@ U32 i; // TODO - remove this later - this should be called by CAN receive interrupt handler when implemented - handleCANPacketReceivedInt( COMM_BUFFER_IN_CAN_UI_2_HD ); +// handleCANPacketReceivedInt( COMM_BUFFER_IN_CAN_UI_2_HD ); // queue any received CAN messages for ( i = 0; i < NUM_OF_CAN_IN_BUFFERS; i++ ) @@ -278,18 +364,19 @@ // do we have enough bytes in buffer for smallest message? numOfBytesInBuffer = numberOfBytesInCommBuffer( CAN_IN_BUFFERS[i] ); if ( numOfBytesInBuffer >= MESSAGE_OVERHEAD_SIZE ) - { - U32 bytesPeeked = peekFromCommBuffer( CAN_IN_BUFFERS[i], data, MIN(numOfBytesInBuffer,(sizeof(MESSAGE_WRAPPER_T)+1)) ); + { // peek at minimum of all bytes available or max message size (+1 for sync byte) + U32 bytesPeeked = peekFromCommBuffer( CAN_IN_BUFFERS[i], data, MIN(numOfBytesInBuffer,sizeof(MESSAGE_WRAPPER_T)+1) ); U32 msgSize = parseMessageFromBuffer( data, bytesPeeked ); if ( msgSize > 0 ) - { - msgSize = getFromCommBuffer( CAN_IN_BUFFERS[i], data, msgSize ); - if ( msgSize > 0 ) + { // consume message (+sync byte) + msgSize = getFromCommBuffer( CAN_IN_BUFFERS[i], data, msgSize+1 ); + if ( msgSize > MESSAGE_OVERHEAD_SIZE ) { MESSAGE_WRAPPER_T rcvMsg; - U08 *dataPtr = data; + U08 *dataPtr = data+1; // skip over sync byte + // convert received message data to a message and add to message queue blankMessageInWrapper( &rcvMsg ); memcpy( &(rcvMsg.msg.hdr), dataPtr, sizeof(MESSAGE_HEADER_T) ); dataPtr += sizeof(MESSAGE_HEADER_T); @@ -321,12 +408,16 @@ // consume bytes out of buffer 1 at a time until we find the sync byte or it's empty while ( numOfBytesInBuffer > 0 ) { - getFromCommBuffer( buffer, &data, 1 ); + peekFromCommBuffer( buffer, &data, 1 ); if ( MESSAGE_SYNC_BYTE == data ) { break; // we found a sync - we're done } - numOfBytesInBuffer = numberOfBytesInCommBuffer( buffer ); + else // not a sync byte, so consume it + { + getFromCommBuffer( buffer, &data, 1 ); + numOfBytesInBuffer = numberOfBytesInCommBuffer( buffer ); + } } } @@ -422,12 +513,9 @@ { case MSG_ID_OFF_BUTTON_PRESS: handleOffButtonConfirmMsgFromUI( message ); -// ***************************** TEST CODE ****************************** -// TODO - remove later -#if 1 +#ifdef RM46_EVAL_BOARD_TARGET setUserLED( TRUE ); #endif -// ************************** END TEST CODE ****************************** break; default: Index: App/Services/SystemComm.h =================================================================== diff -u -r83de6e3e3de4767fd50713e18b0bd75a06479fc7 -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Services/SystemComm.h (.../SystemComm.h) (revision 83de6e3e3de4767fd50713e18b0bd75a06479fc7) +++ App/Services/SystemComm.h (.../SystemComm.h) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -33,7 +33,6 @@ void initSystemComm( void ); void execSystemCommRx( void ); void execSystemCommTx( void ); -void handleCANPacketReceivedInt( CAN_MESSAGE_BOX_T srcCANBox ); -void handleCANXmitCompleteInt( void ); +void handleCANMsgInterrupt( CAN_MESSAGE_BOX_T srcCANBox ); #endif Index: App/Services/SystemCommMessages.h =================================================================== diff -u -r83de6e3e3de4767fd50713e18b0bd75a06479fc7 -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 83de6e3e3de4767fd50713e18b0bd75a06479fc7) +++ App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -18,6 +18,7 @@ #define __SYSTEM_COMM_MESSAGES_H__ #include "Common.h" +#include "MsgQueues.h" // ********** public definitions ********** Index: App/Services/WatchdogMgmt.c =================================================================== diff -u -r833095dbbe2b21a989b05f48bd7ddc390ad964cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 833095dbbe2b21a989b05f48bd7ddc390ad964cb) +++ App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -245,13 +245,10 @@ *************************************************************************/ static void petWatchdog( void ) { -// ***************************** TEST CODE ****************************** -// TODO - remove disabling of watchdog pet later -#if 0 // TODO - this is temporary test code - restore watchdog pet later +#ifndef RM46_EVAL_BOARD_TARGET // pulse the watchdog signal toggleCPLDWatchdog(); #endif -// ************************** END TEST CODE ****************************** // remember when we last pet the watchdog lastWatchdogPetTime = getMSTimerCount(); Index: App/Tasks/TaskGeneral.c =================================================================== diff -u -rc91e9da338d92432930d3589a4055ebbb404c6cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision c91e9da338d92432930d3589a4055ebbb404c6cb) +++ App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -24,13 +24,11 @@ #include "WatchdogMgmt.h" #include "TaskGeneral.h" -// ***************************** TEST CODE ****************************** -// TODO - remove later -#if 1 -#include "CPLD.h" -static BOOL lastUserPress = FALSE; +#ifdef RM46_EVAL_BOARD_TARGET + #include "CPLD.h" + #include "SystemCommMessages.h" + static BOOL lastUserPress = FALSE; #endif -// ************************** END TEST CODE ****************************** /************************************************************************* * @brief taskGeneral @@ -45,9 +43,7 @@ *************************************************************************/ void taskGeneral( void ) { -// ***************************** TEST CODE ****************************** -// TODO - remove later -#if 1 +#ifdef RM46_EVAL_BOARD_TARGET if ( getUserButtonState() == PIN_SIGNAL_LOW ) { if ( lastUserPress == FALSE ) @@ -62,7 +58,6 @@ lastUserPress = FALSE; } #endif -// ************************** END TEST CODE ****************************** // manage data received from other sub-systems execSystemCommRx(); Index: HD.dil =================================================================== diff -u -r833095dbbe2b21a989b05f48bd7ddc390ad964cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- HD.dil (.../HD.dil) (revision 833095dbbe2b21a989b05f48bd7ddc390ad964cb) +++ HD.dil (.../HD.dil) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -1,4 +1,4 @@ -# RM46L852PGE 10/10/19 13:52:09 +# RM46L852PGE 10/11/19 10:03:13 # ARCH=RM46L852PGE # @@ -57,7 +57,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_PRAGMA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=FIQ DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI2_RAMPARITYCHECK_ENA.VALUE=0 DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=0 @@ -211,7 +211,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_PARITY_ENABLE.VALUE=TRUE DRIVER.SYSTEM.VAR.SAFETY_INIT_FRAY_DP_PBISTCHECK_ENA.VALUE=0x00000000 @@ -373,10 +373,10 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=FIQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI4_RAMPARITYCHECK_ENA.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_EMAC_SP_PBISTCHECK_ENA.VALUE=0x00000000 DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F @@ -457,7 +457,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.SAFETY_INIT_VIM1_RAMPARITYCHECK_ENA.VALUE=1 DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=VCLK DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=165.0 @@ -552,7 +552,7 @@ DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000100 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=1 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1300 DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=rtiCompare3Interrupt @@ -954,7 +954,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=FIQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.PMM_LOGIC_PD5_STATE.VALUE=1 DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN2_DP_PBISTCHECK_ENA.VALUE=0x00000008 @@ -3310,7 +3310,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_45_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000800 DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 @@ -3355,7 +3355,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ENA.VALUE=0x00000000 @@ -3445,7 +3445,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_5_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_8_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_3_BOOL_ENA.VALUE=0 @@ -3489,7 +3489,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_51_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_3_MESSAGE_43_BOOL_ENA.VALUE=0 @@ -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 @@ -3610,7 +3610,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000400 DRIVER.CAN.VAR.CAN_1_MESSAGE_4_BOOL_ENA.VALUE=1 DRIVER.CAN.VAR.CAN_3_MESSAGE_9_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ID.VALUE=51 @@ -3910,7 +3910,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_36_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_28_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000800 DRIVER.CAN.VAR.CAN_3_MESSAGE_64_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_56_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_48_RTR.VALUE=0x00000000 @@ -4001,7 +4001,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_ENABLE.VALUE=1 DRIVER.CAN.VAR.CAN_2_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000400 DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ENA.VALUE=0x80000000 DRIVER.CAN.VAR.CAN_1_PIN_MODE.VALUE=1 DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ID.VALUE=58 @@ -4085,7 +4085,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=18 DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 @@ -4177,7 +4177,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA.VALUE=0x00000000 @@ -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 @@ -4268,7 +4268,7 @@ 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_2_INT_ENA_REF.VALUE=0x00000000 +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 DRIVER.CAN.VAR.CAN_3_PHASE_SEG.VALUE=3 @@ -4536,7 +4536,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_64_MASK.VALUE=0x000007FF 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_9_INT_ENA.VALUE=0x00000400 DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=1 DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_13_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=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000400 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 @@ -4917,7 +4917,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_32_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_24_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000400 DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ID.VALUE=41 DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ID.VALUE=33 DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ID.VALUE=25 @@ -4946,7 +4946,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_18_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_41_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_3_MESSAGE_33_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_3_MESSAGE_25_MASK.VALUE=0x000007FF @@ -4988,7 +4988,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_7_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_2_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000800 DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ID.VALUE=50 DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ID.VALUE=42 DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ID.VALUE=34 @@ -5041,7 +5041,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_39_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ENA.VALUE=0x00000000 @@ -5119,7 +5119,7 @@ DRIVER.CAN.VAR.CAN_1_SYNC.VALUE=1 DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000001 DRIVER.CAN.VAR.CAN_3_PORT_RX_PULDIS.VALUE=0 DRIVER.CAN.VAR.CAN_3_MESSAGE_60_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_3_MESSAGE_52_BOOL_ENA.VALUE=0 @@ -5249,7 +5249,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_6_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000800 DRIVER.CAN.VAR.CAN_1_MESSAGE_5_BOOL_ENA.VALUE=1 DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_60_RTR.VALUE=0x00000000 Index: include/sys_vim.h =================================================================== diff -u -r765d2c35118e202444e737c66c77faf9678cc87e -r29f1ba03faefd982327916590818a260a3e4aa48 --- include/sys_vim.h (.../sys_vim.h) (revision 765d2c35118e202444e737c66c77faf9678cc87e) +++ include/sys_vim.h (.../sys_vim.h) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -93,6 +93,8 @@ extern void rtiCompare0Interrupt(void); extern void rtiCompare1Interrupt(void); extern void rtiCompare3Interrupt(void); +extern void can1HighLevelInterrupt(void); +extern void can1LowLevelInterrupt(void); /* USER CODE BEGIN (3) */ /* USER CODE END */ @@ -127,7 +129,7 @@ /* Configuration registers initial value */ #define VIM_FIRQPR0_CONFIGVALUE ( (uint32)((uint32)SYS_FIQ << 0U)\ | (uint32)((uint32)SYS_FIQ << 1U)\ - | (uint32)((uint32)SYS_IRQ << 2U)\ + | (uint32)((uint32)SYS_FIQ << 2U)\ | (uint32)((uint32)SYS_IRQ << 3U)\ | (uint32)((uint32)SYS_IRQ << 4U)\ | (uint32)((uint32)SYS_IRQ << 5U)\ @@ -141,7 +143,7 @@ | (uint32)((uint32)SYS_IRQ << 13U)\ | (uint32)((uint32)SYS_IRQ << 14U)\ | (uint32)((uint32)SYS_IRQ << 15U)\ - | (uint32)((uint32)SYS_IRQ << 16U)\ + | (uint32)((uint32)SYS_FIQ << 16U)\ | (uint32)((uint32)SYS_IRQ << 17U)\ | (uint32)((uint32)SYS_IRQ << 18U)\ | (uint32)((uint32)SYS_IRQ << 19U)\ @@ -154,7 +156,7 @@ | (uint32)((uint32)SYS_IRQ << 26U)\ | (uint32)((uint32)SYS_IRQ << 27U)\ | (uint32)((uint32)SYS_IRQ << 28U)\ - | (uint32)((uint32)SYS_IRQ << 29U)\ + | (uint32)((uint32)SYS_FIQ << 29U)\ | (uint32)((uint32)SYS_IRQ << 30U)\ | (uint32)((uint32)SYS_IRQ << 31U)) @@ -273,7 +275,7 @@ | (uint32)((uint32)0U << 13U)\ | (uint32)((uint32)0U << 14U)\ | (uint32)((uint32)0U << 15U)\ - | (uint32)((uint32)0U << 16U)\ + | (uint32)((uint32)1U << 16U)\ | (uint32)((uint32)0U << 17U)\ | (uint32)((uint32)0U << 18U)\ | (uint32)((uint32)0U << 19U)\ @@ -286,7 +288,7 @@ | (uint32)((uint32)0U << 26U)\ | (uint32)((uint32)0U << 27U)\ | (uint32)((uint32)0U << 28U)\ - | (uint32)((uint32)0U << 29U)\ + | (uint32)((uint32)1U << 29U)\ | (uint32)((uint32)0U << 30U)\ | (uint32)((uint32)0U << 31U)) Index: source/can.c =================================================================== diff -u -r833095dbbe2b21a989b05f48bd7ddc390ad964cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- source/can.c (.../can.c) (revision 833095dbbe2b21a989b05f48bd7ddc390ad964cb) +++ source/can.c (.../can.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -198,7 +198,7 @@ canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)1U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 1U; @@ -217,7 +217,7 @@ canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)2U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (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)3U & (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; @@ -255,7 +255,7 @@ canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)4U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 4U; @@ -274,7 +274,7 @@ canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)5U & (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 = 5U; @@ -293,7 +293,7 @@ canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)6U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 6U; @@ -312,7 +312,7 @@ canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)7U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 7U; @@ -331,7 +331,7 @@ canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)8U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 8U; @@ -350,7 +350,7 @@ canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)9U & (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 = 9U; @@ -369,7 +369,7 @@ canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)10U & (uint32)0x000007FFU) << (uint32)18U); - canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; + canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 10U; @@ -1540,9 +1540,110 @@ } } +/* USER CODE BEGIN (40) */ +/* USER CODE END */ +/** @fn void can1HighLevelInterrupt(void) +* @brief CAN1 Level 0 Interrupt Handler +*/ +#pragma CODE_STATE(can1HighLevelInterrupt, 32) +#pragma INTERRUPT(can1HighLevelInterrupt, FIQ) +/* SourceId : CAN_SourceId_020 */ +/* DesignId : CAN_DesignId_018 */ +/* Requirements : HL_SR221, HL_SR222, HL_SR223 */ +void can1HighLevelInterrupt(void) +{ + uint32 value = canREG1->INT; + uint32 ES_value; +/* USER CODE BEGIN (41) */ +/* USER CODE END */ + if (value == 0x8000U) + { + /* Read Error and Status Register*/ + ES_value = canREG1->ES; + + /* Check for Error (PES, Boff, EWarn & EPass) captured */ + if((ES_value & 0x1E0U) != 0U) + { + canErrorNotification(canREG1, ES_value & 0x1E0U); + } + else + { + /* Call General Can notification incase of RxOK, TxOK, PDA, WakeupPnd Interrupt */ + canStatusChangeNotification(canREG1, ES_value & 0x618U); + } + } + else + { + /** - Setup IF1 for clear pending interrupt flag */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG1->IF1CMD = 0x08U; + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + canREG1->IF1NO = (uint8) value; + + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG1->IF1CMD = 0x87U; + canMessageNotification(canREG1, value); + } + +/* USER CODE BEGIN (42) */ +/* USER CODE END */ +} + +/* USER CODE BEGIN (43) */ +/* USER CODE END */ + +/** @fn void can1LowLevelInterrupt(void) +* @brief CAN1 Level 1 Interrupt Handler +*/ +#pragma CODE_STATE(can1LowLevelInterrupt, 32) +#pragma INTERRUPT(can1LowLevelInterrupt, FIQ) + +/* SourceId : CAN_SourceId_021 */ +/* DesignId : CAN_DesignId_019 */ +/* Requirements : HL_SR221, HL_SR223 */ +void can1LowLevelInterrupt(void) +{ + uint32 messageBox = canREG1->INT >> 16U; + +/* USER CODE BEGIN (44) */ +/* USER CODE END */ + + /** - Setup IF1 for clear pending interrupt flag */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + + canREG1->IF1CMD = 0x08U; + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + canREG1->IF1NO = (uint8) messageBox; + + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG1->IF1CMD = 0x87U; + + canMessageNotification(canREG1, messageBox); + +/* USER CODE BEGIN (45) */ +/* USER CODE END */ + +} + + + + + Index: source/notification.c =================================================================== diff -u -rad8ad611c910747eef92336a30b6520a83409532 -r29f1ba03faefd982327916590818a260a3e4aa48 --- source/notification.c (.../notification.c) (revision ad8ad611c910747eef92336a30b6520a83409532) +++ source/notification.c (.../notification.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -59,6 +59,7 @@ #include "sys_dma.h" /* USER CODE BEGIN (0) */ +#include "SystemComm.h" /* USER CODE END */ #pragma WEAK(esmGroup1Notification) void esmGroup1Notification(uint32 channel) @@ -131,6 +132,7 @@ { /* enter user code between the USER CODE BEGIN and USER CODE END. */ /* USER CODE BEGIN (15) */ + handleCANMsgInterrupt( (CAN_MESSAGE_BOX_T)messageBox ); /* USER CODE END */ } Index: source/rti.c =================================================================== diff -u -r879f01d26ef663cceccf14963c09f53e72c13cec -r29f1ba03faefd982327916590818a260a3e4aa48 --- source/rti.c (.../rti.c) (revision 879f01d26ef663cceccf14963c09f53e72c13cec) +++ source/rti.c (.../rti.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -856,6 +856,8 @@ * RTI1 Compare 0 interrupt handler * */ +#pragma CODE_STATE(rtiCompare0Interrupt, 32) +#pragma INTERRUPT(rtiCompare0Interrupt, FIQ) /* SourceId : RTI_SourceId_022 */ /* DesignId : RTI_DesignId_022 */ Index: source/sys_main.c =================================================================== diff -u -r833095dbbe2b21a989b05f48bd7ddc390ad964cb -r29f1ba03faefd982327916590818a260a3e4aa48 --- source/sys_main.c (.../sys_main.c) (revision 833095dbbe2b21a989b05f48bd7ddc390ad964cb) +++ source/sys_main.c (.../sys_main.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -124,6 +124,7 @@ rtiInit(); rtiEnableNotification( rtiNOTIFICATION_COMPARE0 | rtiNOTIFICATION_COMPARE1 | rtiNOTIFICATION_COMPARE3 ); rtiStartCounter( rtiCOUNTER_BLOCK0 ); + _enable_FIQ(); _enable_IRQ(); } Index: source/sys_vim.c =================================================================== diff -u -r765d2c35118e202444e737c66c77faf9678cc87e -r29f1ba03faefd982327916590818a260a3e4aa48 --- source/sys_vim.c (.../sys_vim.c) (revision 765d2c35118e202444e737c66c77faf9678cc87e) +++ source/sys_vim.c (.../sys_vim.c) (revision 29f1ba03faefd982327916590818a260a3e4aa48) @@ -85,7 +85,7 @@ &phantomInterrupt, /* Channel 13 */ &phantomInterrupt, /* Channel 14 */ &phantomInterrupt, /* Channel 15 */ - &phantomInterrupt, /* Channel 16 */ + &can1HighLevelInterrupt, /* Channel 16 */ &phantomInterrupt, /* Channel 17 */ &phantomInterrupt, /* Channel 18 */ &phantomInterrupt, /* Channel 19 */ @@ -98,7 +98,7 @@ &phantomInterrupt, /* Channel 26 */ &phantomInterrupt, /* Channel 27 */ &phantomInterrupt, /* Channel 28 */ - &phantomInterrupt, /* Channel 29 */ + &can1LowLevelInterrupt, /* Channel 29 */ &phantomInterrupt, /* Channel 30 */ &phantomInterrupt, /* Channel 31 */ &phantomInterrupt, /* Channel 32 */ @@ -229,7 +229,7 @@ /* set IRQ/FIQ priorities */ vimREG->FIRQPR0 = (uint32)((uint32)SYS_FIQ << 0U) | (uint32)((uint32)SYS_FIQ << 1U) - | (uint32)((uint32)SYS_IRQ << 2U) + | (uint32)((uint32)SYS_FIQ << 2U) | (uint32)((uint32)SYS_IRQ << 3U) | (uint32)((uint32)SYS_IRQ << 4U) | (uint32)((uint32)SYS_IRQ << 5U) @@ -243,7 +243,7 @@ | (uint32)((uint32)SYS_IRQ << 13U) | (uint32)((uint32)SYS_IRQ << 14U) | (uint32)((uint32)SYS_IRQ << 15U) - | (uint32)((uint32)SYS_IRQ << 16U) + | (uint32)((uint32)SYS_FIQ << 16U) | (uint32)((uint32)SYS_IRQ << 17U) | (uint32)((uint32)SYS_IRQ << 18U) | (uint32)((uint32)SYS_IRQ << 19U) @@ -256,7 +256,7 @@ | (uint32)((uint32)SYS_IRQ << 26U) | (uint32)((uint32)SYS_IRQ << 27U) | (uint32)((uint32)SYS_IRQ << 28U) - | (uint32)((uint32)SYS_IRQ << 29U) + | (uint32)((uint32)SYS_FIQ << 29U) | (uint32)((uint32)SYS_IRQ << 30U) | (uint32)((uint32)SYS_IRQ << 31U); @@ -378,7 +378,7 @@ | (uint32)((uint32)0U << 13U) | (uint32)((uint32)0U << 14U) | (uint32)((uint32)0U << 15U) - | (uint32)((uint32)0U << 16U) + | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) @@ -391,7 +391,7 @@ | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U) | (uint32)((uint32)0U << 28U) - | (uint32)((uint32)0U << 29U) + | (uint32)((uint32)1U << 29U) | (uint32)((uint32)0U << 30U) | (uint32)((uint32)0U << 31U);