This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR6972:将部分 FRAM 用作 RAM、但 MCU 以锁定状态运行

Guru**** 2386620 points
Other Parts Discussed in Thread: MSP430FR6972
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/709603/msp430fr6972-use-some-of-fram-as-ram-but-mcu-run-in-locked-up-status

器件型号:MSP430FR6972

您好!

 我的客户在项目中使用 FR6972。 他们希望使用0x4400-0x5eff 作为 RAM、但失败了。 您能帮我检查他们修订的 XCL 吗? 是否有任何文档可以说明如何将 FRAM 操作到 RAM?

这是他们对 XCL 进行的修订。

/********
//
// MSP430FR6972的 XLink 配置文件
//
//版权所有1996-2015 IAR Systems AB。
//
//有关详细信息,请参阅文件430/doc/licenses/IARSourceLicense.txt
//许可证信息。
//
//$Revision:13028美元
//
/********

//----------------------------
//说明
//

//
//用法:
//
// xlink [文件...] f lnk430fr6972.xcl
//
//--------------------------------------------------------
//设备摘要
//

//
//内核:MSP430Xv2
//
//中断向量:56
//
//签名存储器:16字节
//
// JTAG 签名存储器:4字节
//
// BSL 签名存储器:4字节
//
// IPE 签名存储器:8字节
//
//外设单元:00100-00FFF
//
//信息存储器(FRAM):01800-019FF // 0.5K
//
//读/写存储器(RAM):01C00-023FF //2K
//
//读/写存储器(TINYRAM):00006-0001F
//
//持久存储器(FRAM):04400-0FFFF //47k
// 10000-13FFF //16k
//


//--------------------------------------------------------
//段
//

//--------------------------------------------------------
//数据读取/写入段
//

//
//以下两个段都可用
// DATA16和 DATA20段组。
//
//段使用
//---- ----------------
//数据 _Z 数据初始化为零
//数据 _I 通过从数据复制初始化数据 ID
//数据 使用__no_init 定义的_N 数据
//数据 _P 使用_persistent 定义的数据
//数据 堆'malloc'和'free'使用的堆
//
//段使用
//---- ----------------
// CSTACK 运行时堆栈
//针对主线程的 TLS16_I 线程本地存储
//


//--------------------------------------------------------
//编程和数据只读段
//

//
//以下两个段都可用
// DATA16和 DATA20段组。
//
//段使用
//---- ----------------
//数据 _C 常量数据、包括字符串字面量
//数据 _ID 数据初始化程序 _I
//
//段使用
//---- ----------------
//信息内存
// INFOA 信息内存,组 A
// INFOB 信息内存,组 B
// INFOC 信息内存,组 C
// INFOD 信息内存,组 D
// CSTART 程序启动代码
//编写程序代码
//中断服务例程的 ISR_code 程序代码
// C++使用的 DIFUNCT 动态初始化矢量
//由-J 选项生成的校验和字节
//签名签名存储器
// JTAGSIGNATURE JTAG 签名存储器
// BSLSIGNATURE BSL 签名存储器
// IPESIGNATURE IPE 签名存储器
// intvec 中断向量
//复位复位向量
//主线程的 TLS16_ID 线程本地初始化程序
// MPU_B 存储器保护单元边界
// IPE_B 知识产权封装边界
// IPECODE16 IPE 代码
// IPEDATA16_C IPE 常量数据
//
//注意:
//
//*段 CSTART、ISR_code 和 DIFUNCT 以及中的段
//必须将 DATA16和 TLS16段组放置在范围内
// 0000-FFFD。
//
//* INFox 和 INFO 段重叠,这允许数据为
//放置在特定的存储库中或信息存储器中的任何位置。
//
//* INTVEC 和复位段重叠。 这允许应用程序执行
//使用运行时库提供的复位矢量,或
//通过定义相关的中断函数来提供复位函数
//与复位矢量。
//
//*要使用内存保护单元,符号?mpu2_init 应为
//包括在应用程序中。 符号'_IAR_430_MPU_base'应为
//定义到 MPU 外设寄存器的位置、和
//将寄存器'_IAR_430_MPUSAM_Value'和'_IAR_430_MPUCTL0_Value'添加到
//应将寄存器 MPUSAM 和 MPUCTL0的值初始化为、
//。
//
//*要包括知识产权封装(IPE)库
//应用中必须包含标签'_IAR_430_IPE_signature'。
//(一种方法是使用-g XLink 命令行选项。) 。
//符号'_IAR_430_MPUIPC0_Value'必须定义为值
// MPUIPC0寄存器应初始化为。
//
//*在知识产权封装中包含自定义句段
//(IPE)区域、将它们放置在 IPE_B1和 IPE_B2段之间。
//


//----------------------------
//配置
//

//--------------------------------------------------------
//堆栈和堆大小
//

//取消注释以供命令行使用
//-D_STACK_SIZE=160
//-D_DATA16_Hap_size=160
//-D_DATA20_Hap_size=160
//-g?mpu2_init
//-g_IAR_430_IPE_signature


//--------------------------------------------------------
//定义 CPU
//

cmsp430


//--------------------------------------------------------
//支持将函数放置在读取/写入存储器中
//

-qcode_i=code_ID


//--------------------------------------------------------
//支持线程本地存储
//

-QTLS16_I=TLS16_ID


//--------------------------------------------------------
//硬件乘法器位置
//

-D__IAR_HWMUL=4C0


//----------------------------
//放置指令
//

//--------------------------------------------------------
//信息内存
//


-Z (const) info=1800-19FF
-Z (const) INFOA = 1980 - 19FF
-Z (const) INFOB =1900-197F
-Z (const) infoc=1880-18FF
-Z (const) INFOD = 1800-187F

//--------------------------------------------------------
// RAM 内存
//

-Z (DATA) TINYRAM=0006-001F
-Z (data) DATA16_I、DATA16_Z、DATA16_N、TLS16_I=1C00-23FF、4400-5EFF //加2816字节的RAM
-Z (data) code_i
-Z (data) DATA20_I、DATA20_Z、DATA20_N
-Z (data) CSTACK+_STACK_SIZE#


//--------------------------------------------------------
// FRAM 存储器
//

//--------------------------------------------------------
//低内存0-0FFFF
//

//--------------------
//在 FRAM 中读取/写入数据
//

-Z (const) DATA16_P、DATA20_P=8000-FF7F //改wfjP =7000-FF7F
-Z (data) DATA16_heap+_DATA16_heap_size
-Z (data) DATA20_heap+_DATA20_heap_size

//--------------------
//内存保护单元(MPU)边界
//

-Z (const) MPU_B1

//--------------------
//知识产权封装(IPE)
//

-Z (const) IPE_B1=8000-FF7F //改//改wfjP =7000-FF7F
-Z (data) IPEDATA16_N
-Z (代码) IPECODE16
-Z (const) IPEDATA16_C、IPE_B2

//--------------------
//内存保护单元(MPU)边界
//

-Z (const) MPU_B2

//--------------------
//常量数据
//

-Z (const) DATA16_C、DATA16_ID、TLS16_ID、DIFUNCT、校验和= 8000 - FF7F /改 μ C//改wfjP μ=7000 - FF7F

//--------------------
//代码
//

-Z (code) CSTRT、ISR_code、CODE16=8000-FF7F //改 μ s/改wfjP μ=7000-FF7F


//--------------------------------------------------------
//所有内存0-FFFFF
//

//--------------------
//代码
//

P (改) code=8000-FF7F、10000-13FFF //改wfjP μ//μ s=7000-FF7F
-Z (code) code_pad

//--------------------
//常量数据
//

-Z (const) DATA20_C、DATA20_ID、CODE_ID = 8000-FF7F、10040-13FFF /改 μ C//改wfjP μ=7000-FF7F


//--------------------------------------------------------
//签名存储器和中断矢量
//

-Z (const) signature=FF80-FF8F
-Z (const) JTAGSIGNATURE=FF80-FF83
-Z (const) BSLSIGNATURE=FF84-FF87
-Z (const) IPESIGNATURE=FF88-FF8F
-Z (代码) intvec=FF90-FFFF
-Z (代码) reset=FFFE-FFFF

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Joyce、您好!

    感谢您发帖。
    我们将仔细研究它并尽快返回给您。

    谢谢、
    是的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。我还需要一份文档来说明如何将 FRAM 操作到 RAM 以及应该注意的事项。 谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joyce、请在 TI.com 中搜索:

    SLAA628–2014年6月

    "MSP430TmFRAM 技术–操作方法和最佳实践"

    你一定要来看看

    3.4.1 TI Code Composer Studio

    (笑声)

    每个 CCS 工程都有一个链接器命令文件(.cmd)、该文件在工程创建时填充到工程文件夹中。 该文件介绍的程序代码、变量、常量和堆栈的分配

    器件。 它还描述了器件中每个存储器段的排序方式的优先级。 以下列出的段名是大多数应用最常用的项目。

    .const /*常量数据*/

    .text /*应用程序代码*/

    .bss /*未初始化全局和静态变量–RAM 中的默认值*/

    .data //初始化全局变量和静态变量–RAM 中的默认值*/

    STACK /*软件系统堆栈–RAM 中的默认值*/

    此外、当链接器段名为.TI.noinit (与#pragma NOINIT 结合使用)时、编译器还能够自动将所选变量、数组或结构放入 FRAM 中

    和.TI.persistent (用于#pragma PERSISTENT)分配给 FRAM。 对于.TI.persistent、此定义已出现在链接器命令文件中、用于查找声明的变量

    作为#pragma PERSISTENT 写入 FRAM。 有关 CSSv6.0.0的重要信息、请参阅附录 A

    对于.TI.noinit、如果应该使用#pragma NOINIT 功能来定位不存在的变量和结构、则客户可以像使用现有的.TI.persistent 那样进行此类分配

    需要将 C 启动初始化到 FRAM 中。

    .TI.noinit:{}>FRAM /* for #pragma NOINIT */

    .TI.persistent:{}> FRAM /* for #pragma PERSISTENT */

    (笑声)

    来自我:

    简单地说、FRAM 中的简单变量(数组)和变量(数组)之间没有区别-您只需向链接器提供命令(介绍链接器、请参阅 SLAA628)它需要将哪些变量放置在简单存储器中、以及将哪些变量放置在 FRAM 中。
    此外、在程序中、您只需使用变量(数组)、因为通常您在普通程序中使用它们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 我需要一个指南来展示如何逐步进入 IAR 项目。 谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Joyce、您好!

    我想 Alexander Soroka 为您提供了有关将 FRAM 用作 RAM 的非常好的说明。

    请阅读本文档:“MSP430TmFRAM 技术–操作方法和最佳实践”
    www.ti.com/.../slaa628.pdf

    在第3.4.2节中、它讨论了如何使用 IAR 进行存储器分区。

    如果您有任何疑问、请告知我们。

    谢谢、
    是的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    例如:
    在 main.c 中-在 main{}proc 之前、我将写入以下内容:
    (笑声)
    #include

    #pragma PERSISTENT (EU_Corr)
    volatile static signed char eu_corr=1;
    #pragma PERSISTENT (eU1_Corr)
    volatile static signed char eU1_corr=1;
    #pragma PERSISTENT (eIbutton)
    volatile static unsigned char eIbutton=2;
    pragma PERSISTENT (eIRcorr)
    易失性静态浮点 eIRcorr=13.13F;
    #pragma PERSISTENT (ez)
    volatile static unsigned char ez=0;...
    (笑声)

    这是我的变量。

    在 pogramm 中:(例如)
    (笑声)
    EU_Corr = EU_Corr + 123;
    (笑声)

    结果- FRAM 中存储了"EU_COR"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否在 IAR 中共享一个使用  0x4400-0x5eff 作为 FR6972中 RAM 的示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有 IAR。

    我使用的是 CCS 8.1