查看: 6290|回复: 1

[S32] S32K144 Bootloader跳转前的配置问题

[复制链接]

该用户从未签到

3

主题

9

帖子

0

注册会员

Rank: 2

积分
59
最后登录
2019-9-4
发表于 2017-12-4 10:52:18 | 显示全部楼层 |阅读模式
我在制作利用CAN进行bootloader操作后程序跳转到主程序时主程序除CAN接口外其他模块都可以使用,看了官方给的文件发现在bootloader跳转前需要对CAN进行DeInit并关闭中断。请问各位大神,DeInit是否就是对CAN模块配置成复位后的配置?另外是否有这个函数的原型代码,谢谢了。

最佳答案

楼主你好! 关于deinit, 我在S32DS安装目录下的驱动中找到了相关代码供你参考: C:\nxp\S32DS_ARM_v2.0\S32DS\S32SDK_S32K14x_EAR_0.8.4\platform\drivers\src\flexcan /*FUNCTION******************************** ...
1.PNG
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
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;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 20:03 , Processed in 0.092355 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表