主要用到了launchpad msp430g2553的硬件spi与nrf24l01通信,已经用了usci_A0的串口通讯,现在用usci_B0的spi与nrf24l01通信,用io模拟可以通讯返回正确的status值,但是用usci_b0的spi模式,返回的值不正确
- //==============================================================================
- //函数:uint SPI_RW(uint uchar)
- //功能:NRF24L01的SPI写时序
- //******************************************************************************
- char SPI_RW(char data)
- {
- UCB0TXBUF=data;
- while(!(IFG2 & UCB0TXIFG));//发送完成?发送缓存空置1
- //data1=U0RXBUF;
- while(!(IFG2 & UCB0RXIFG));//接收完成?接收缓存有数据置1
- return(UCB0RXBUF);
- }
- //****************************************************************************************************
- //函数:uchar SPI_Read(uchar reg)
- //功能:NRF24L01的SPI时序
- //****************************************************************************************************
- char SPI_Read(char reg)
- {
- char reg_val;
- RF24L01_CSN_0; // CSN low, initialize SPI communication...
- SPI_RW(reg); // Select register to read from..
- reg_val = SPI_RW(0); // ..then read registervalue
- RF24L01_CSN_1; // CSN high, terminate SPI communication
- return(reg_val); // return register value
- }
复制代码这个是usci_b0的初始设置:
- //===========SPI设置=============//
- UCB0CTL1 |= UCSWRST;
- UCB0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC + UCMODE_0; // 3-pin, 8-bit SPI master
- UCB0CTL1 |= UCSSEL_2; // SMCLK
- UCB0BR0 |= 0x02; // /2
- UCB0BR1 = 0; //
-
- UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
复制代码
此帖出自
小平头技术问答
应该先判断是否有正在发送的事件 然后再写数据
一周热门 更多>