diff --git a/include/libopencm3/stm32/can.h b/include/libopencm3/stm32/can.h index 5d09da677f..81128f0741 100644 --- a/include/libopencm3/stm32/can.h +++ b/include/libopencm3/stm32/can.h @@ -649,18 +649,18 @@ int can_init(uint32_t canport, bool ttcm, bool abom, bool awum, bool nart, bool rflm, bool txfp, uint32_t sjw, uint32_t ts1, uint32_t ts2, uint32_t brp, bool loopback, bool silent); -void can_filter_init(uint32_t canport, uint32_t nr, bool scale_32bit, +void can_filter_init(uint32_t nr, bool scale_32bit, bool id_list_mode, uint32_t fr1, uint32_t fr2, uint32_t fifo, bool enable); -void can_filter_id_mask_16bit_init(uint32_t canport, uint32_t nr, uint16_t id1, +void can_filter_id_mask_16bit_init(uint32_t nr, uint16_t id1, uint16_t mask1, uint16_t id2, uint16_t mask2, uint32_t fifo, bool enable); -void can_filter_id_mask_32bit_init(uint32_t canport, uint32_t nr, uint32_t id, +void can_filter_id_mask_32bit_init(uint32_t nr, uint32_t id, uint32_t mask, uint32_t fifo, bool enable); -void can_filter_id_list_16bit_init(uint32_t canport, uint32_t nr, uint16_t id1, +void can_filter_id_list_16bit_init(uint32_t nr, uint16_t id1, uint16_t id2, uint16_t id3, uint16_t id4, uint32_t fifo, bool enable); -void can_filter_id_list_32bit_init(uint32_t canport, uint32_t nr, uint32_t id1, +void can_filter_id_list_32bit_init(uint32_t nr, uint32_t id1, uint32_t id2, uint32_t fifo, bool enable); void can_enable_irq(uint32_t canport, uint32_t irq); diff --git a/lib/stm32/can.c b/lib/stm32/can.c index a7ca00fd39..c9f16a1183 100644 --- a/lib/stm32/can.c +++ b/lib/stm32/can.c @@ -201,7 +201,6 @@ int can_init(uint32_t canport, bool ttcm, bool abom, bool awum, bool nart, Initialize incoming message filter and assign to FIFO. -@param[in] canport Unsigned int32. CAN block register base @ref can_reg_base. @param[in] nr Unsigned int32. ID number of the filter. @param[in] scale_32bit bool. 32-bit scale for the filter? @param[in] id_list_mode bool. ID list filter mode? @@ -210,59 +209,58 @@ Initialize incoming message filter and assign to FIFO. @param[in] fifo Unsigned int32. FIFO id. @param[in] enable bool. Enable filter? */ -void can_filter_init(uint32_t canport, uint32_t nr, bool scale_32bit, +void can_filter_init(uint32_t nr, bool scale_32bit, bool id_list_mode, uint32_t fr1, uint32_t fr2, uint32_t fifo, bool enable) { uint32_t filter_select_bit = 0x00000001 << nr; /* Request initialization "enter". */ - CAN_FMR(canport) |= CAN_FMR_FINIT; + CAN_FMR(CAN1) |= CAN_FMR_FINIT; /* Deactivate the filter. */ - CAN_FA1R(canport) &= ~filter_select_bit; + CAN_FA1R(CAN1) &= ~filter_select_bit; if (scale_32bit) { /* Set 32-bit scale for the filter. */ - CAN_FS1R(canport) |= filter_select_bit; + CAN_FS1R(CAN1) |= filter_select_bit; } else { /* Set 16-bit scale for the filter. */ - CAN_FS1R(canport) &= ~filter_select_bit; + CAN_FS1R(CAN1) &= ~filter_select_bit; } if (id_list_mode) { /* Set filter mode to ID list mode. */ - CAN_FM1R(canport) |= filter_select_bit; + CAN_FM1R(CAN1) |= filter_select_bit; } else { /* Set filter mode to id/mask mode. */ - CAN_FM1R(canport) &= ~filter_select_bit; + CAN_FM1R(CAN1) &= ~filter_select_bit; } /* Set the first filter register. */ - CAN_FiR1(canport, nr) = fr1; + CAN_FiR1(CAN1, nr) = fr1; /* Set the second filter register. */ - CAN_FiR2(canport, nr) = fr2; + CAN_FiR2(CAN1, nr) = fr2; /* Select FIFO0 or FIFO1 as filter assignement. */ if (fifo) { - CAN_FFA1R(canport) |= filter_select_bit; /* FIFO1 */ + CAN_FFA1R(CAN1) |= filter_select_bit; /* FIFO1 */ } else { - CAN_FFA1R(canport) &= ~filter_select_bit; /* FIFO0 */ + CAN_FFA1R(CAN1) &= ~filter_select_bit; /* FIFO0 */ } if (enable) { - CAN_FA1R(canport) |= filter_select_bit; /* Activate filter. */ + CAN_FA1R(CAN1) |= filter_select_bit; /* Activate filter. */ } /* Request initialization "leave". */ - CAN_FMR(canport) &= ~CAN_FMR_FINIT; + CAN_FMR(CAN1) &= ~CAN_FMR_FINIT; } /*---------------------------------------------------------------------------*/ /** @brief CAN Initialize a 16bit Message ID Mask Filter -@param[in] canport Unsigned int32. CAN block register base @ref can_reg_base. @param[in] nr Unsigned int32. ID number of the filter. @param[in] id1 Unsigned int16. First message ID to filter. @param[in] mask1 Unsigned int16. First message ID bit mask. @@ -271,11 +269,11 @@ void can_filter_init(uint32_t canport, uint32_t nr, bool scale_32bit, @param[in] fifo Unsigned int32. FIFO id. @param[in] enable bool. Enable filter? */ -void can_filter_id_mask_16bit_init(uint32_t canport, uint32_t nr, uint16_t id1, +void can_filter_id_mask_16bit_init(uint32_t nr, uint16_t id1, uint16_t mask1, uint16_t id2, uint16_t mask2, uint32_t fifo, bool enable) { - can_filter_init(canport, nr, false, false, + can_filter_init(nr, false, false, ((uint32_t)id1 << 16) | (uint32_t)mask1, ((uint32_t)id2 << 16) | (uint32_t)mask2, fifo, enable); } @@ -283,23 +281,21 @@ void can_filter_id_mask_16bit_init(uint32_t canport, uint32_t nr, uint16_t id1, /*---------------------------------------------------------------------------*/ /** @brief CAN Initialize a 32bit Message ID Mask Filter -@param[in] canport Unsigned int32. CAN block register base @ref can_reg_base. @param[in] nr Unsigned int32. ID number of the filter. @param[in] id Unsigned int32. Message ID to filter. @param[in] mask Unsigned int32. Message ID bit mask. @param[in] fifo Unsigned int32. FIFO id. @param[in] enable bool. Enable filter? */ -void can_filter_id_mask_32bit_init(uint32_t canport, uint32_t nr, uint32_t id, +void can_filter_id_mask_32bit_init(uint32_t nr, uint32_t id, uint32_t mask, uint32_t fifo, bool enable) { - can_filter_init(canport, nr, true, false, id, mask, fifo, enable); + can_filter_init(nr, true, false, id, mask, fifo, enable); } /*---------------------------------------------------------------------------*/ /** @brief CAN Initialize a 16bit Message ID List Filter -@param[in] canport Unsigned int32. CAN block register base @ref can_reg_base. @param[in] nr Unsigned int32. ID number of the filter. @param[in] id1 Unsigned int16. First message ID to match. @param[in] id2 Unsigned int16. Second message ID to match. @@ -308,12 +304,12 @@ void can_filter_id_mask_32bit_init(uint32_t canport, uint32_t nr, uint32_t id, @param[in] fifo Unsigned int32. FIFO id. @param[in] enable bool. Enable filter? */ -void can_filter_id_list_16bit_init(uint32_t canport, uint32_t nr, +void can_filter_id_list_16bit_init(uint32_t nr, uint16_t id1, uint16_t id2, uint16_t id3, uint16_t id4, uint32_t fifo, bool enable) { - can_filter_init(canport, nr, false, true, + can_filter_init(nr, false, true, ((uint32_t)id1 << 16) | (uint32_t)id2, ((uint32_t)id3 << 16) | (uint32_t)id4, fifo, enable); } @@ -321,18 +317,17 @@ void can_filter_id_list_16bit_init(uint32_t canport, uint32_t nr, /*---------------------------------------------------------------------------*/ /** @brief CAN Initialize a 32bit Message ID List Filter -@param[in] canport Unsigned int32. CAN block register base @ref can_reg_base. @param[in] nr Unsigned int32. ID number of the filter. @param[in] id1 Unsigned int32. First message ID to match. @param[in] id2 Unsigned int32. Second message ID to match. @param[in] fifo Unsigned int32. FIFO id. @param[in] enable bool. Enable filter? */ -void can_filter_id_list_32bit_init(uint32_t canport, uint32_t nr, +void can_filter_id_list_32bit_init(uint32_t nr, uint32_t id1, uint32_t id2, uint32_t fifo, bool enable) { - can_filter_init(canport, nr, true, true, id1, id2, fifo, enable); + can_filter_init(nr, true, true, id1, id2, fifo, enable); } /*---------------------------------------------------------------------------*/