ZHCA930B June   2014  – August 2021 MSP430FR2032 , MSP430FR2033 , MSP430FR2110 , MSP430FR2111 , MSP430FR2311 , MSP430FR2433 , MSP430FR2532 , MSP430FR2533 , MSP430FR2632 , MSP430FR2633 , MSP430FR4131 , MSP430FR4132 , MSP430FR4133 , MSP430FR5720 , MSP430FR5721 , MSP430FR5722 , MSP430FR5723 , MSP430FR5724 , MSP430FR5725 , MSP430FR5726 , MSP430FR5727 , MSP430FR5728 , MSP430FR5729 , MSP430FR5730 , MSP430FR5731 , MSP430FR5732 , MSP430FR5733 , MSP430FR5734 , MSP430FR5735 , MSP430FR5736 , MSP430FR5737 , MSP430FR5738 , MSP430FR5739 , MSP430FR5847 , MSP430FR58471 , MSP430FR5848 , MSP430FR5849 , MSP430FR5857 , MSP430FR5858 , MSP430FR5859 , MSP430FR5867 , MSP430FR58671 , MSP430FR5868 , MSP430FR5869 , MSP430FR5870 , MSP430FR5872 , MSP430FR58721 , MSP430FR5887 , MSP430FR5888 , MSP430FR5889 , MSP430FR58891 , MSP430FR5922 , MSP430FR59221 , MSP430FR5947 , MSP430FR59471 , MSP430FR5948 , MSP430FR5949 , MSP430FR5957 , MSP430FR5958 , MSP430FR5959 , MSP430FR5967 , MSP430FR5968 , MSP430FR5969 , MSP430FR5969-SP , MSP430FR59691 , MSP430FR5970 , MSP430FR5972 , MSP430FR59721 , MSP430FR5986 , MSP430FR5987 , MSP430FR5988 , MSP430FR5989 , MSP430FR5989-EP , MSP430FR59891 , MSP430FR5994 , MSP430FR6820 , MSP430FR6822 , MSP430FR68221 , MSP430FR6870 , MSP430FR6872 , MSP430FR68721 , MSP430FR6877 , MSP430FR6879 , MSP430FR68791 , MSP430FR6887 , MSP430FR6888 , MSP430FR6889 , MSP430FR68891 , MSP430FR6920 , MSP430FR6922 , MSP430FR69221 , MSP430FR6927 , MSP430FR69271 , MSP430FR6928 , MSP430FR6970 , MSP430FR6972 , MSP430FR69721 , MSP430FR6977 , MSP430FR6979 , MSP430FR69791 , MSP430FR6987 , MSP430FR6988 , MSP430FR6989 , MSP430FR69891

 

  1.   商标
  2. 1FRAM 和通用存储器
  3. 2可以将其视为 RAM
  4. 3存储器布局分区
    1. 3.1 程序代码和常量数据
    2. 3.2 变量
    3. 3.3 软件栈
    4. 3.4 支持在 MSP430 IDE 中进行存储器分区
      1. 3.4.1 TI Code Composer Studio
        1. 3.4.1.1 修改链接器文件示例 1
        2. 3.4.1.2 修改链接器文件示例 2
        3. 3.4.1.3 修改链接器文件示例 3
      2. 3.4.2 适用于 MSP430 的 IAR Embedded Workbench
        1. 3.4.2.1 修改链接器文件示例 1
        2. 3.4.2.2 修改链接器文件示例 2
        3. 3.4.2.3 修改链接器文件示例 3
  5. 4优化应用能耗和性能
    1. 4.1 缩短从 LPMx.5 唤醒的时间
  6. 5面向 FRAM 且易于使用的编译器扩展
    1. 5.1 TI Code Composer Studio
    2. 5.2 适用于 MSP430 的 IAR Embedded Workbench
  7. 6FRAM 保护和安全性
    1. 6.1 存储器保护
    2. 6.2 检查链接器映射文件
      1. 6.2.1 TI Code Composer Studio
      2. 6.2.2 适用于 MSP430 的 IAR Embedded Workbench
    3. 6.3 存储器保护设置
      1. 6.3.1 FR5xx 和 FR6xx 系列 MCU MPU 配置
        1. 6.3.1.1 CCS MPU 实现方式
          1. 6.3.1.1.1 手动配置 MPU
          2. 6.3.1.1.2 基于 IDE 向导的 MPU 配置
        2. 6.3.1.2 IAR MPU 实现方式
          1. 6.3.1.2.1 手动配置 MPU
          2. 6.3.1.2.2 基于 IDE 向导的 MPU 配置
      2. 6.3.2 FR2xx 和 FR4xx 系列 MCU FRAM 写保护配置
    4. 6.4 IP 封装
  8. 7参考文献
  9. 8修订历史记录
手动配置 MPU

创建一个名为 system_pre_init.c 的新 C 文件,并将其添加到工程中。接下来,在此文件内放置一个 int _system_pre_init(void) 函数。如果此函数是工程的一部分,则工具链将确保在任何 C 启动初始化例程之前以及代码执行过程转移到 main() 之前首先执行此函数。此函数通常用于需要在器件启动之后尽早执行的关键例程。

下面是用于启用 MPU 的代码片段示例。基于应用,根据需要确定 MPU 配置。

#include <msp430.h>

int _system_pre_init(void)
{
  /* 在此插入低级初始化 */

  /* 在长整型变量初始化序列期间禁用看门狗计时器 */
  /* 以防止复位。*/
  WDTCTL = WDTPW | WDTHOLD;   
  
  // 配置 MPU
  MPUCTL0 = MPUPW;                          // 写入 PWD 以访问 MPU 寄存器
  MPUSEGB1 = 0x0480;                        // B1 = 0x4800;B2 = 0x4C00
  MPUSEGB2 = 0x04c0;                        // 边界已分配至段
  // 段 1 – 允许只读和只写
  // 段 2 – 允许只读
  // 段 3 – 允许只读和只执行
  MPUSAM = (MPUSEG1WE | MPUSEG1RE | MPUSEG2RE | MPUSEG3RE | MPUSEG3XE);
  MPUCTL0 = MPUPW | MPUENA | MPUSEGIE;      // 启用 MPU 保护
                                            // 在 BOR 之前锁定 MPU 寄存器

  /*==================================*/
  /* 选择应执行或不执行 */
  /* 段初始化。           */
  /* 返回:0 则省略初始化 */
  /* 1 则执行初始化          */
  /*==================================*/
  return 1;
}

正确配置之后,_system_pre_init() 函数应当在进入主存储器之前执行完毕。进入 main() 时,观察 CCS 调试器的寄存器视图(图 6-3),其中显示了正在配置的 MPU 寄存器内容。

GUID-1AD33C86-818A-4564-9B9C-99B3F9C488A2-low.gif图 6-3 寄存器窗口表明已启用 MPU