Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CANRX fixup #106

Merged
merged 6 commits into from
Dec 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions components/bms_boss/FeatureDefs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ config:
prefix: feature
description: Feature definitions for the BMS Boss
defs:
canrx_swi:
cantx_swi:
2 changes: 2 additions & 0 deletions components/bms_boss/FeatureSels.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
featureDefs: "#/components/bms_boss/FeatureDefs.yaml"
features:
feature_cantx_swi:
feature_canrx_swi:
77 changes: 44 additions & 33 deletions components/bms_boss/HW/HW_can.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,14 @@ void HW_CAN_init(void)
HAL_CAN_ActivateNotification(&hcan, CAN_ENABLED_INTERRUPTS);
}

void HW_CAN_activateFifoNotifications(CAN_bus_E bus, CAN_RxFifo_E rxFifo)
{
UNUSED(bus);
uint32_t it = rxFifo == CAN_RX_FIFO_0 ? CAN_IER_FMPIE0 : CAN_IER_FMPIE1;
uint32_t itFull = rxFifo == CAN_RX_FIFO_0 ? CAN_IER_FFIE0 : CAN_IER_FFIE1;
HAL_CAN_ActivateNotification(&hcan, it);
HAL_CAN_ActivateNotification(&hcan, itFull);
}

/**
* CAN_checkMbFree
Expand All @@ -144,7 +152,7 @@ static bool CAN_checkMbFree(CAN_HandleTypeDef* canHandle, CAN_TxMailbox_E mailbo
* @param msg message data
* @return exit code
*/
static HAL_StatusTypeDef CAN_sendMsg(CAN_HandleTypeDef* canHandle, CAN_TxMessage_T msg)
static HAL_StatusTypeDef CAN_sendMsgOnPeripheral(CAN_HandleTypeDef* canHandle, CAN_TxMessage_T msg)
{
HAL_CAN_StateTypeDef state = canHandle->State;

Expand Down Expand Up @@ -206,16 +214,17 @@ static HAL_StatusTypeDef CAN_sendMsg(CAN_HandleTypeDef* canHandle, CAN_TxMessage
* @param len TODO
* @return TODO
*/
bool CAN_sendMsgBus0(CAN_TX_Priorities_E priority, CAN_data_T data, uint16_t id, uint8_t len)
bool CAN_sendMsg(CAN_bus_E bus, CAN_TxMailbox_E mailbox, CAN_data_T data, uint16_t id, uint8_t len)
{
UNUSED(bus);
CAN_TxMessage_T msg = {0};

msg.id = id;
msg.data = data;
msg.mailbox = (CAN_TxMailbox_E)priority;
msg.mailbox = mailbox;
msg.lengthBytes = len;

return CAN_sendMsg(&hcan, msg) == HAL_OK;
return CAN_sendMsgOnPeripheral(&hcan, msg) == HAL_OK;
}


Expand All @@ -227,8 +236,9 @@ bool CAN_sendMsgBus0(CAN_TX_Priorities_E priority, CAN_data_T data, uint16_t id,
* @param rx pointer to a CAN_RxMessage_T where the message will be stored
* @retval HAL status
*/
bool CAN_getRxMessageBus0(CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx)
bool CAN_getRxMessage(CAN_bus_E bus, CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx)
{
UNUSED(bus);
if ((hcan.State != HAL_CAN_STATE_READY) && (hcan.State != HAL_CAN_STATE_LISTENING))
{
// Update error code
Expand Down Expand Up @@ -271,14 +281,15 @@ bool CAN_getRxMessageBus0(CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx)
rx->IDE = (CAN_IdentifierLen_E)(CAN_RI0R_IDE & hcan.Instance->sFIFOMailBox[rxFifo].RIR);
rx->RTR = (CAN_RemoteTransmission_E)(CAN_RI0R_RTR & hcan.Instance->sFIFOMailBox[rxFifo].RIR);

rx->id = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan.Instance->sFIFOMailBox[rxFifo].RIR) >> CAN_RI0R_EXID_Pos;
rx->id = (uint16_t)(((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan.Instance->sFIFOMailBox[rxFifo].RIR) >> (rx->IDE == CAN_IDENTIFIER_STD ? CAN_RI0R_STID_Pos : CAN_RI0R_EXID_Pos));
rx->lengthBytes = (CAN_RDT0R_DLC & hcan.Instance->sFIFOMailBox[rxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;

rx->timestamp = (CAN_RDT0R_TIME & hcan.Instance->sFIFOMailBox[rxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
rx->filterMatchIndex = (CAN_RDT0R_FMI & hcan.Instance->sFIFOMailBox[rxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;

// Get the data
rx->data.u64 = hcan.Instance->sFIFOMailBox[rxFifo].RDLR;
rx->data.u32[0U] = hcan.Instance->sFIFOMailBox[rxFifo].RDLR;
rx->data.u32[1U] = hcan.Instance->sFIFOMailBox[rxFifo].RDHR;
// aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan.Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos);
// aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan.Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos);
// aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan.Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos);
Expand Down Expand Up @@ -318,8 +329,9 @@ bool CAN_getRxMessageBus0(CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx)
* This parameter can be a value of @arg CAN_receive_FIFO_number.
* @retval Number of messages available in Rx FIFO.
*/
uint8_t CAN_getRxFifoFillLevelBus0(CAN_RxFifo_E rxFifo)
uint8_t CAN_getRxFifoFillLevel(CAN_bus_E bus, CAN_RxFifo_E rxFifo)
{
UNUSED(bus);
if ((hcan.State != HAL_CAN_STATE_READY) && (hcan.State != HAL_CAN_STATE_LISTENING))
{
// CAN peripheral is not ready
Expand Down Expand Up @@ -353,8 +365,9 @@ uint8_t CAN_getRxFifoFillLevelBus0(CAN_RxFifo_E rxFifo)
* This parameter can be a value of @arg CAN_receive_FIFO_number.
* @retval Number of messages available in Rx FIFO.
*/
bool CAN_getRxFifoEmptyBus0(CAN_RxFifo_E rxFifo)
bool CAN_getRxFifoEmpty(CAN_bus_E bus, CAN_RxFifo_E rxFifo)
{
UNUSED(bus);
if ((hcan.State != HAL_CAN_STATE_READY) && (hcan.State != HAL_CAN_STATE_LISTENING))
{
// CAN peripheral is not ready
Expand Down Expand Up @@ -392,26 +405,8 @@ bool CAN_getRxFifoEmptyBus0(CAN_RxFifo_E rxFifo)
static void CAN_TxComplete_ISR(CAN_HandleTypeDef* canHandle, CAN_TxMailbox_E mailbox)
{
UNUSED(canHandle);
switch ((CAN_TX_Priorities_E)mailbox)
{
case CAN_TX_PRIO_1HZ:
// not yet implemented
// SWI_invokeFromISR(CANTX_BUS_A_1ms_swi);
break;

case CAN_TX_PRIO_100HZ:
// SWI_invokeFromISR(CANTX_BUS_A_10ms_swi);
break;

case CAN_TX_PRIO_10HZ:
// not yet implemented
// SWI_invokeFromISR(CANTX_BUS_A_100ms_swi);
break;

default:
// should never reach here
break;
}
UNUSED(mailbox);
HAL_CAN_DeactivateNotification(canHandle, CAN_IER_TMEIE);
}


Expand All @@ -423,11 +418,14 @@ static void CAN_TxComplete_ISR(CAN_HandleTypeDef* canHandle, CAN_TxMailbox_E mai
*/
static void CAN_RxMsgPending_ISR(CAN_HandleTypeDef* canHandle, CAN_RxFifo_E fifoId)
{
#if FEATURE_IS_DISABLED(FEATURE_CANRX_SWI)
CAN_data_T data = {0U};
CAN_RxHeaderTypeDef header = {0U};
#endif // FEATURE_CANRX_SWI == FEATURE_DISABLED

if (canHandle == &hcan)
{
#if FEATURE_CANRX_SWI == FEATURE_DISABLED
HAL_CAN_GetRxMessage(canHandle, fifoId, &header, (uint8_t*)&data);
CANRX_VEH_unpackMessage(header.StdId, &data);

Expand All @@ -441,6 +439,9 @@ static void CAN_RxMsgPending_ISR(CAN_HandleTypeDef* canHandle, CAN_RxFifo_E fifo
udsSrv_processMessage(data.u8, (uint8_t)header.DLC);
}
#endif // FEATURE_UDS
#else // FEATURE_CANRX_SWI == FEATURE_DISABLED
CANRX_notify(CAN_BUS_VEH, fifoId);
#endif // FEATURE_CANRX_SWI
}
}

Expand Down Expand Up @@ -524,6 +525,9 @@ void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef* canHandle)
*/
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* canHandle)
{
#if FEATURE_IS_ENABLED(FEATURE_CANRX_SWI)
HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FMPIE0);
#endif // FEATURE_CANRX_SWI
CAN_RxMsgPending_ISR(canHandle, CAN_RX_FIFO_0);
}

Expand All @@ -534,6 +538,9 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* canHandle)
*/
void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef* canHandle)
{
#if FEATURE_IS_ENABLED(FEATURE_CANRX_SWI)
HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FMPIE1);
#endif // FEATURE_CANRX_SWI
CAN_RxMsgPending_ISR(canHandle, CAN_RX_FIFO_1);
}

Expand All @@ -544,9 +551,11 @@ void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef* canHandle)
*/
void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef* canHandle)
{
UNUSED(canHandle);
/* HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FFIE1); */
CAN_RxMsgPending_ISR(canHandle, CAN_RX_FIFO_0);
#if FEATURE_IS_ENABLED(FEATURE_CANRX_SWI)
HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FFIE0);
SWI_invokeFromISR(CANRX_swi);
#endif // FEATURE_CANRX_SWI
}


Expand All @@ -556,9 +565,11 @@ void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef* canHandle)
*/
void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef* canHandle)
{
UNUSED(canHandle);
/* HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FFIE1); */
CAN_RxMsgPending_ISR(canHandle, CAN_RX_FIFO_1);
#if FEATURE_IS_ENABLED(FEATURE_CANRX_SWI)
HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FFIE1);
SWI_invokeFromISR(CANRX_swi);
#endif // FEATURE_CANRX_SWI
}

/**
Expand Down
15 changes: 15 additions & 0 deletions components/bms_boss/HW/HW_tim.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,21 @@ uint64_t HW_TIM_getBaseTick()
return ((uint64_t)HW_getTick() * 1000) + htim2.Instance->CNT;
}

/**
* @brief Get the number of ticks since clock start
*
* @retval Number of ticks
*/
uint32_t HW_TIM_getTick(void)
{
return HAL_GetTick();
}

uint32_t HW_TIM_getTimeMS()
{
return HW_TIM_getTick();
}

/**
* HAL_InitTick
* This function configures the TIM4 as a time base source.
Expand Down
9 changes: 5 additions & 4 deletions components/bms_boss/HW/include/HW_can.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@

void HW_CAN_start(void);
void HW_CAN_init(void);
bool CAN_sendMsgBus0(CAN_TX_Priorities_E priority, CAN_data_T data, uint16_t id, uint8_t len);
bool CAN_getRxMessageBus0(CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx);
uint8_t CAN_getRxFifoFillLevelBus0(CAN_RxFifo_E rxFifo);
bool CAN_getRxFifoEmptyBus0(CAN_RxFifo_E rxFifo);
void HW_CAN_activateFifoNotifications(CAN_bus_E bus, CAN_RxFifo_E rxFifo);
bool CAN_sendMsg(CAN_bus_E bus, CAN_TxMailbox_E mailbox, CAN_data_T data, uint16_t id, uint8_t len);
bool CAN_getRxMessage(CAN_bus_E bus, CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx);
uint8_t CAN_getRxFifoFillLevel(CAN_bus_E bus, CAN_RxFifo_E rxFifo);
bool CAN_getRxFifoEmpty(CAN_bus_E bus, CAN_RxFifo_E rxFifo);
2 changes: 2 additions & 0 deletions components/bms_boss/HW/include/HW_tim.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

HAL_StatusTypeDef HW_TIM_init(void);
void HW_TIM_configureRunTimeStatsTimer(void);
uint32_t HW_TIM_getTick(void);
uint32_t HW_TIM_getTimeMS(void);
void HW_TIM_incBaseTick(void);
uint64_t HW_TIM_getBaseTick(void);

Expand Down
7 changes: 4 additions & 3 deletions components/bms_boss/RTOS/FreeRTOSResources.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ extern void Module_1Hz_TSK(void);
extern void Module_ApplicationIdleHook(void);

// SWIs
RTOS_swiHandle_T* CANRX_BUS_A_swi;
RTOS_swiHandle_T* CANTX_BUS_A_swi;
RTOS_swiHandle_T* CANRX_swi;
RTOS_swiHandle_T* CANTX_swi;

// task definitions
RTOS_taskDesc_t ModuleTasks[] = {
Expand Down Expand Up @@ -238,7 +238,8 @@ void RTOS_createResources(void)
/*
* create SWI handles
*/
CANTX_BUS_A_swi = SWI_create(RTOS_SWI_PRI_0, &CANTX_BUS_A_SWI);
CANTX_swi = SWI_create(RTOS_SWI_PRI_0, &CANTX_SWI);
CANRX_swi = SWI_create(RTOS_SWI_PRI_0, &CANRX_SWI);

/*
* Create tasks
Expand Down
7 changes: 5 additions & 2 deletions components/bms_boss/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ UDS_DIR = LIBS_DIR.Dir("uds")
ISOTP_DIR = LIBS_DIR.Dir("isotp")
SHARED_CODE = Dir("#/components/shared/code")
SHARED_LIBS = SHARED_CODE.Dir("libs")
SHARED_APP = SHARED_CODE.Dir("app")

env = PLATFORM_ENV.Clone(
tools=[
Expand Down Expand Up @@ -128,6 +129,7 @@ LIBS_INCLUDE_DIRS = [
UDS_DIR.Dir("include"),
ISOTP_DIR.Dir("include"),
SHARED_LIBS,
SHARED_APP,
]

PROJECT_INCLUDE_DIRS = [
Expand All @@ -139,8 +141,9 @@ PROJECT_INCLUDE_DIRS = [
project_source_files = [
SRC_DIR.File("SystemManager.c"),
SRC_DIR.File("Module.c"),
SRC_DIR.File("CAN/CANIO-tx.c"),
SRC_DIR.File("CAN/CANIO-rx.c"),
SRC_DIR.File("CAN/CANIO_componentSpecific.c"),
SHARED_APP.File("CAN/CANIO-tx.c"),
SHARED_APP.File("CAN/CANIO-rx.c"),
SRC_DIR.File("IO.c"),
SRC_DIR.File("ENV.c"),
SRC_DIR.File("Sys.c"),
Expand Down
2 changes: 2 additions & 0 deletions components/bms_boss/include/BMS.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* @brief Header file for BMS manager
*/

#pragma once

#include "stdbool.h"
#include "stdint.h"

Expand Down
Loading