mirror of https://github.com/ARMmbed/mbed-os.git
Added working functionality to the can_filter api to accept IDs for filtering in both bxCAN and FDCAN
parent
064f94d0a6
commit
5049b518fb
|
@ -163,12 +163,23 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
|
||||||
obj->CanHandle.Init.DataSyncJumpWidth = 0x1; // Not used - only in FDCAN
|
obj->CanHandle.Init.DataSyncJumpWidth = 0x1; // Not used - only in FDCAN
|
||||||
obj->CanHandle.Init.DataTimeSeg1 = 0x1; // Not used - only in FDCAN
|
obj->CanHandle.Init.DataTimeSeg1 = 0x1; // Not used - only in FDCAN
|
||||||
obj->CanHandle.Init.DataTimeSeg2 = 0x1; // Not used - only in FDCAN
|
obj->CanHandle.Init.DataTimeSeg2 = 0x1; // Not used - only in FDCAN
|
||||||
#ifndef TARGET_STM32G4
|
#ifdef TARGET_STM32H7
|
||||||
|
/* Message RAM offset is only supported in STM32H7 platforms of supported FDCAN platforms */
|
||||||
obj->CanHandle.Init.MessageRAMOffset = 0;
|
obj->CanHandle.Init.MessageRAMOffset = 0;
|
||||||
|
|
||||||
|
/* The number of Standard and Extended ID filters are initialized to the maximum possile extent
|
||||||
|
* for STM32H7 platforms
|
||||||
|
*/
|
||||||
|
obj->CanHandle.Init.StdFiltersNbr = 128; // to be aligned with the handle parameter in can_filter
|
||||||
|
obj->CanHandle.Init.ExtFiltersNbr = 128; // to be aligned with the handle parameter in can_filter
|
||||||
|
#else
|
||||||
|
/* The number of Standard and Extended ID filters are initialized to the maximum possile extent
|
||||||
|
* for STM32G0x1, STM32G4 and STM32L5 platforms
|
||||||
|
*/
|
||||||
|
obj->CanHandle.Init.StdFiltersNbr = 28; // to be aligned with the handle parameter in can_filter
|
||||||
|
obj->CanHandle.Init.ExtFiltersNbr = 8; // to be aligned with the handle parameter in can_filter
|
||||||
#endif
|
#endif
|
||||||
obj->CanHandle.Init.StdFiltersNbr = 1; // to be aligned with the handle parameter in can_filter
|
#ifdef TARGET_STM32H7
|
||||||
obj->CanHandle.Init.ExtFiltersNbr = 1; // to be aligned with the handle parameter in can_filter
|
|
||||||
#ifndef TARGET_STM32G4
|
|
||||||
obj->CanHandle.Init.RxFifo0ElmtsNbr = 8;
|
obj->CanHandle.Init.RxFifo0ElmtsNbr = 8;
|
||||||
obj->CanHandle.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
|
obj->CanHandle.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
|
||||||
obj->CanHandle.Init.RxFifo1ElmtsNbr = 0;
|
obj->CanHandle.Init.RxFifo1ElmtsNbr = 0;
|
||||||
|
@ -180,7 +191,7 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
|
||||||
obj->CanHandle.Init.TxFifoQueueElmtsNbr = 3;
|
obj->CanHandle.Init.TxFifoQueueElmtsNbr = 3;
|
||||||
#endif
|
#endif
|
||||||
obj->CanHandle.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
|
obj->CanHandle.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
|
||||||
#ifndef TARGET_STM32G4
|
#ifdef TARGET_STM32H7
|
||||||
obj->CanHandle.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
|
obj->CanHandle.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
|
||||||
#endif
|
#endif
|
||||||
can_internal_init(obj);
|
can_internal_init(obj);
|
||||||
|
@ -331,20 +342,16 @@ int can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t
|
||||||
{
|
{
|
||||||
FDCAN_FilterTypeDef sFilterConfig = {0};
|
FDCAN_FilterTypeDef sFilterConfig = {0};
|
||||||
|
|
||||||
if(handle != 0) { // message filter handle is not supported for STM controllers
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (format == CANStandard) {
|
if (format == CANStandard) {
|
||||||
sFilterConfig.IdType = FDCAN_STANDARD_ID;
|
sFilterConfig.IdType = FDCAN_STANDARD_ID;
|
||||||
sFilterConfig.FilterIndex = 0;
|
sFilterConfig.FilterIndex = handle;
|
||||||
sFilterConfig.FilterType = FDCAN_FILTER_MASK;
|
sFilterConfig.FilterType = FDCAN_FILTER_MASK;
|
||||||
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
|
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
|
||||||
sFilterConfig.FilterID1 = id;
|
sFilterConfig.FilterID1 = id;
|
||||||
sFilterConfig.FilterID2 = mask;
|
sFilterConfig.FilterID2 = mask;
|
||||||
} else if (format == CANExtended) {
|
} else if (format == CANExtended) {
|
||||||
sFilterConfig.IdType = FDCAN_EXTENDED_ID;
|
sFilterConfig.IdType = FDCAN_EXTENDED_ID;
|
||||||
sFilterConfig.FilterIndex = 0;
|
sFilterConfig.FilterIndex = handle;
|
||||||
sFilterConfig.FilterType = FDCAN_FILTER_MASK;
|
sFilterConfig.FilterType = FDCAN_FILTER_MASK;
|
||||||
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
|
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
|
||||||
sFilterConfig.FilterID1 = id;
|
sFilterConfig.FilterID1 = id;
|
||||||
|
|
Loading…
Reference in New Issue