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/MSP430FR2433:msp430fr2433

Guru**** 2533870 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/962442/ccs-msp430fr2433-msp430fr2433

器件型号:MSP430FR2433

工具/软件:Code Composer Studio

您好!  

我尝试在 MSP430FR2433中进行中断程序、

但它不起作用。

您能检查我的程序吗?  

我正在上传程序。

 计划:

#pragma vector=port2_vector
_interrupt void Port_2 (void)
{

if (P2IFG 和0x80){
P2IFG &=~0x80;
P3OUT &=~BIT2;
putchar ('a');
Regi_fl = 1;
LPM3_EXIT;
}

#pragma vector=USCI_A1_vector
__interrupt void USCIA1RX_ISR (void)

{
unsigned char 数据;
while (!(UCA1IFG & UCTXIFG)); //使用中断,接收数据,或者中断
数据= UCA1RXBUF;
putchar (data); ////发送数据
REGI_f2 = 1;
LPM3_EXIT;
}


int main (void)
{

WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P2SEL0 |= BIT0 | BIT1; // P2.0:XOUT;P2.1:XI1


_bis_SR_register (SCG0); //禁用 FLL
CSCTL3 |= SELREF_REFOCLK; //将 REFO 设置为 FLL 基准源
CSCTL0 = 0; //清除 DCO 和 MOD 寄存器
CSCTL1 &=~(DCORSEL_7); //首先清除 DCO 频率选择位
CSCTL1 |= DCORSEL_3; //设置 DCO = 8MHz
CSCTL2 = FLLD_0 + 243; // DCODIV = 8MHz
_DELAY_CYCLES (3);
_BIC_SR_register (SCG0); //启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));//轮询直到 FLL 被锁定

CSCTL4 = SELMS_DCOCLKDIV | SELA_XT1CLK;//将默认 XT1CLK (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
//默认 DCODIV 为 MCLK 和 SMCLK 源

PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式



//=========================== LED on ========================================================================
P3DIR |= BIT2; //LED
P1DIR |= BIT3;

//========================= 磁铁========================================================================================
P2DIR &=~BIT7; //p7 -磁体、P2DIR &=~BIT7;
P2IES |= BIT7;
//P2IES &=~BIT7; //将 P1.3配置为从低到高的转换。 //也尝试使用这个
P2IE |= BIT7;
P2IFG &=~BIT7;

UART_1 ();

while (1)
{

_bis_SR_register (LPM3_bits | GIE);

if (regi_fl >0)
{
Regi_fl = 0; ////配对工作正常
P3OUT |= BIT2;

}
if (regi_f2 >0)
{
REGI_f2 = 0;
// P3OUT |= BIT2;
}
}



void UART_1 ()
{
P2SEL0 |= BIT5|BIT6; // P6.5、6 = USCI_A0 RXD/TXD

UCA1CTLW0 |= UCSWRST;
UCA1CTLW0 |= UCSSEL_SMCLK;

UCA1BR0 = 52; // 800000000 / 16/9600
UCA1BR1 = 0x00;
UCA1MCTLW = 0x4900 | UCOS16 | UCBRF_1;

UCA1CTLW0 &=~UCSWRST; //初始化 eUSCI
UCA1IE |= UCRXIE; //启用 USCI_A0 RX 中断
}


void putchar (unsigned char 数据)
{
while (!(UCA1IFG&UCTXIFG));
UCA1TXBUF =数据;
}


请您检查一下。

我只是想知道,为什么中断不起作用?

此致、

Srijit

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

    什么是不起作用的? 您是否能够达到 ISR 中设置的断点?

    SMCLK 不会在 LPM3中运行、因此您可能不会从 UART 看到 Rx 字节。

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

    您好、Bruce、

    感谢您的支持。

    它现在正在工作。

    此致、

    Srijit