Funpack2-2:TC275之三核点灯
使用TC275的三个核心,轮流休眠待机,分别控制板卡上的LED灯,如core0检测按键按下,唤醒core1翻转LED1,一秒后,唤醒core2翻转LED2,系统休眠
标签
TC275
Funpack2-2
多核
lxb
更新2022-10-09
哈尔滨工业大学
820

描述: 

AURIX TM TC275 lite 套件配备了基于 32 位单芯片 AURIX TM TriCore TM的微控制器 Aurix TM TC275。它可以与一系列开发工具一起使用,包括 AURIX TM Development Studio、英飞凌免费的基于 Eclipse 的 IDE,或来自 Hightec/PLS/Infineon 的基于 Eclipse 的“FreeEntryToolchain”。

特性:

  • Arduino 连接器
  • Arduino ICSP 连接器
  • 稳压器 5V 至 3.3V
  • 可选 0 欧姆电阻器(1210 英制中的 R39_opt/R40_opt)
  • Arduino 连接器(数字)
  • 用于 AURIX™ TM的 20 MHz 晶振和用于 OCDS 的 12 MHz 晶振
  • 用于 WIFI/BLE 的 Mikrobus 连接器
  • 英飞凌 CAN 收发器 TLE9251VSJ 和 CAN 连接器
  • 针连接器 X2
  • 电源指示灯 (D5)
  • LED D1/D2 用于 ADBUS7/4 和 LED3 用于 ESR0 信号(低电平有效)
  • Arduino 针连接器(电源和模拟输入)
  • 电位器 (10 kOhm) 和可焊接的 0 Ohm 电阻器(0805 英制中的 R33)
  • 微型 USB(推荐 USB3.0)
  • 10 针 DAP 连接器
  • 复位按钮
  • 2 x Shield2GO 连接器,用于 Infineon Maker Shields
  • EEPROM 1Kbit

FvZgDVKtUVhkwjSR1jxyp190kT5D

参数
参数KIT_AURIX_TC275_LITE家庭微控制器产品描述AURIX™ TC275 lite 套件配备了基于 32 位单芯片 AurixTM TriCoreTM 的微控制器 AurixTM TC275。它可以与一系列开发工具一起使用,包括 AURIXTM Development Studio、英飞凌免费的基于 Eclipse 的 IDE,或来自 Hitecs/PLS/Infineon 的基于 Eclipse 的“FreeEntryToolchain”类型评估板

布局

FjAINMY5LVd_rBAx_27UFfzcNbrL

框图

Fj6Be7iWuYuXH0WpXxsY1XKwAZnq

用户手册

我选择的是任务一:

       使用TC275的三个核心,轮流休眠待机,分别控制板卡上的LED灯,如core0检测按键按下,唤醒core1翻转LED1,一秒后,唤醒core2翻转LED2,系统休眠。

任务分析:

多核调用与操作;按键检测;定时;LED灯的控制;休眠待机模式。

       好在英飞凌在教程/案例这一方面诚意十足。下面这个是教程的pdf文件的汇总链接:

https://www.infineon.com/cms/en/product/promopages/aurix-expert-training/

       浏览器端Ctrl+F可以快速搜索,输入TC275_LK,即可找到相应的教程介绍。如果看源码,是下面这个Github的链接:

https://github.com/Infineon/AURIX_code_examples/tree/master/code_examples

       也可以如下图所示,在ADS的Quick Links窗口中用import AURUIX Project快速导入例程。

FqAEkgyVSFyZocVUmqbHT_9jvftg

       下面是对应每个小的技术特点的教程链接(都有对应的源码):

①通过按钮控制LED灯:

https://www.infineon.com/dgdl/Infineon-AURIX_GPIO_LED_Button_1_KIT_TC275_LK-TR-Training-v01_00-EN.pdf?fileId=5546d4627a0b0c7b017a58448b0f24ea

②多核对LED进行控制:

https://www.infineon.com/dgdl/Infineon-Multicore_1_KIT_TC275_LK-Training-v01_02-EN.pdf?fileId=5546d4627a0b0c7b017a584498ae24ed

③系统定时:

https://www.infineon.com/dgdl/Infineon-AURIX_STM_System_Time_1_KIT_TC275_LK-TR-Training-v01_00-EN.pdf?fileId=5546d4627a0b0c7b017a58662b764c54

④核心休眠:

https://www.infineon.com/dgdl/Infineon-AURIX_SCU_Power_Down_Idle_1_KIT_TC275_LK-TR-Training-v01_00-EN.pdf?fileId=5546d4627a0b0c7b017a5866cc404c75

 

简单讲解一下

①通过按钮控制LED灯:

实现的功能:按下按钮后,LED 亮起,LED 亮起,松开按钮时关闭。一个端口引脚配置为输入,检查按钮状态,另一个端口引脚配置为输出,以控制指示灯。

特点:TC275的端口引脚可以单独配置为输入或配置为输出。配置为输入时,端口引脚具有高阻抗,或者,一个可选内部弱上拉电阻或下拉电阻。作为输出,端口引脚可配置为推挽输出状态或漏极开路。端口引脚的状态始终可以回读,与端口无关。引脚配置为输入或输出。

