示例#1
0
文件: can_api.c 项目: toyowata/mbed
/** init the CAN frequency.
 *
 *  @param rd receive pin.
 *  @param td transmit pin.
 *  @param hz The bus frequency in hertz.
 */
void can_init_freq(can_t *obj, PinName rd, PinName td, int hz)
{
    CANName can_rd = (CANName)pinmap_peripheral(rd, PinMap_CAN_RD);
    CANName can_td = (CANName)pinmap_peripheral(td, PinMap_CAN_TD);
    obj->can = (CANName)pinmap_merge(can_rd, can_td);

    MBED_ASSERT((int)obj->can != NC);

    if (obj->can == CAN_0) {
        rcu_periph_clock_enable(RCU_CAN0);
        can_deinit(obj->can);
        obj->index = 0;
    } else if (obj->can == CAN_1) {
        rcu_periph_clock_enable(RCU_CAN0);
        rcu_periph_clock_enable(RCU_CAN1);
        can_deinit(obj->can);
        obj->index = 1;
    } else {
        return;
    }

    /* Configure the CAN pins */
    pinmap_pinout(rd, PinMap_CAN_RD);
    pinmap_pinout(td, PinMap_CAN_TD);
    if (rd != NC) {
        pin_mode(rd, PullUp);
    }
    if (td != NC) {
        pin_mode(td, PullUp);
    }

    dev_can_mode_config(obj->can, CAN_NORMAL_MODE);

    can_frequency(obj, hz);

    if (obj->can == CAN_0) {
        can_filter(obj, 0, 0, CANStandard, 0);
    } else {
        can_filter(obj, 0, 0, CANStandard, 14);
    }
}
示例#2
0
文件: can_api.c 项目: toyowata/mbed
/** disable CAN.
 *
 */
void can_free(can_t *obj)
{
    can_deinit(obj->can);

    if (obj->can == CAN0) {
        rcu_periph_clock_disable(RCU_CAN0);
    }

    if (obj->can == CAN1) {
        rcu_periph_clock_disable(RCU_CAN1);
    }
}
示例#3
0
文件: main.c 项目: Arcko/trochili
/*!
    \brief      initialize CAN and filter
    \param[in]  can_parameter
      \arg        can_parameter_struct
    \param[in]  can_filter
      \arg        can_filter_parameter_struct
    \param[out] none
    \retval     none
*/
void can_networking_init(can_parameter_struct can_parameter, can_filter_parameter_struct can_filter)
{
    /* initialize CAN register */
    can_deinit(CANX);
    
    /* initialize CAN */
    can_parameter.can_ttc=DISABLE;
    can_parameter.can_abor=DISABLE;
    can_parameter.can_awu=DISABLE;
    can_parameter.can_ard=DISABLE;
    can_parameter.can_rfod=DISABLE;
    can_parameter.can_tfo=DISABLE;
    can_parameter.can_mode=CAN_NORMAL_MODE;
    can_parameter.can_sjw=CAN_BT_SJW_1TQ;
    can_parameter.can_bs1=CAN_BT_BS1_3TQ;
    can_parameter.can_bs2=CAN_BT_BS2_2TQ;
    /* baudrate 1Mbps */
    can_parameter.can_psc=12;
    can_init(CANX, &can_parameter);

    /* initialize filter */
#ifdef  CAN0_USED
    /* CAN0 filter number */
    can_filter.can_filter_number=0;
#else
    /* CAN1 filter number */
    can_filter.can_filter_number=15;
#endif
    /* initialize filter */    
    can_filter.can_filter_mode = CAN_FILTERMODE_MASK;
    can_filter.can_filter_bits = CAN_FILTERBITS_32BIT;
    can_filter.can_filter_list_high = 0x0000;
    can_filter.can_filter_list_low = 0x0000;
    can_filter.can_filter_mask_high = 0x0000;
    can_filter.can_filter_mask_low = 0x0000;  
    can_filter.can_filter_fifo_number = CAN_FIFO0;
    can_filter.can_filter_enable=ENABLE;
    can_filter_init(&can_filter);
}
示例#4
0
文件: can_api.c 项目: toyowata/mbed
/** Reset CAN interface.
 *
 * To use after error overflow.
 */
void can_reset(can_t *obj)
{
    can_deinit(obj->can);
}