SPI通讯在使用过程中时钟极性无法设置,空闲时并非高或者低电平,而是由发送寄存器的最后一位决定的,举例如果是0x08,那么接下来没有进行发送的时间里都是低电平,直到下一次发送数据,如果是0x09相反,持续为高电平。
代码如下
SPI设置
// Setup eUSCI_A0
P2OUT &= ~BIT7; // Clear P1.0
P2DIR |= BIT7; // Set P1.0 to output direction
P2OUT &= ~0x40; //LED2on//ss置低
P1SEL |= BIT2 | BIT3 | BIT6; // Set P1.0,P1.2,P1.3,P1.6 to non-IO
UCA0CTLW0 |= UCSWRST; // **Put state machine in reset**
UCA0CTLW0 |= UCMST | UCSYNC | UCCKPL | UCMSB ; // 3-pin, 8-bit SPI master
// Clock polarity high, MSB
UCA0CTLW0 |= UCSSEL_2; // SMCLK
UCA0BRW_L = 0x01; // 16MHz
UCA0BRW_H = 0; //
UCA0MCTLW = 0; // No modulation
UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
发送在定时器中断中运行
if (!(UCA1IFG & UCTXIFG)) ;
UCA1TXBUF =0x08;
Susan Yang:
请问MSP430F6736是master?能否详细说明下您的软硬件情况?UCCKPH是否有进行设置?
user5310564:
回复 Susan Yang:
工作在mater模式,时钟选择系统时钟,UCCKPH不操作或者按位操作改为0或者1都不行,发送结束后没有办法拉高,会保持上一次发送的最后一位状态,请问我需要在将要发送的数据写入UCA1TXBUF后在进行什么操作吗?