配置端口引脚:函数 init_GPIOs() 配置一个端口引脚来控制 LED 和一个端口引脚来检查按钮的状态。通过函数参数 IfxPort_Mode_outputPushPullGeneral调用函数 IfxPort_setPinMode(),将连接 LED 的端口引脚配置为推挽输出。通过使用函数参数 IfxPort_Mode_inputPullUp 调用 IfxPort_setPinMode() 将连接到按钮的端口引脚设置为带内部弱上拉的输入方向 。

LED控制:函数 control_LED() 读取按钮的状态,并根据按钮的状态打开或关闭 LED。通过调用函数 IfxPort_getPinState() 读取端口引脚状态;使用函数 IfxPort_setPinState() 将连接 LED 的端口引脚设置为低或高。

(上述所有功能均由 iLLD 头文件 IfxPort.h 提供)

②多核对LED进行控制:

实现的功能:一个 LED 由三个不同的内核控制。 核心 0 正在打开 LED。 当设置 LED 标志时,Core 1 将关闭 LED。 核心 2 控制 LED 标志的状态。

特点:TC275微控制器架构具有多达三个独立的处理器内核,允许在统一平台上无缝托管多个应用程序和操作系统。由于实施了多个程序闪存模块独立的读取接口,该架构支持进一步的实时功能。专为性能、安全和安保而构建,具有并行执行流程、锁步内核和进一步增强的硬件安全机制。

代码讲解:LED 由 CPU0 和 CPU1 切换。在使用 LED 之前,必须在初始化阶段配置 LED 所连接的端口引脚。第一步是将端口引脚设置为“HIGH”电平; 这会使 LED 在默认状态下保持关闭(IfxPort_setPinHigh() 函数)。第二步,将端口引脚设置为推挽输出模式 IfxPort_setPinMode() 函数。根据全局变量 g_turnLEDon 的状态,CPU0 将 LED 点亮 (IfxPort_setPinlow()) 或 CPU1 将其熄灭 (IfxPort_setPinHigh())。CPU2 使用头文件 Bsp.h 中的 wait() 函数每秒更改全局变量 g_turnLEDon 的状态。

(上述所有功能均由 iLLD 头文件 IfxPort.h 提供)

③系统定时:

实现的功能:STM模块用于获取当前系统时间(天:小时:分钟:秒)。时间存储在一个结构中。系统定时器 (STM) 模块计算自上次应用程序复位以来的滴答数。此数字用于以日、小时、分钟和秒为单位计算当前系统时间。

特点:系统定时器 (STM) 是一个自由运行的 64 位计数器,可用于需要高精度和长周期的定时应用。除其他功能外,STM 在任何应用程序复位后自动启动计数器(应用程序复位封装在系统复位和上电复位中)。该例中使用此计数器来获取应用程序运行以来的时间

通过以下步骤在函数 getTime() 中获取系统时间:通过调用 iLLD 函数 IfxStm_get() 获取系统时间(以刻度为单位)并除以 STM 频率(使用 iLLD 函数 IfxStm_getFrequency() 获取频率)将其转换为秒 。计算天数、小时数、分钟数和秒数,并将它们存储在 systemTime 结构的实例中。

函数 IfxStm_getFrequency() 和 IfxStm_get() 可以在 iLLD 头文件 IfxStm.h 中找到。)

④核心休眠:

实现的功能:CPU0 周期性地在 STM 定时器触发的运行模式和空闲模式之间切换。电源管理方案允许单独激活每个 CPU 的断电模式,以防没有要执行的活动任务并且需要降低功耗。在这个例子中,系统定时器周期性地产生中断(每两秒)。在中断服务程序中,CPU0 在空闲模式和运行模式之间切换。CPU0 在运行模式期间切换 LED1,而 LED1 在 CPU0 空闲时保持上次切换状态。

特点:电源管理系统允许激活断电模式,以便系统以相应应用状态所需的最低功率运行。支持空闲、睡眠或待机作为功耗模式。空闲是特定于每个 CPU 的,而睡眠和待机模式会影响整个系统。系统定时器 (STM) 是一个自由运行的 64 位计数器,可用于需要高精度和长周期的定时应用,STM 有能力在计数时产生中断达到预定义的比较值。

配置系统定时器以周期性产生中断:系统定时器的配置是通过函数configSystemTimer()完成的。系统定时器在上电后立即运行,需要配置。首先创建结构 IfxStm_Timer_Config 的实例,通过调用 IfxStm_Timer_initConfig() 对其进行初始化。然后配置如下以 Hz 为单位设置速率,指每秒的中断事件;定义中断的优先级(范围从 0 到 255);将中断服务请求的提供者定义为 CPU0、CPU1、CPU2 或 DMA;指定用于存储比较值以在定时器和比较器寄存器匹配时触发事件的比较器寄存器;使用例程 IfxStm_Timer_init() 和结构 IfxStm_Timer_Config 的实例来创建 g_myTimer。

上述函数可以在头文件 IfxStm_Timer.h 中找到。)

 

总结:

        我觉得这次任务难度刚刚好,之前没做过这种多核任务,一般都是多线程处理或者就是中断,首次体验感觉挺好玩的,也方便,官方例程非常丰富,还有相应的pdf介绍,源代码的注释也十分详细,必须点赞,省掉了我很多麻烦,是很顺心的一期。

        整体上没遇到什么困难,因为官方例程很全面了,我只需要把它们揉在一起就行了,挺棒的。

附件下载
test3core.zip
项目工程文件
团队介绍
电信学院大四信息对抗专业
团队成员
lxb
哈尔滨工业大学电信学院信息对抗专业
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号