void can_irq_set(can_t *obj, CanIrqType irq, uint32_t enable) { CAN_T *can_base = (CAN_T *) NU_MODBASE(obj->can); CAN_EnterInitMode(can_base, ((enable != 0 )? CAN_CON_IE_Msk :0) ); switch (irq) { case IRQ_ERROR: case IRQ_BUS: case IRQ_PASSIVE: can_base->CON = can_base->CON |CAN_CON_EIE_Msk; can_base->CON = can_base->CON |CAN_CON_SIE_Msk; break; case IRQ_RX: case IRQ_TX: case IRQ_OVERRUN: case IRQ_WAKEUP: can_base->CON = can_base->CON |CAN_CON_SIE_Msk; break; default: break; } CAN_LeaveInitMode(can_base); NVIC_SetVector(CAN0_IRQn, (uint32_t)&CAN0_IRQHandler); NVIC_EnableIRQ(CAN0_IRQn); }
/******************************************************************************* * Function Name : CAN_Init * Description : Initializes the CAN peripheral according to the specified * parameters in the CAN_InitStruct. * Input : CAN_InitStruct: pointer to a CAN_InitTypeDef structure that * contains the configuration information for the CAN peripheral. * Output : None * Return : None *******************************************************************************/ void CAN_Init(CAN_InitTypeDef* CAN_InitStruct) { CAN_EnterInitMode(CAN_CR_CCE | CAN_InitStruct->CAN_ConfigParameters); CAN_SetBitrate(CAN_InitStruct->CAN_Bitrate); CAN_LeaveInitMode(); CAN_LeaveTestMode(); }
void USB2CAN_set_speed(u8 speed,CAN_TIMINGS *CanTimings) { CAN_InitTypeDef CAN_Struct; switch(speed) { case CAN_BAUD_10: CAN_Struct.CAN_Bitrate=CAN_BITRATE_10K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_20: CAN_Struct.CAN_Bitrate=CAN_BITRATE_20K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_50: CAN_Struct.CAN_Bitrate=CAN_BITRATE_50K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_100: CAN_Struct.CAN_Bitrate=CAN_BITRATE_100K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_125: CAN_Struct.CAN_Bitrate=CAN_BITRATE_125K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_250: CAN_Struct.CAN_Bitrate=CAN_BITRATE_250K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_500: CAN_Struct.CAN_Bitrate=CAN_BITRATE_500K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_800: CAN_Struct.CAN_Bitrate=CAN_BITRATE_800K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_1000: CAN_Struct.CAN_Bitrate=CAN_BITRATE_1M; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; case CAN_BAUD_MANUAL: CAN_EnterInitMode(CAN_CR_CCE | CAN_CR_IE); CAN_SetTiming(CanTimings->tseg1,CanTimings->tseg2,CanTimings->sjw,CanTimings->brp); CAN_LeaveInitMode(); break; default: // 125K CAN_Struct.CAN_Bitrate=CAN_BITRATE_125K; CAN_Struct.CAN_ConfigParameters = CAN_CR_IE ; CAN_Init( &CAN_Struct ); break; } }