工具/软件:Code Composer Studio
您好!
我尝试通过 SPI 通信集成 msp430f5438a 和 Winbond SPI 闪存 IC。 I m 在从主器件(msp430f5438a)向从器件选择发送数据时遇到问题。 我想我在从器件选择启用和禁用方面出错了。 如果我在逻辑分析仪从器件中看到信号、则选择引脚与 MOSI 和时钟信号不同步。 如果我在逻辑分析仪设置中禁用"Enable"选项、则给定的数据信号会完美地显示在分析仪上。
我随附了我的代码、请在出错的地方帮助我。 我还连接了我的逻辑分析仪 o/p
#include "msp430x54xA.h"
unsigned char MST_Data、SLV_Data;
void main (void)
{
WDTCTL = WDTPW+WDTHOLD;//停止看门狗计时器
P1OUT |= 0x02;//为 LED 设置 P1.0、1
P3OUT |= 0x01;//从器件选择 p3.0
P3DIR |= 0x01;
P1DIR |= 0x03;//将 P1.0、1设置为输出方向
P3SEL |= 0x0E;// P3.5、4、0选项选择
UCB0CTL1 |= UCSWRST;//将状态机复位
/* 4引脚 SPI、主模式、MSB 优先、同步通信、时钟极性高*/
UCB0CTL0 |= UCMST+UCSYNC+UCMSB+UCCKPL+UCMODE_1;
UCB0CTL1 |= UCSSEL_2;// SMCLK
UCB0BR0 = 0x02;// 2.
UCB0BR1 = 0;
// UCB0MCTL = 0;//无调制
UCB0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
UCB0IE |= UCRXIE;//启用 USCI_A0 RX 中断
_bis_SR_register (GIE);
MST_Data = 0x02;//初始化数据值
SLV_Data = 0x00;
while (1)
{
P3OUT |= BIT0;//从器件选择-高电平
UCB0TXBUF = MST_Data;//发送第一个字符
while (!(UCA0IFG&UCTXIFG));
P3OUT &=~BIT0;//从器件选择-低电平
_DELAY_CYCLES (5);
}
}
#pragma vector=USCI_B0_vector
_interrupt void USCI_B0_ISR (void)
{
switch (__evo_in_range (UCB0IV、4))
{
情况0:中断;//向量0 -无中断
情况2://向量2 - RXIFG
// while (!(UCB0IFG&UCTXIFG));// USCI_A0 TX 缓冲区准备就绪?
中断;
情况4:中断;//向量4 - TXIFG
默认值:break;
}
}


