主题中讨论的其他器件: MSP430FR6047
我尝试 使用 SPI 接口将 EVM430-FR6047连接到 Adafruit RFM9x、但我找不到任何库/代码示例。 我能够使用 AdafruIT/RadioHead (github.com/.../RadioHead)的 Arduino 库。 请传递您可能拥有的任何信息。
同时、我将尝试使用 TI 提供的代码示例之一 :msp430fr60x7_euscia0_spi_09、以确保了解 EVM430-FR6047上的 SPI 接口。 为了进行测试、我使用三线制 SPI 连接将两个 EVM430-FR6047连接在一起:
电路板1: 电路板#2:
P7.0 SPI_MOSI -> P7.1 SPI_MISO
P7.1 SPI_MISO --> P7.0 SPI_MOSI
P7.2 SPI_SCLK --> P7.1 SPI_SCLK
我肯定不是这方面的专家、但我的理解是、我应该能够将数据从一个板发送到另一个板、并使用调试器来查看结果。 该程序编译并运行、并且针对 TX 和 RX 信号触发 ISR、但接收到的数据(RXData)始终为0。
以下是代码:
#include
volatile unsigned char RXData = 0;
volatile unsigned char TXData;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//配置 GPIO
P7SEL1 &=~BIT0 |~BIT2 |~BIT3;// USCI_A1 SCLK、MOSI、MISO 引脚
P7SEL0 |= BIT0 | BIT2 | BIT3;
PJSEL0 |= BIT4 | BIT5;//用于 XT1
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
// XT1设置
CSCTL0_H = CSKKEY_H;//解锁 CS 寄存器
CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;//设置所有分频器
CSCTL4 &=~LFXTOFF;
操作
{
CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志
SFRIFG1 &=~OFIFG;
} while (SFRIFG1 & OFIFG);//测试振荡器故障标志
CSCTL0_H = 0;//锁定 CS 寄存器
//为 SPI 操作配置 USCI_A0
UCA1CTLW0 = UCSWRST;//**将状态机置于复位状态**
UCA1CTLW0 |= UCMST | UCSYNC | UCCKPL | UCMSB;// 3引脚、8位 SPI 主器件
//时钟极性高,MSB
UCA1CTLW0 |= UCSSEL_ACLK;// ACLK
UCA1BRW = 0x02;///2
UCA1MCTLW = 0;//无调制
UCA1CTLW0 &=~UCSWRST;//**初始化 USCI 状态机**
UCA1IE |= UCRXIE;//启用 USCI_A0 RX 中断
TXData = 0x1;//保留 TX 数据
while (1)
{
UCA1IE |= UCTXIE;
_bis_SR_register (LPM0_bits | GIE);// CPU 关闭、启用中断
__DELAY_CYCLES (2000);//下次传输前延迟
TXData++;//递增发送数据
}
}
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=EUSCI_A1_vector
_interrupt void USCI_A0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(EUSCI_A1_vector)) USCI_A1_ISR (void)
其他
错误编译器不受支持!
#endif
{
开关(__evo_in_range (UCA1IV、USCI_SPI_UCTXIFG))
{
USCI_NONE 案例:中断;
USCI_SPI_UCRXIFG 案例:
RXData = UCA1RXBUF;
UCA1IFG &=~UCRXIFG;
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//唤醒以设置下一个 TX
中断;
USCI_SPI_UCTXIFG 案例:
UCA1TXBUF = TXData;//发送字符
UCA1IE &=~UCTXIE;
中断;
默认值:break;
}
}
我对该程序的原始版本进行了一些更改、因为它似乎是针对其他 EVM 板编写的。 原始代码将 P1.0、P1.2和 P1.3用于 SPI_SCLK、 SPI_MOSI、 SPI_MISO (按该顺序)。 EVM430-FR6047用户指南显示了这些连接的 P7.2、P7.0和 P7.1。 另一个修改是替换#include 具有#include 。
我实际上尝试了几种组合:
- 使用 P1.0、P1.2和 P1.3的原始代码
- 使用原始#include
使用 UART 接口的类似测试与采样 msp430fr60x7_euscia0_UART_03.c 完美搭配、因此我不理解 SPI 接口为什么不工作。 下面是物理设置:
谢谢!

