打印
[通用 MCU]

TC3xx-SMU_EMS分析

[复制链接]
96|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-5-17 14:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
TE, xx, tc, SMU
1.基本概念
        SMU--Safety Management Unit;主要是硬件(少量软件)的功能安全机制触发警报后,对这些警报进行统一处理;



        在阅读datasheet时,发现SMU有一个port emergency stop功能可以强制将pad拉成General Purpose Input Mode;同时还会把这个请求发给SCU;这就很有趣了,这种功能的应用场景在哪?在这之前,我们来分析下如何触发这种EMS。



2.配置
        首先我们查看AGC寄存器PES位域;



       SMU alarm behavior触发后,硬件是可以触发PES;这就是说我们在配置Alarm 行为时同时也要考虑PES配置。ps:alarm behavior如下:



         其次,由于SMU与安全紧密相关,对于SMU寄存器的配置除了常见的endinit保护,也需要有其他的机制进行处理;因此SMU_KEYS寄存器的锁存机制也必须考虑




         最后,当我们想用中断的方式来进行处理时,SMU的中断配置也必须考虑,中断向量表的设置也势在必行。那么接下来,我们来看看代码如何处理。

3.参考代码
          首先,我们选用IGCS0来触发PES,那么需要配置的寄存器有,AGC.PES\IGCS0,AGCF[group][0-2]

3.1 配置密钥到SMU_KEY



        配置SMU寄存器时,需要对CFGLCK写入0xBC,这时候SMU_core寄存器配置才会生效;

    /* Check if SMU cfg registers is not locked */
    if (MODULE_SMU.KEYS.B.PERLCK != 0xFFU)
    {
        passwd = IfxScuWdt_getSafetyWatchdogPassword();
        /* disable the write-protection for registers */
        IfxScuWdt_clearSafetyEndinit(passwd);

        /*Write Config key to configure the SMU registers. */
        MODULE_SMU.KEYS.U = (uint32)0x000000bc;

        /* Restore back the write-protection for registers */
        IfxScuWdt_setSafetyEndinit(passwd);
    }
    else
    {
        /* If SMU config is permanently locked then return false */
        status = 0U;
    }

        当配置SMU寄存器完成后,需要给PERLCK写入0xFF,完成锁存;保证在当前上电周期SMU alarm的配置不被修改

/* Write the key reg to lock config registers */
        MODULE_SMU.KEYS.B.PERLCK = 0xFFU;
3.2 配置alarm行为
        我们选择软件功能安全机制group10的第0、1个机制;因此首先我们需要配置AGC。





/* Set the IGCS0 field of AGC register to 1 to trigger SMU Interrupt Request 0 */
    MODULE_SMU.AGC.B.IGCS0 = 1;
    /* Enable the SMU Port Emergency Stop and SMU_IGCS0 activates the PES */
    MODULE_SMU.AGC.B.PES = 1;
    /* configurate software alarm 0 action igcs0*/
    AG10CF0 = 0x0000 0000;
    AG10CF1 = 0x0000 0001;
    AG10CF2 = 0x0000 0000;
3.3 配置SMU中断
SRC_SMU0.B.SPRN = priority;
SRC_SMU0.B.TOS= Tos_cpu0;
SRC_SMU0.B.CLRR= 1;


/*configurte Interupt for SMU*/
IFX_INTERRUPT(ISR_SMU, 0, ISR_PRIORITY_SMU_INT0);
3.4 软件触发alarm
IfxSmu_setAlarmStatus(IfxSmu_Alarm_Software_Alarm0);
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/djkeyzx/article/details/129861487

使用特权

评论回复
沙发
huquanz711| | 2024-5-19 22:26 | 只看该作者
现在怎么这么多从CSDN搬贴的了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1433

主题

14211

帖子

8

粉丝