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
创建一个名为 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 寄存器内容。