主题中讨论的其他器件:MSP430WARE、 MSP430FR2111
您好!
如果我从现有 RAM 设置中将.bss 段设置为 FRAM、开箱即用示例 SD 卡访问段似乎停止工作。 停止工作意味着一旦调用诸如 SDCardLib_detectCard()、fopen()等函数,该函数就永远不会返回。 有人知道为什么会发生这种情况? 我尝试将整个.bss 段移动到 FRAM 而不是 RAM。
".bss :{}> FRAM'->位于.cmd 文件中
-
谢谢
-
此致
Soumyajit
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.
您好!
如果我从现有 RAM 设置中将.bss 段设置为 FRAM、开箱即用示例 SD 卡访问段似乎停止工作。 停止工作意味着一旦调用诸如 SDCardLib_detectCard()、fopen()等函数,该函数就永远不会返回。 有人知道为什么会发生这种情况? 我尝试将整个.bss 段移动到 FRAM 而不是 RAM。
".bss :{}> FRAM'->位于.cmd 文件中
-
谢谢
-
此致
Soumyajit
您好、Soumyajit、
首先要了解的是您用于 SD 卡功能的函数、现在、它不是 RAM、而是应处理 FRAM。 虽然 FRAM 可用于 RAM 等用途、但仍然存在差异、尤其是在可用的寻址模式方面。 因此、在许多情况下、在 RAM 中使用变量的函数在没有相应更改的情况下无法移植到 FRAM 功能。
有关更多详细信息、请参阅我们的文档。
遗憾的是、对于 FR5994和其他 FR5xx/6xx 衍生产品、我们没有汇编器示例、但对于 FRAM 功能、您也可以使用 FR2xx 示例、如下所示:
;--copyright--, BSD_EX
; 版权所有(c) 2014,Texas Instruments Incorporated
; 保留所有权利。
;
; 以源代码和二进制形式重新分发和使用,有无
; 允许修改,但前提是满足以下条件
; 满足:
;
; * 源代码的重新分发必须保留上述版权
; 注意,此条件列表和以下免责声明。
;
; * 二进制形式的再发行必须复制上述版权
; 注意,中的条件列表和以下免责声明
; 分发时提供的文档和/或其他材料。
;
; * 德州仪器公司的名称和名称均不相同
; 其贡献者可用于认可或推广衍生产品
; 来自此软件,未经特定的事先书面许可。
;
; 本软件由版权所有者和贡献者“按原样”提供
; 以及任何明示或暗示的保证,包括但不限于:
; 对特定适销性和适用性的隐含保证
; 免责声明。 在任何情况下、版权所有者不得或
; 贡献者对任何直接、间接、偶然、特殊、
; 惩戒性或后果性损害(包括但不限于
; 采购替代货物或服务;丧失使用、数据或利润;
(或 业务中断)无论造成了什么后果,也基于任何责任理论,
; 无论是合同、严格责任还是侵权行为(包括疏忽或)
; 否则)因使用本软件而产生的任何后果,
; 即使被告知可能发生这种损害。
;
;
;
; MSP430代码示例免责声明
;
; MSP430代码示例是通常包含的低级程序
; 以高度演示单个外设功能或设备功能
; 简明扼要。 为此、代码可能依赖于器件的加电默认值
; 寄存器值和设置,如时钟配置和注意
; 在组合多个示例中的代码时,应采取这种方法,以避免潜在的问题
; 效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
; 用于外设配置的 API 函数库方法。
;
;--/版权--
;********
; MSP430FR211x 演示- FRAM 的长字写入
;
; 说明:使用长字写入来写入 FRAM 的512字节块。
; 每100次写入后切换 LED。
; 注:长时间运行此示例将影响 FRAM
; 耐久性。
; ACLK = REFO、MCLK = SMCLK =默认 DCODIV =~1MHz
;
; MSP430FR2111
;---- --
;/|\| |
;||
;-|RST |
;|
;|P1.0 |---> LED
;
; 李小东
; Texas Instruments Inc.
; 2015年12月
; 使用 Code Composer Studio v6.1构建
;********
cdecls C、list、"msp430.h" ;包含器件头文件
FRAM_WRITE_PTR .set R5
数据 .set R6
计数 .set R7
FRAM_TEST_START .set 0xFD00
;------------------------------------------------------------------
.def 重置 ;将程序入口点导出到
;使链接器知道它。
;------------------------------------------------------------------
.text ;汇编到闪存存储器
.retain ;确保链接当前段
.retainrefs
重置 mov.w #_stack_end、SP ;初始化堆栈指针
StopWDT mov.w #WDTPW+WDTHOLD、&WDTCTL ;停止 WDT
BIS.b #01h、&P1DIR
BIC.w #LOCKLPM5、PM5CTL0 ;解锁 I/O 引脚
MOV.w #1111h,data ;初始化虚拟数据
MOV.w #00h、count ;初始化计数器
Mainloop inc.w 数据
MOV.w #FRAM_TEST_START、FRAM_WRITE_PTR
调用 #FRAMWrite ;无限循环
Inc.w 计数 ;使用 R14作为计数器
cmp.w #101、count
Jnz Mainloop
XOR.b #01h、&P1OUT ;切换 LED 以显示512字节
CLR.w 计数 ;...已被写入
MOV.w #0x1111,DATA ;经过100次后,重置虚拟数据
JMP 主循环
;------------------------------------------------------------------
FRAMWrite ;Write to the FRAM
;------------------------------------------------------------------
clr.w R15 ;使用 gen 用途寄存器作为索引
启动 inc.w R15
MOV.w #FRWPPW、SYSCFG0
cmp.w #101h、R15 ;对于128块...
JHS 出口
MOV.w 数据、0x0 (FRAM_WRITE_PTR);写入 FRAM
INCD.w FRAM_WRITE_PTR
JMP 启动
MOV.w #FRWPPW+PFWP、SYSCFG0
退出 RET
;------------------------------------------------------------------
;堆栈指针定义
;------------------------------------------------------------------
.global __stack_end
.sect .stack
;------------------------------------------------------------------
;中断矢量
;------------------------------------------------------------------
.sect ".reset" ;MSP430复位矢量
短路 复位
.end
此致
Peter