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.

[参考译文] CCS/MSP430F5359:代码卡在延迟周期

Guru**** 2525170 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/750164/ccs-msp430f5359-code-get-stuck-at-delay-cycles

器件型号:MSP430F5359

工具/软件:Code Composer Studio

大家好、我在调光效果的同时尝试使 LED 亮度增加。 因此、我将使用延迟周期。 但代码在 获得中断时停留在_DELAY_CYCLES ()处。 以下是代码:可能是什么问题?

#include "msp430.h"

unsigned int time_period、step、x、y、z;

typedef enum
{
green = BIT2、red = BIT3、blue = BIT4、white = BIT2 | BIT3 | BIT4
}colors_e;

volatile colors_e currColor = RED;

volatile unsigned int SW1、SW3;//计数

器 void PWMCLK (void)
{


TA0CCR0 = 512;// PWM period
= TACTL1;TA0CL1 = TCCTL1 //绿色 LED
TA0CCTL2 = OUTMOD_7 | CLLD_1;//红色 LED
TA0CCTL3 = OUTMOD_7 | CLLD_1;//蓝色 LED
TA0CTL = tassel_2 | MC_1 | TACLR;// ACLK、向上计数模式、清除

}

void LED (Brightness_0




=无符号时间);按钮0 =无符号色带0;
TA0CCR1 = 0;
TA0CCR2 = 0;
TA0CCR3 = 0;
P1SEL &=~(BIT2 | BIT3 | BIT4);
}
如果(BrightnessButton = 1)
{
Time_Period = 128;
step = 1;
}
否则(BrightnessButton = 2)
{
Time_Period = 256;
step = 2;
}
否则(BrightnessButton = 3)
{
Time_Period = 384;
Step = 3;
}
否则、如果(BrightnessButton = 4)
{
Time_Period = 512;
step = 5;
}

if (LEDcolorchange = 1)
{
currColor =(colors_e)(P1SEL & white);
switch (currColor)
{
case blue:

for (y = 0;y < time_period;y = y + step)
{
TA0CCR2 = y = y;
P2000
cycles;delay

}(pSEL = y)

对于(y = time_period;y > 0;y = y - step)
{
TA0CCR2 = y;
__delay_cycles (2000);
}

break;
case RED:

对于(z = 0;z < time_period;z = z + step)

{
TA0CCR3 = z;
P1SEL = blue;
__delay_cycles (2000);
z

= 0;z = time period;z = 0;z = z = 0;z = time;z = time (z = 0); z = z - step)
{
TA0CCR3 = z;
__DELAY_CYCLES (2000);
}

break;
默认值:
P1SEL =蓝色;
break;
}

否则(LEDcolorchange = 2)
{

currColor =(colors_e)(P1SEL 和白色);
switch (currColor)
{
case blue:

for (x = 0;x < time_period; x = x + STEP)
{
TA0CCR1 = x;
P1SEL =绿色;
__DELAY_CYLES (2000);
}

for (x = TIME_PERIOD;x > 0;x = x - STEP)
{
TA0CCR1 = x;
__DELAY_CYLES (2000);
}

break;
case 绿色:

for (z = 0;z < TIME_PERIOD; z = z + step)

{
TA0CCR3 = z;
P1SEL =蓝色;
__DELAY_CYCLES (2000);
}

for (z = TIME_PERIOD;z > 0;z = z - STEP)
{
TA0CCR3 = z;
__DELAY_CYCLES (2000);
}

break;
默认值:
P1SEL =蓝色;
break;
}
}
否则、如果(LEDcolorchange == 3)
{
currColor =(colors_e)(P1SEL 和白色);
开关(currColor)
{
case RED:

for (x = 0;x < time_period;x = x + step)
{
TA0CCR1 = x;
P1SEL = green;
__delay_cycles (2000);
}

for (x = 100 > time_period;}则为(x = x = x + time_period;); x = x - STEP)
{
TA0CCR1 = x;
__DELAY_CYCLES (2000);
}

break;
case green:

for (y = 0;y < TIME_PERIOD;y = y + STEP)
{
TA0CCR2 = y;
P1SEL = RED;
__DELAY_CYLES (2000);
}

for (y = TIME_PERIOD;y > 0; y = y - step)
{
TA0CCR2 = y;
__DELAY_CYCLES (2000);
}

break;
默认值:
P1SEL =红色;
break;
}

否则(LEDcolorchange = 4)
{
currColor =(colors_e)(P1SEL 和白色);
switch (currColor)
{
case RED:

for (x = 0;x <_time_period; x = x + STEP)
{
TA0CCR1 = x;
P1SEL =绿色;
__DELAY_CYLES (2000);
}

for (x = TIME_PERIOD;x > 0;x = x - STEP)
{
TA0CCR1 = x;
__DELAY_CYLES (2000);
}

break;
case 蓝色:

for (y = 0;y < TIME_PERIOD; y = y + STEP)
{
TA0CCR2 = y;
P1SEL =红色;
__DELAY_CYLES (2000);
}

for (y = TIME_PERIOD;y > 0;y = y - STEP)
{
TA0CCR2 = y;
__DELAY_CYLES (2000);
}

break;
case 绿色:

for (z = 0;z < TIME_PERIOD; z = z + STEP)
{
TA0CCR3 = z;
P1SEL =蓝色;
__DELAY_CYCLLES (2000);
}

for (z = TIME_PERIOD;z > 0;z = z - STEP)
{
TA0CCR3 = z;
__DELAY_CYCLKS(2000);
}

break;
默认值:
P1SEL =蓝色;
break;
}



}}}}TA1CCTL0



