在线时间2221 小时
UID3253523
注册时间2016-3-21
NXP金币2869
该用户从未签到
超级版主
 
- 积分
- 24879
- 最后登录
- 2025-7-20
|
发表于 2017-12-5 10:28:47
|
显示全部楼层
楼主你好!
关于deinit, 我在S32DS安装目录下的驱动中找到了相关代码供你参考:
C:\nxp\S32DS_ARM_v2.0\S32DS\S32SDK_S32K14x_EAR_0.8.4\platform\drivers\src\flexcan
/*FUNCTION**********************************************************************
*
* Function Name : FLEXCAN_DRV_Deinit
* Description : Shutdown a FlexCAN module.
* This function will disable all FlexCAN interrupts, and disable the FlexCAN.
*
* Implements : FLEXCAN_DRV_Deinit_Activity
*END**************************************************************************/
status_t FLEXCAN_DRV_Deinit(uint8_t instance)
{
DEV_ASSERT(instance < CAN_INSTANCE_COUNT);
const flexcan_state_t * state = g_flexcanStatePtr[instance];
status_t result = STATUS_SUCCESS;
status_t osifStat;
uint32_t i;
/* Disable FlexCAN interrupts.*/
#if FEATURE_CAN_HAS_WAKE_UP_IRQ
if (g_flexcanWakeUpIrqId[instance] != NotAvail_IRQn)
{
INT_SYS_DisableIRQ(g_flexcanWakeUpIrqId[instance]);
}
#endif
INT_SYS_DisableIRQ(g_flexcanErrorIrqId[instance]);
INT_SYS_DisableIRQ(g_flexcanBusOffIrqId[instance]);
for (i = 0; i < FEATURE_CAN_MB_IRQS_MAX_COUNT; i++)
{
if (g_flexcanOredMessageBufferIrqId[i][instance] != NotAvail_IRQn)
{
INT_SYS_DisableIRQ(g_flexcanOredMessageBufferIrqId[i][instance]);
}
}
/* Disable FlexCAN.*/
FLEXCAN_Disable(g_flexcanBase[instance]);
for (i = 0; i < FEATURE_CAN_MAX_MB_NUM; i++)
{
osifStat = OSIF_SemaDestroy(&state->mbs[i].mbSema);
if (osifStat != STATUS_SUCCESS)
{
result = STATUS_ERROR;
}
}
return result;
} |
|