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.

[参考译文] MSP430FR2311:刷写 MSP430后无功能

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1264810/msp430fr2311-no-functionality-after-flashing-the-msp430

器件型号:MSP430FR2311

大家好!  

我怀疑 LPM 4.5有问题。 我正在对游戏进行编程、刷写 MSP 430后没有任何反应-没有任何 LED 亮起。 当我对器件进行物理连接并且在 CCS 中逐行手动抄入代码后、一切都按预期工作。 我是否缺少设置或调优?

代码如下-

#包含
//最新计划8/27/23
void on (int LED);//根据编号打开 LED
void off (int LED);//按编号关闭 LED
内部 BC (空);//(按钮检查)
void cycle (void);//游戏的主循环
void who (int check,int x);//这可让玩家知道谁输了
void initGpio (void);
void showLevel (int level、char inc);//以二进制形式显示播放器级别
//全局变量
整型 x;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT

//配置 GPIO   
initGpio();

//确定是来自 LPMx.5还是常规复位。
IF (SYSRSTIV = SYSRSTIV_LPM5WU)// MSP430仅从 LPMx.5唤醒
{

IF (((P2IFG 和 BIT6)= BIT6)//P2.2
{
x = 6;

否则、如果((P2IFG 和 BIT7)= BIT7)//P2.3
{
X = 5;

否则{
X=7;

//****输出和输入****

//P1
P1SELC= 0x00;
P1DIR = 0xFF;//所有 P1都设置为输出
P1OUT = 0x00;//所有 LED 均关闭
//P2
P2IFG = 0;
P2SELC = 0x00;
P2DIR |= BIT0+BIT1;//P2.0 = LED9 P2.1 = LED10
P2DIR &=~BIT6+BIT7;// P2.6= B1 P2.7 = B2
P2OUT = 0x00;//所有 LED 熄灭,引脚6和7上的下拉电阻
P2REN |= BIT6+BIT7;//启用下拉/上拉
PM5CTL0 &=~μ A LOCKLPM5;
__delay_cycles (250000);//快速修复即时故障
cycle ();
//

//如果游戏结束或从冷启动供电,请去这里。
//它配置设备并将设备放入 LPM4.5

P2DIR &=~BIT6+BIT7;//配置为输入方向引脚
P2OUT &=~BIT6+BIT7;//配置为下拉
P2REN |= BIT6+BIT7;//电阻寄存器启用
P2IES &=~BIT6+BIT7;//低边沿/高边沿
P2IFG = 0x00;//清除所有 P2中断标志
P2IE |= BIT6+BIT7;//中断被启用
PM5CTL0 &=~μ A LOCKLPM5;
//显式清除 RTC 控制寄存器以将其禁用
//仅在以前启用了 RTC 的情况下
RTCCTL = 0;

PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器以进行写入
PMMCTL0_L &&~Ω(SVSHE);//禁用高侧 SVS
PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF
PMMCTL0_H = 0;//锁定 PMM 寄存器

//输入 LPM4注意该操作不返回。 此 LPM4.5
//将通过复位事件退出,导致重新启动
//代码。
__ bis_SR_register (LPM4_BITS | GIE);


//***** 职能部门*****
空开启(内部 LED)
{
开关(LED)
{
情形1:
P1OUT|= BIT0;
中断;
情形2:
P1OUT|= BIT1;
中断;
情形3:
P1OUT|= BIT2;
中断;
情形4:
P1OUT|= BIT3;
中断;
情形5:
P1OUT|= BIT4;
中断;
情况6:
P1OUT|= BIT5;
中断;
情形7:
P1OUT|= BIT6;
中断;
情形8:
P1OUT|= BIT7;
中断;
情形9:
P2OUT|= BIT0;
中断;
情形10:
P2OUT|= BIT1;
中断;
默认值:
中断;


空关闭(内部 LED)
{
开关(LED)
{
情形1:
P1OUT&=~BIT0;
中断;
情形2:
P1OUT&=~BIT1;
中断;
情形3:
P1OUT&=~BIT2;
中断;
情形4:
P1OUT&=~BIT3;
中断;
情形5:
P1OUT&=~BIT4;
中断;
情况6:
P1OUT&=~BIT5;
中断;
情形7:
P1OUT&=~BIT6;
中断;
情形8:
P1OUT&=~BIT7;
中断;
情形9:
P2OUT&=~BIT0;
中断;
情形10:
P2OUT&=~BIT1;
中断;
默认值:
中断;


//按钮检查功能
内部 BC (空)
{
INT IN=0;
INT 输入=0;

输入= P2IN & BIT6+BIT7;//确保没有噪声 P2IN&0b11000000 P2IN&BIT7+BIT6
IN =输入;
开关(输入)
{
案例0x00:
in=0;//no player 命中按钮
中断;
案例 BIT6:
in=1;//player 1点击按钮
中断;
案例 BIT7:
in=2;//player 2点击按钮
中断;
案例 BIT6+BIT7:
in=3;//两个播放器都按下按钮
中断;
默认值:
IN=0;//任何其他奇怪的情况
中断;

返回;


void who (int check、int x){
无符号字符 z = 255;
整型 n;
如果(check=1||x=1){
while (z>0){
for (n=5;n>0;n--){
开(n);
关(n);

Z--;

如果(check=2|||x=10){
Z = 255;
while (z>0){
for (n=10;n>5;n--){
开(n);
关(n);

Z--;



void showLevel (int level、char inc){
P1OUT=level/inc;
if (P1OUT!= 0){//解决人类感知问题
__delay_cycles (1500000);


P1OUT=0x00;

空循环(空)
{
int check=0;// x 是计数器,也是要打开或关闭的 LED 编号||Check 是按钮检查输出
整型值大;
INT 电平= 0;
const char inc=10;//每按按钮增量(最大255)
const int startspd=1000;

如果(x=5){//LED 在一个方向或另一个方向亮起、具体取决于按下唤醒的按钮
转至 P2;

执行{
for (;x<10;x++){
big = startspd 级;
执行{
开(x);
CHECK=BC();
if (x=1&&check=1)
{
level=level+inc;
__ delay_cycles (300000);
关闭(x);
中断;



否则,如果(((check>0)||(big=2&x=1)){
关闭(x);
转至输;



关闭(x);
CHECK=BC();
if (x=1&&check=1)
{
level=level+inc;
开(x);
__ delay_cycles (300000);
关闭(x);
中断;



否则,如果(((check>0)||(big=2&x=1)){
关闭(x);
转至输;



大——
{while (big>1);

P2:
for (;x>1;x--){
big = startspd 级;
执行{
开(x);
CHECK=BC();
if (x=10&&检查==2)
{
level=level+inc;
__ delay_cycles (300000);
关闭(x);
中断;



否则为((check>0)|||(big=2&x=10)){
关闭(x);
转至输;



关闭(x);
CHECK=BC();
if (x=10&&检查==2)
{
level=level+inc;
开(x);
__ delay_cycles (300000);
关闭(x);
中断;



否则,如果(((check>0)||(big=2&x=1)){
关闭(x);
转至输;


大——
{while (big>1);

}while (1);

失败:

__delay_cycles (250000);

开(x);
__delay_cycles (250000);
关闭(x);
__delay_cycles (250000);
//告诉我是谁输了
世卫组织(支票,x);
__ delay_cycles (200000);
世卫组织(支票,x);
showLevel(level,inc);
level=0;//复位电平


void initGpio()
{
P1SELC= 0x00;P2SELC= 0x00;
P1DIR = 0xFF;P2DIR = 0xFF;
P1REN = 0xFF;P2REN = 0xFF;
P1OUT = 0x00;P2OUT = 0x00;

//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
//PM5CTL0 &=~LOCKLPM5;}