= void (CC0);{TACC0 = void (void) // CCR0中断使能
TA1CCR0 = 50000;
TA1CTL = tassel_1 | MC_1;// SMCLK、countmode、clear TAR

// bis_SR_register (LPM0_bits | GIE);// Enter LPM0、启用中断
//_ no_operation ();clear TAR /_bis_SR =

0 | WDTTRD = 0 | WITTDIO = 0 | WITL 0 = 0 = 0 | WITL 0 = 0 = 0 = 0 = 0;// WIT3 | WDT3 | WITL 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0



// P1.2、P1.3和 P1.4输出
P1SEL &=~(BIT2 | BIT3 | BIT4);// P1.2和 P1.3选项选择

P3REN |=(BIT1 + BIT2 + BIT3);//在按钮引脚
P3OUT |=(BIT1 + BIT2 + BIT2)上启用电阻器-拉拔器;//在按钮引脚 P3OUT |=(BIT1 + BIT2 + BIT2) //将"1"写入 portpin,将电阻器拉上
P3IES|=(BIT1 + BIT2 + BIT3);//按下按钮时触发::选择一个...
P3IFG &=~(BIT1 + BIT2 + BIT3);//释放按钮时的触发器::...或选择其他
P3IE |=(BIT1 + BIT2 + BIT3);//启用选择器掩码,以便在相关引脚


PWMCLK ()上生成中断;
INTERRUPT_CLK ()(SW1






);//启用中断(全局中断);(SW1);//启用中断(SW1)

}

#pragma vector=PORT3_vector
__interrupt
void Port_3 (void)
{
switch (_even_in_range (P3IV、0x10))
{
case 0x00://None
break;
case 0x02://Pin0
break;
case 0x04:
//bri
{
if (SW1 < 4)
}{
SW1++;

}案例0x08





:/BIT1 ~

:}

= 0x08;case = 0xBIF1;case = 0x08;case = 0xBIF1;case = 0xBIF1;case = 0x00;case = 0xBIF1;



case = 0xBIF1;case = 0x00;case = 0xBIF1
//ALTcolor
{

if (SW3 < 4)
{
SW3++;

}
else
{
SW3 = 1;
}

P3IFG &=~BIT3;
}

break;
case 0x0A:
//pin4
break;
case 0x0C:
//pin5
break;
case 0x0E:
//pin6
break;
case 0x10:
//pin7
break
;}
}

#pragma vector=Timer1_A0_vector
__interrupt
void Timer1_A0_ISR (void)

{

if (currColor == blue)
{
currColor =green;
}
否则(currColor =green)
{
currColor =RED;
}
否则(currColor =RED)
{
currColor =blue;
}






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

    在论坛上发布代码时、请使用标记的代码格式工具 按钮。 这使得代码易于阅读、并可帮助您在论坛上更快地获得支持。 我修改了您之前的帖子、以反映该工具的使用情况。

    您能描述您看到的问题/行为吗? 它是否停留在代码中的相同延迟或点? 您认为导致问题的是哪些中断?

    我建议从 TI Resource Explorer 中的 msp432F665x_ta0_02.c 等计时器 A0示例开始、并添加不起作用的软件、然后查看您是否可以找到问题。

    此致、

    J.D.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)您的程序几乎所有时间都花费在_delay_cycles 中、因此、如果您暂停它、您几乎肯定会在其中一个调用中发现自己。

    2)对于无符号变量,“>0”与“!=0”相同。 尤其是(无符号)-1 > 0。
    >表示(y = time_period;y > 0;y = y - step)
    如果 STEP 为、例如=5、并且 TIME_PERIOD 不是5的倍数、则该降压转换器将过冲0并变为"负"、这意味着无符号转换为"大电平(接近0xFFFF)"。 某些组合、例如 time_period 一个奇数和 step=2、将永远循环。 这样做可能就足够了:
    >表示(y = time_period;y >= step;y = y - step)
    但这并不总是完全相同的。

    即使修复了此问题、您仍应预期效果(1)。
    --------------------
    未经请求:这里有相当多几乎相同的代码序列、我想您会发现这些序列非常不实用。 我建议使用一些抽象、例如"void count_down (unsigned period、unsigned step)"或一些类似的抽象。