void spi_init()
{
P3SEL |= BIT0 + BIT1 + BIT2 + BIT3; // 功能复用,使用UCB0
P3DIR |=BIT0 + BIT1 + BIT3; //P3.0,1,3为输出
UCB1CTL1 |= UCSWRST; // 复位
UCB1CTL0 |= UCMST + UCSYNC + UCMODE1 + UCCKPH + UCMSB; //上升沿发送数据,MSB,四线主机,同步
UCB1CTL1 |= UCSSEL_2; // SMCLK
UCB1BR0 =2;
UCB1BR1 = 0;
UCB1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCB0IE |= UCRXIE;
}
void DAC_Reg_Write (unsigned char reg_address)//写一个寄存器
{
P3OUT&= ~BIT0; // 拉低STE
while (!(UCB0IFG&UCTXIFG)); // USCI_B0 TX buffer ready?
UCB0TXBUF = reg_address; // 发送需要写入的寄存器地址
while (!(UCB0IFG&UCTXIFG)); // USCI_B0 TX buffer ready?
__delay_cycles(40);
P3OUT|=BIT0; // 写入完成,拉高STE
}
问题是,spi初试化后STE始终是低电平输出,SCLK始终没有始终输出,而且,P3.0片选信号根本就没办法拉高
Susan Yang:
MSP430F5438A的P3.0. P3.4 P3.5 被分配为SPI的 CLK, MOSI, 和MISO
P3SEL |= BIT0 + BIT1 + BIT2 + BIT3;
试一下这一句
P3SEL |=BIT0+BIT4+BIT5;
Junming Du:
回复 Susan Yang:
试过了,那个是UCBA的,四线的话也不行,三线的时候是有SCLK时钟输出的,四线的话就没有了,STE也没有输出
Junming Du:
回复 Susan Yang:
另外,我想问一下。如果用UCA0的话,在UCB1CTL1 &= ~UCSWRST;这条语句之后,P3.0, P3.3, P3.4, P3.5分别应该输出什么?我现在是SCLK输出是高电平,其他引脚均输出低电平。谢谢了!
Junming Du:
沉了吗?需要帮助呀
灰小子:
回复 Junming Du:
Junming Du另外,我想问一下。 如果用UCA0的话,在 UCB1CTL1 &= ~UCSWRST; 这条语句之后,P3.0, P3.3, P3.4, P3.5分别应该输出什么?我现在是SCLK输出是高电平,其他引脚均输出低电平。 谢谢了!
Junming Du:
回复 灰小子:
哦哦,那我用四线SPI的时候,STE引脚不能拉高是怎么回事啊,无论用UCA0还是UCB0都不行