void Init_SPI(void) {
// SCS - P2.0
// SCLK - P1.5
// MISO - P1.6
// MOSI - P1.7
P1DIR |= BIT5 + BIT6 + BIT7;
P1SEL |= BIT5 + BIT6 + BIT7;
P1SEL2 |= BIT5 + BIT6 + BIT7;
P2DIR |= BIT0;
P2OUT |= BIT0;
// USCI B0 SPI
UCB0CTL1 = UCSWRST; //USCI 逻辑保持在复位状态
UCB0CTL1 |= UCSSEL_2; // source USCI clock from SMCLK
UCB0CTL0 = SPI_MODE_0 | UCMSB | UCMST | UCSYNC ; // SPI MODE 0 ,MSB优先, 3-pin,8-bit SPI master。注:#define SPI_MODE_0 (UCCKPH)
UCB0CTL1 &= ~UCSWRST; // USCI 复位操作释放
}
void MSP430_SPI_write_byte(u_char byte)
{
// USCI_B0 SPI Mode
while (!(UC0IFG & UCB0TXIFG)) //UC0IFG就是IFG2
; // wait for previous tx to complete
UCB0TXBUF = byte; // setting TXBUF clears the TXIFG flag
}
uint8 MSP430_SPI_read_byte(void) //uint8 在其他地方已定义
{
while (!(UC0IFG & UCB0RXIFG)) //UC0IFG就是IFG2
; // wait for an rx character?
return UCB0RXBUF; // reading clears RXIFG flag
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
初始化或重新配置USCI 模块
建议的USCI 初始化/重新配置的过程为:
1. 置位UCSWRST (BIS.B #UCSWRST,&UCxCTL1)
2. 使用UCSWRST=1,初始化所有的通用串行通信接口寄存器(包括UCxCTL1)
3. 配置端口
4. 通过软件清零UCSWRST 位(BIC.B #UCSWRST,&UCxCTL1)
5. 通过UCxRXIE 和/或UCxTXIE 使能中断(可选) //我这里没用中断
然后,通过查询法,等待UCB0RXIFG(或UCB0TXIFG)置位,再读出UCB0RXBUF的值(或给 UCB0TXBUF赋值),从而实现接收数据和发送数据
不知对不对?
一周热门 更多>