Funpack2-2 基于TC275实现多核心轮流休眠待机
基于TC275,实现多核心轮流休眠待机,控制板卡上的LED灯。
标签
嵌入式系统
TC275
休眠待机
安先生
更新2022-10-09
752

内容介绍

  • 开发板介绍
AURIX TM TC275 lite 套件配备了基于 32 位单芯片 AURIX TM TriCore TM的微控制器 Aurix TM TC275。它可以与一系列开发工具一起使用,包括 AURIX TM Development Studio、英飞凌免费的基于 Eclipse 的 IDE,或来自 Hightec/PLS/Infineon 的基于 Eclipse 的“FreeEntryToolchain”。
TC275 是英飞凌推出的较新一代AURIX 系列的单核/三核处理器,适合应用于车载控制器的开发
TC275有三个运算核、两个校验核,类似于将三个高性能单片机集成在一起,功能非常强大;
TC275推出较早、各种开发例子、资料文档、开发工具相对较为齐全;其他型号均是在TC275之后推出,如性价比更高的TC234、TC212、TC297等等
 
 
  • 环境配置
AURIX  Development Studio:
AURIX™ Development Studio是专为TriCore MCU系列设计的集成开发环境,在eclipse环境下支持使用C语言和英飞凌底层驱动库(iLLD)开发,对多核心进行在线调试。
  • 安装文件下载

https://www.infineon.com/cms/en/product/promopages/aurix-development-studio/ 

单击“Download Here”;

AURIX™ Development Studio 安装使用

在接下来的链接中填写一些基本信息(邮箱填真实信息)并同意相关条款,最后点击“Submit”;

AURIX™ Development Studio 安装使用

接下来的链接上显示,几分钟后,软件下载链接会发送到之前填写的邮箱;

AURIX™ Development Studio 安装使用

几分钟后,登陆邮箱查收邮件,点击“Download now”下载安装文件。

AURIX™ Development Studio 安装使用

安装教程不展开,参考
  • 任务描述
使用TC275的三个核心,轮流休眠待机,分别控制板卡上的LED灯,如core0检测按键按下,唤醒core1翻转LED1,一秒后,唤醒core2翻转LED2,系统休眠
  • 任务分析
任务分析:
core0检测按键按下,唤醒core1翻转LED1,一秒后,唤醒core2翻转LED2,系统休眠。
对应的CPU 三核心 分别实现不同的功能:
CPU0: 监测按键的动作,控制CPU状态,时间调度
CPU1: LED1翻转,待机
CPU2: LED2 翻转,待机
  • 核心代码
  • CPU模式切换:该部分主要参考英飞凌提供的示例。
typedef enum
{
    IfxCpu_CoreMode_halt,
    IfxCpu_CoreMode_run,
    IfxCpu_CoreMode_idle,
    IfxCpu_CoreMode_sleep,
    IfxCpu_CoreMode_stby,
    IfxCpu_CoreMode_unknown
} IfxCpu_CoreMode;
// 此部分是Sdk 实现 
boolean IfxCpu_setCoreMode(Ifx_CPU *cpu, IfxCpu_CoreMode mode)
{
    uint8              reqslp;
    boolean            retValue;
    IfxCpu_ResourceCpu index = IfxCpu_getIndex(cpu);

    /*Modes such as HALT, SLEEP and STBY are not handled at CPU level */
    retValue = ((mode == IfxCpu_CoreMode_halt) || (mode == IfxCpu_CoreMode_sleep)
                || (mode == IfxCpu_CoreMode_stby)) ? FALSE : TRUE;

    reqslp = (mode == IfxCpu_CoreMode_idle) ? IfxScu_PMCSR_REQSLP_Idle : IfxScu_PMCSR_REQSLP_Run;

    if (retValue == TRUE)
    {
        /*Check if the same core is requesting to change the core run mode */
        if (IfxCpu_getCoreIndex() != index)
        {                       /*Request is for the other core */
            /*To access PMCSR of other CPUs handle the safety EndInit protection */
            uint16 safetyWdtPw = IfxScuWdt_getSafetyWatchdogPassword();
            IfxScuWdt_clearSafetyEndinit(safetyWdtPw);
            MODULE_SCU.PMCSR[(uint32)IfxCpu_getIndex(cpu)].B.REQSLP = reqslp;
            IfxScuWdt_setSafetyEndinit(safetyWdtPw);

            cpu->DBGSR.B.HALT = 2; /*reset the HALT bit, if it is already done it is no harm in writing again */
        }
        else
        {                          /*Request is for self, this request normally only for halt, otherwise the core is already running anyway! */
            /*To access PMCSR of self handle the cpu EndInit protection */
            uint16 cpuWdtPw = IfxScuWdt_getCpuWatchdogPassword();
            IfxScuWdt_clearCpuEndinit(cpuWdtPw);
            MODULE_SCU.PMCSR[(uint32)index].B.REQSLP = reqslp;
            IfxScuWdt_setCpuEndinit(cpuWdtPw);
        }
    }

    return retValue;
}
对应上层的调用:
 IfxCpu_setCoreMode(&MODULE_CPU2, IfxCpu_CoreMode_idle); //待机 
IfxCpu_setCoreMode(&MODULE_CPU2, IfxCpu_CoreMode_run);  //运行
  • 按键监测: 按键在while(1)循环中,不断响应按键的请求。在得到按键的响应后,会执行响应的操作。
  if(IfxPort_getPinState(BUTTON) == 0){
     IfxCpu_setCoreMode(&MODULE_CPU1, IfxCpu_CoreMode_run);
     waitTime(IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, WAIT_TIME));
     IfxCpu_setCoreMode(&MODULE_CPU2, IfxCpu_CoreMode_run);
  }
  • LED翻转:此处是直接调用系统级别的翻转。也可以自我实现,PIN 高低切换即可。
void ledToggle(uint8 is_led1)
{
    if(is_led1){
    IfxPort_togglePin(LED1);
    }else{
    IfxPort_togglePin(LED2);
    }
    // waitTime(IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, 1000U));
}
  • 功能展示
1.开机时,LED1/LED2熄灭状态

FtVVOOJG8uNPvwViU4uHWG83ZaOx

2. 按键,先LED1亮

Fl0f8t_eneRJFRxIu7O1sBaslT6u

3. 然后LED2亮

Ft-qB8nkrmP9s0jCM9XGH1MydYPU

  • 心得体会
非常感谢本次活动 。
车机的开发板比较少,这次 接触 学习比较多。
sdk ide 比较全  配合看example 能学习比较多的知识。
本次任务参考TC275芯片手册,了解了三个CPU的工作模式,以及系统的工作模式的切换。
希望下次活动能更丰富,接触更多的不同的领域的不同知识。
 

附件下载

Blinky_LED_1_KIT_TC275_LK.zip

团队介绍

安迪,热爱嵌入式的攻城狮

评论

0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号