主题中讨论的其他器件: MSP-EXP430FR2433
您好!
我不熟悉 MSP430、并尝试确定如何将 MSP430FR2433设置为从器件(处于回路模式以验证操作)。 我正在使用 MSP-EXP430FR2433开发套件。
使用 SLAC700e 的示例代码(msp430fr243x_euscia0_SPI_10.c)、环回失败。
SLAC700e 的示例代码:
#include <msp430.h>
int main(void){ WDTCTL = WDTPW|WDTHOLD; // Stop watchdog timer
P1SEL0 |= BIT4 | BIT5 | BIT6; // set 3-SPI pin as second function
UCA0CTLW0 |= UCSWRST; // **Put state machine in reset** UCA0CTLW0 |= UCSYNC|UCCKPL|UCMSB; // 3-pin, 8-bit SPI slave // Clock polarity high, MSB UCA0CTLW0 |= UCSSEL__SMCLK; // SMCLK UCA0BR0 = 0x01; // /1, fBitClock = fBRCLK/UCBRx UCA0BR1 = 0; // UCA0MCTLW = 0; // No modulation UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine** UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode // to activate previously configured port settings
__bis_SR_register(LPM0_bits | GIE); // Enter LPM0, enable interrupts}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)#pragma vector=USCI_A0_VECTOR__interrupt void USCI_A0_ISR(void)#elif defined(__GNUC__)void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)#else#error Compiler not supported!#endif{ while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready? UCA0TXBUF = UCA0RXBUF; // Echo received data}
主器件输出:
00
00
00
00
但在轮询模式下、从器件工作正常:
#include <msp430.h>unsigned char RXData0 = 0;unsigned char RXData1 = 0;unsigned char TXData = 0xAA;unsigned char counter = 0;
int main(void){ WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1SEL0 |= BIT4 | BIT5 | BIT6; // set 3-SPI pin as second function
UCA0CTLW0 |= UCSWRST; // **Put state machine in reset** UCA0CTLW0 |= UCSYNC | UCCKPL | UCMSB; // 3-pin, 8-bit SPI slave // Clock polarity high, MSB UCA0CTLW0 |= UCSSEL__SMCLK; // SMCLK UCA0BR0 = 0x01; // /1, fBitClock = fBRCLK/UCBRx UCA0BR1 = 0; // UCA0MCTLW = 0; // No modulation UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine** UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode // to activate previously configured port settings
// __bis_SR_register(LPM0_bits | GIE); // Enter LPM0, enable interrupts while (1) { if (UCA0IFG & UCRXIFG) { if (counter == 0) { RXData0 = UCA0RXBUF; while (!(UCA0IFG & UCTXIFG)) ; UCA0TXBUF = RXData0; counter = 1; } else { RXData1 = UCA0RXBUF; while (!(UCA0IFG & UCTXIFG)) ; UCA0TXBUF = RXData1; counter = 0; } } }
}
主器件输出:
00
11 AA
12 AB
13交流
14广告
15 AE
16 AF
17B0
18 B1
19 B2.
我知道中断标志已启用。 我不知道为什么从未调用 ISR。 如果有任何建议、我们都会很感激!
谢谢
高拉夫