Skip to content

Commit

Permalink
Got rid of canport in filters
Browse files Browse the repository at this point in the history
  • Loading branch information
revzin committed Aug 1, 2017
1 parent b76d853 commit 6d2c446
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 31 deletions.
10 changes: 5 additions & 5 deletions include/libopencm3/stm32/can.h
Expand Up @@ -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);
Expand Down
47 changes: 21 additions & 26 deletions lib/stm32/can.c
Expand Up @@ -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?
Expand All @@ -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.
Expand All @@ -271,35 +269,33 @@ 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);
}

/*---------------------------------------------------------------------------*/
/** @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.
Expand All @@ -308,31 +304,30 @@ 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);
}

/*---------------------------------------------------------------------------*/
/** @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);
}

/*---------------------------------------------------------------------------*/
Expand Down

0 comments on commit 6d2c446

Please sign in to comment.