工具/软件:
您好、
我将 MSP430FR2355 控制器用于工程、希望对此使用 SPI 通信。 我尝试了很多,但我无法获得成功。 我的控制器需要充当仅主器件数据传输(无需接收数据)。
我想使用端口引脚 12、13、14 进行 SPI 通信 (UCB1)
这是我的代码,
void spi_init ()
{
P4SEL0 |= BIT5| BIT6 | BIT7;
//时钟极性:非活动状态为高电平
//MSB 在前、8 位、主器件、3 引脚模式、同步
UCB1CTLW0 = UCSWRST;//**将状态机置于复位状态**
UCB1CTLW0 |= UCCKPL | UCMSB | UCSYNC
| UCMST | UCSSEL_SMCLK;// 3 引脚 8 位 SPI 从模式
UCB1BRW = 0x20;
//UCB1MCTLW = 0;
UCB1CTLW0 &&~UCSWRST;//**初始化 USCI 状态机**
UCB1IE |= UCRXIE;//启用 USCI0 RX 中断
}
#if Defined (__TI_COMPILER_VERSION__)|| Defined (__IAR_SYSTEM_ICC__)
pragma vector=USCI_B1_vector
__interrupt void USCI_B1_ISR (void)
#elif defined (__GNUC__)
void _attribute__((interrupt (USCI_B1_vector)) USCI_B1_ISR (void)
#else
错误:不支持编译器!
#endif
{
开关 (__even_in_RANGE (UCB1IV、USCI_SPI_UCTXIFG))
{
case USCI_NONE:break;//矢量 0 — 无中断
case USCI_SPI_UCRXIFG:
UCB1IFG &=~UCRXIFG;
休息;
用例 USCI_SPI_UCTXIFG:
if (spi_byte_ptr < spi_no_of_bytes)
{
UCB1TXBUF = SPI_BUFFER[SPI_BYTE_ptr+];//传输字符
UCB1IE |= UCTXIE;
}
暴露
{
UCB1IE &=~UCTXIE;
UCB1IFG &=~UCTXIFG;
}
休息;
默认值:中断;
}
}
首次执行代码时、中断将在该代码之后工作、中断将不起作用。
在观察示波器时、没有发生数据传输、但 CLK 引脚持续处于高电平状态。
这方面的帮助。
BR、
Yuvaraj 五