内容介绍
内容介绍
- 开发板介绍
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”;
在接下来的链接中填写一些基本信息(邮箱填真实信息)并同意相关条款,最后点击“Submit”;
接下来的链接上显示,几分钟后,软件下载链接会发送到之前填写的邮箱;
几分钟后,登陆邮箱查收邮件,点击“Download now”下载安装文件。
安装教程不展开,参考
- 任务描述
使用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熄灭状态
2. 按键,先LED1亮
3. 然后LED2亮
- 心得体会
非常感谢本次活动 。
车机的开发板比较少,这次 接触 学习比较多。
sdk ide 比较全 配合看example 能学习比较多的知识。
本次任务参考TC275芯片手册,了解了三个CPU的工作模式,以及系统的工作模式的切换。
希望下次活动能更丰富,接触更多的不同的领域的不同知识。
附件下载
Blinky_LED_1_KIT_TC275_LK.zip
团队介绍
安迪,热爱嵌入式的攻城狮
评论
0 / 100
查看更多
猜你喜欢
Funpack2-2用TC275实验三个核心轮流休眠待机使用TC275的三个核心,轮流休眠待机,分别控制板卡上的LED灯,如core0检测按键按下,唤醒core1翻转LED1,一秒后,唤醒core2翻转LED2,系统休眠
MMA
940
Funpack2-2:基于TC275的多核点灯使用英飞凌的TC275开发板,使三个核轮流唤醒休眠,来操作LED灯
sytnocui
1001
Funpack2-2 TC275轮流休眠待机很高兴能够参与这次Funpack活动,让我可以接触到英飞凌的MCU。没参加之前总觉得,能用Arduino就可以了,会用ESP32就可以满足很多场景了,还可以联网。但是,通过这次活动,让我迈出了第一步。
monohuang
830