TC397 LMURAM 使用

参考 RAM and ROM user sections - Infineon Developer Community

TC397用户自己能用的RAM:

  • DSRAM0: 240KB, Base: 0x70000000, End: 0x7003BFFF
  • DSRAM1: 240KB, Base: 0x60000000, End: 0x6003BFFF
  • DSRAM2: 96KB, Base: 0x50000000, End: 0x50017FFF
  • DSRAM3: 96KB, Base: 0x40000000, End: 0x40017FFF
  • DSRAM4: 96KB, Base: 0x30000000, End: 0x30017FFF
  • DSRAM5: 96KB, Base: 0x10000000, End: 0x10017FFF
  • LMURAM: 768KB, Base: 0x90040000, End: 0x900FFFFF

跑算法模型的时候, 通常会有特别大的数组或结构体, TC397的DSRAM经常不够用, 如

#include <stdint.h>
volatile uint8_t daisyChain_1_activeBank[1024*300];

编译就会报错

ltc E112: cannot locate 2 section(s):
cctc -lrt -lfp_fpu -lcs_fpu  -Wl-Oc -Wl-OL -Wl-Ot -Wl-Ox -Wl-Oy -Wl--map-file="lmu_test.map" ...
ltc I455:   requirement: 300K (0x4b004) bytes of RAM area in space mpe:vtc:linear
ltc I456:   section type: range restriction - range(s) 0x70000000-0x7003c000
ltc I456:   section type: group restriction - ordered
ltc I457:   .data.Cpu0_Main.g_cpuSyncEvent (16421) (0x4 bytes)
ltc I457:   .bss.Cpu0_Main.daisyChain_1_activeBank (16422) (0x4b000 bytes)
make: *** [makefile:78: lmu_test.elf] Error 1

如图

在这里插入图片描述

可以用 __attribute__((section (".data.lmudata"))) 指定到 LMURAM里面, 如

#include <stdint.h>
volatile __attribute__((section (".data.lmudata"))) uint8_t daisyChain_1_activeBank[1024*300];  //300KB
uint32_t __attribute__((section (".data.lmudata"))) daisyChain_1_cmd[0x100];    //0x100*4 B
uint8_t __attribute__((section (".data.lmudata"))) daisyChain_2_cmd[1024*400];  //400KB

这样编译就不会报错了, 在MAP文件中可以看到分配到了LMU里面

在这里插入图片描述

编译出来HEX大概 20000多行. 当然很多 :02000004 都是0, 说明编译器处于一个有点懵的状态

还有一种手动分配地址的方法

volatile __at(0x90040400) uint8_t daisyChain_1_activeBank[1024*300];  //300KB
uint32_t __at(0x90000000) daisyChain_1_cmd[0x100];    //0x100*4 B
uint8_t __at(0x9008b400) daisyChain_2_cmd[1024*400];  //400KB

编译出来HEX文件 500 多行. 但具体能不能跑起来没有测试.

具体使用哪种方法, 还要看实际效果, 特别是做Boot+APP的时候, 更要注意实际运行一下看程序到底能不能正常运行, 也有可能两种方法都不对.

欢迎扫描二维码关注微信公众号, 及时获取最新文章:
在这里插入图片描述

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
英飞凌 TC397 是一款高性能微控制器 (MCU),广泛应用于各种自动化控制系统、工业设备及物联网应用中。在 TC397 中断管理方面,理解如何有效地配置和使用中断对于提高系统的实时响应能力和整体性能至关重要。 ### 中断的概念 在微控制器如英飞凌 TC397 的上下文中,中断是一种重要的机制,允许处理器在特定事件发生时暂停当前运行的任务,并转而去处理这个事件,处理完毕后再返回到原来的任务。这不仅提高了系统效率,还能增强实时性和稳定性。 ### 使用中断的基本步骤 #### 配置中断源 在使用英飞凌 TC397 进行中断操作前,首先需要配置硬件中断源。例如: - **外部中断**:可以来自按钮、传感器等外部输入设备。 - **定时器中断**:由内部定时器触发。 - **ADC中断**:模拟数字转换完成后触发。 配置过程通常涉及设置中断向量表地址、选择中断优先级、以及配置中断使能位等。 #### 中断服务程序 (ISR) 一旦中断被触发,处理器会跳转至中断服务程序 (Interrupt Service Routine, ISR) 运行。ISR负责执行针对该中断的具体任务,比如更新状态信息、控制设备动作等。 ```c void EXTI0_IRQHandler(void) { /* Clear the interrupt flag */ EXTI_ClearITPendingBit(EXTI_Line0); // 执行特定于外部中断0的处理代码 } ``` #### 管理中断优先级 英飞凌 TC397 提供了丰富的中断优先级管理功能,允许开发者根据不同中断的重要程度给予不同的优先级处理。高优先级的中断会在低优先级的中断之前得到处理。 #### 检查并清除中断标志位 每次中断处理结束后,都需要检查中断标志位是否已正确清除,避免在同一时间间隔内多次响应相同的中断信号。这通常通过调用对应的清除函数完成。 ### 实例应用 假设我们要设计一个用于监控环境温度并调整风扇速度的应用,我们可以利用 ADC 和外部中断功能: 1. **配置 ADC**:开启 ADC,设置采样速率、分辨率等。 2. **配置外部中断**:连接温度传感器到外部中断引脚,当温度超出预设范围时触发中断。 3. **中断服务程序**:在 ISR 中读取 ADC 值,如果超出范围则计算出相应的风扇速度变化值,并通过 GPIO 控制风扇调节电机转速。 4. **周期性扫描和反应**:在主循环中定期检查中断标志位,确保及时响应外部中断。 ### 结论 理解和有效利用英飞凌 TC397 的中断功能能够显著提升基于此 MCU 设计的系统的响应能力、可靠性和能效。中断管理的关键在于合理配置中断源、编写高效且明确的中断服务程序,以及适当的优先级策略和标志位管理。 -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值