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.

[参考译文] MSP430FR5994:使用 FRAM2访问

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1070303/msp430fr5994-accessing-using-fram2

部件号:MSP430FR5994

您好,

我正在尝试利用 FRAM2上可用的额外内存。  但我遇到了问题。  我使用 pragma 为要使用的内存空间分配变量

#pragma data_section (加速度计_X,".testObjSeg")

_Q15加速计_X[样品];

我编辑链接器以关联内存位置。

testObjSeg:{}> FRAM

到目前为止,这是可以的,除了我仍然内存不足。  我尝试将内存与 FRAM2关联,但遇到问题。  第一个问题是,调试器似乎不会让它在启动板之前就出现。  第二个问题是使用扩展地址用于 FRAM2的专门功能,这是我所不熟悉的。  有没有人能告诉我一个学习在扩展地址和记忆位置使用 FRAM2的好起点? ? ?

感谢你的帮助,

迈克尔

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

    迈克尔:

    请帮助检查本文档是否对您有帮助:

    https://www.ti.com/lit/an/slaa628b/slaa628b.pdf

    谢谢!

    此致

    约翰逊

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

    谢谢你们,这是一个很好的开始,让我更好地熟悉 FRAM 和内存保护(我可能需要更多地使用__low_levu__init(void),此时我确实禁用了 MPU 设置)。

    但是,我认为访问此设备上的 FRAM2有专门的功能。  例如,在链接器中,您可以看到 FRAM2的开头位于0x10000。  我相信这需要专用功能,因为地址空间比内存的其他部分要长

    内存

    TINYRAM:原点= 0xA,长度= 0x16
    BSL:原点= 0x1000,长度= 0x800
    INFOD:原点= 0x1800,长度= 0x80
    INFOC:原点= 0x1880,长度= 0x80
    INFOB:原点= 0x1900,长度= 0x80
    INFOA:原点= 0x1980,长度= 0x80
    RAM:原点= 0x1C00,长度= 0x1000
    FRAM:原点= 0x4000,长度= 0xBF80
    FRAM2:原点= 0x10000,长度= 0x33FF8 /*边界更改为修正 CPU47 */
    JTAGSIGNATURE:原点= 0xFF80,长度= 0x0004,填充= 0xFFFF
    BSLSIGNATURE:原点= 0xFF84,长度= 0x0004,填充= 0xFFFF
    IPESIGNATURE:原点= 0xFF88,长度= 0x0008,填充= 0xFFFF
    INT00:原点= 0xFF90,长度= 0x0002
    INT01:原点= 0xFF92,长度= 0x0002
    INT02:原点= 0xFF94,长度= 0x0002
    INT03:原点= 0xFF96,长度= 0x0002

    我想您不能向我指出一个最小的编码示例,只是为了初始化,写入和读取我要存储在这块大内存中的阵列?

    此外,我还在使用 CCS。  可能有使用20位地址内存空间的设置。

    此致,

    迈克尔

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

    迈克尔:

    很抱歉,我不清楚您的问题,您能否再次提出您遇到的问题?

    谢谢!

    此致

    约翰逊

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

    当然,您可以告诉编译器使用20位地址,但这将导致代码大小增加。

    对于简单使用情况,特殊函数(void __data20_write_char (无符号长 addr,无符号字符 src);例如在 GCC 中)将执行该操作。 请参阅 CCS 文档以了解其提供的内容。

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

    大卫,你好。  

    谢谢,这解决了我的问题。  下面是一个代码片段,用于存储_Q15样本以供以后的 FFT 使用

    #define samples1024    

    无符号整型加速计_X = 0x10000;

    无符号整型加速计_Y = 0x10800;

    无符号整型加速计_Z = 0x11000;

     

    ……

     

    //收集读数

    _Q15 temp_reading = 0;

    无符号地址乘数=2;

     

    无符号位置_X =(加速度计_X +(counter*address_multiplier));

    无符号位置_Y =(加速度计_Y +(counter*address_multiplier));

    无符号位置_Z =(加速度计_Z +(counter*address_multiplier));

     

     

    temp_reading = i16_GET_X_Axis_imor();

    __data20_write_short (location_X,temp_reading);

     

    temp_reading = i16_GET_Y_Axis_imor();

    __data20_write_short (location_Y,temp_reading);

     

    temp_reading = i16_GET_Z_Axis_imor();

    __data20_write_short (location_Z,temp_reading);

    还有一个类似的内在读取函数。

    此致,

    迈克尔

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

    大卫,你好。

    代码大小的增加可能是一个问题。  我的代码不起作用将编译器设置为对 lar_data_model 和 lar_code_model 始终使用20位地址大小。  尽管在 CCS 项目配置中更改这些值是一个快速的修正,但它打破了代码的某些方面。  使用这些功能效果良好,将20位地址访问限制在我需要的位置。