Index: firmware/.launches/DG.launch =================================================================== diff -u -rbbf1e3736be03a4f041ace57e0f95e23caf472dd -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/.launches/DG.launch (.../DG.launch) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) +++ firmware/.launches/DG.launch (.../DG.launch) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -3,7 +3,7 @@ - + Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r154c57add35e5513f1a18d09328ef7dd64805e02 -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 154c57add35e5513f1a18d09328ef7dd64805e02) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -137,7 +137,7 @@ *************************************************************************/ F32 getLoadCellFilteredWeight( U32 loadCellID ) { - U32 result = 0; + F32 result = 0; if ( loadCellID < NUM_OF_LOAD_CELLS ) { Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -rbbf1e3736be03a4f041ace57e0f95e23caf472dd -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -46,7 +46,7 @@ #define ROP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the RO pump is controlled #define ROP_P_COEFFICIENT 0.005 ///< P term for RO pump control -#define ROP_I_COEFFICIENT 0.00025 ///< I term for RO pump control +#define ROP_I_COEFFICIENT 0.0025 ///< I term for RO pump control #define ROP_PSI_TO_PWM_DC(p) ( 0.2 + ( (F32)((p) - 100) * 0.01 ) ) ///< conversion factor from target PSI to PWM duty cycle estimate TODO - this is a place holder for real conversion Index: firmware/App/Services/CommBuffers.c =================================================================== diff -u -rb64c49fdcf2b6d95e61e63f8e258c4e600935bbd -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision b64c49fdcf2b6d95e61e63f8e258c4e600935bbd) +++ firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -91,10 +91,11 @@ // verify given buffer if ( buffer < NUM_OF_COMM_BUFFERS ) { + BOOL bufferFull = FALSE; U32 activeBuffer; U32 currentActiveBufCount; // where to start adding new data to buffer (after existing data) - // add requires brief thread protection because there may be multiple sources for transmits trying to add data to a buffer. + // thread protection for queue operations _disable_IRQ(); bufferGetLock[ buffer ] = TRUE; @@ -112,17 +113,19 @@ memcpy( buffPtr, data, len ); // adjust buffer count per this data add (also reserves space to add data before releasing thread protection) commBufferByteCount[ buffer ][ activeBuffer ] += len; - // release thread protection - bufferGetLock[ buffer ] = FALSE; - _enable_IRQ(); // data successfully added to buffer result = TRUE; } else // buffer too full to add this much data { - // release thread protection - bufferGetLock[ buffer ] = FALSE; - _enable_IRQ(); + bufferFull = TRUE; + } + // release thread protection + bufferGetLock[ buffer ] = FALSE; + _enable_IRQ(); + // if buffer was full, trigger s/w fault + if ( TRUE == bufferFull ) + { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_ADD_TOO_MUCH_DATA, len ) } } @@ -159,6 +162,8 @@ // verify given buffer if ( buffer < NUM_OF_COMM_BUFFERS ) { + // thread protection for queue operations + _disable_IRQ(); // verify requested # of bytes to get are in the buffer if ( ( len <= ( COMM_BUFFER_LENGTH * DOUBLE_BUFFERS ) ) && ( len <= numberOfBytesInCommBuffer( buffer ) ) ) { @@ -182,6 +187,8 @@ result += remNumOfBytes; } } + // release thread protection + _enable_IRQ(); } else // invalid buffer given { @@ -214,6 +221,8 @@ // verify given buffer if ( buffer < NUM_OF_COMM_BUFFERS ) { + // thread protection for queue operations + _disable_IRQ(); // verify requested # of bytes to peek are in the buffer if ( ( len <= ( COMM_BUFFER_LENGTH * DOUBLE_BUFFERS ) ) && ( len <= numberOfBytesInCommBuffer( buffer ) ) ) { @@ -236,6 +245,8 @@ numOfBytesPeeked = bytesInInactiveBuffer + remNumOfBytes; } } + // release thread protection + _enable_IRQ(); } else // invalid buffer given { Index: firmware/DG.dil =================================================================== diff -u -r2496e9225fa1b2c627d625def02515a0f0dd5793 -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/DG.dil (.../DG.dil) (revision 2496e9225fa1b2c627d625def02515a0f0dd5793) +++ firmware/DG.dil (.../DG.dil) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -1,4 +1,4 @@ -# RM46L852PGE 04/24/20 09:47:06 +# RM46L852PGE 05/28/20 09:00:50 # ARCH=RM46L852PGE # @@ -374,9 +374,9 @@ 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=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=FIQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=0 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=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=0 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 @@ -954,7 +954,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=FIQ 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=FIQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ 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 Index: firmware/include/sys_vim.h =================================================================== diff -u -rf068446fdb7889d320ddb6ffbd58f347ce0501e7 -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/include/sys_vim.h (.../sys_vim.h) (revision f068446fdb7889d320ddb6ffbd58f347ce0501e7) +++ firmware/include/sys_vim.h (.../sys_vim.h) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -147,7 +147,7 @@ | (uint32)((uint32)SYS_FIQ << 13U)\ | (uint32)((uint32)SYS_IRQ << 14U)\ | (uint32)((uint32)SYS_FIQ << 15U)\ - | (uint32)((uint32)SYS_FIQ << 16U)\ + | (uint32)((uint32)SYS_IRQ << 16U)\ | (uint32)((uint32)SYS_IRQ << 17U)\ | (uint32)((uint32)SYS_IRQ << 18U)\ | (uint32)((uint32)SYS_IRQ << 19U)\ @@ -160,7 +160,7 @@ | (uint32)((uint32)SYS_IRQ << 26U)\ | (uint32)((uint32)SYS_IRQ << 27U)\ | (uint32)((uint32)SYS_IRQ << 28U)\ - | (uint32)((uint32)SYS_FIQ << 29U)\ + | (uint32)((uint32)SYS_IRQ << 29U)\ | (uint32)((uint32)SYS_IRQ << 30U)\ | (uint32)((uint32)SYS_IRQ << 31U)) Index: firmware/source/can.c =================================================================== diff -u -r6d2d8f0267c57135554e5a1acaca9aef37f27949 -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/source/can.c (.../can.c) (revision 6d2d8f0267c57135554e5a1acaca9aef37f27949) +++ firmware/source/can.c (.../can.c) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -1545,8 +1545,6 @@ /** @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 */ @@ -1607,8 +1605,6 @@ /** @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 */ Index: firmware/source/sys_vim.c =================================================================== diff -u -rf068446fdb7889d320ddb6ffbd58f347ce0501e7 -rc4434389fe6c3314c2bba98dc2f4cf737551f637 --- firmware/source/sys_vim.c (.../sys_vim.c) (revision f068446fdb7889d320ddb6ffbd58f347ce0501e7) +++ firmware/source/sys_vim.c (.../sys_vim.c) (revision c4434389fe6c3314c2bba98dc2f4cf737551f637) @@ -243,7 +243,7 @@ | (uint32)((uint32)SYS_FIQ << 13U) | (uint32)((uint32)SYS_IRQ << 14U) | (uint32)((uint32)SYS_FIQ << 15U) - | (uint32)((uint32)SYS_FIQ << 16U) + | (uint32)((uint32)SYS_IRQ << 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_FIQ << 29U) + | (uint32)((uint32)SYS_IRQ << 29U) | (uint32)((uint32)SYS_IRQ << 30U) | (uint32)((uint32)SYS_IRQ << 31U);