CC2541的SPI为主模式,P20为CS脚,P15、P16、P17为CLK、SI、SO脚,现在CC2541可以发送数据,也可以发送接收的CLK。
但就是接收不了数据,if(UxCSR & CSR_RX_BYTE)就是进不了。示波器看到有数据到SO脚。
#pragma vector = URX1_VECTOR__interrupt void SPI_Rx_ISR(void){
UTX1IF = 0;
if(UxCSR & CSR_RX_BYTE)
{
GetRxFlag = 1;
GetRxData = UxDBUF;
UxCSR &= 0xFB;
}
else if(UxCSR & CSR_TX_BYTE)
{
UxCSR &= 0xFD;
}
}
//引脚 usart1 spi —— alt.2#define SPI_CS P2_0//P1_4#define SPI_CLK P1_5#define SPI_MOSI P1_6#define SPI_MISO P1_7//寄存器#define UxCSR U1CSR#define UxUCR U1UCR#define UxDBUF U1DBUF#define UxBAUD U1BAUD#define UxGCR U1GCR#define PxSEL P1SEL#define HAL_UART_PERCFG_BIT 0x02 // USART1 on P1, Alt-2; so set this bit.#define HAL_UART_PRIPO 0x40 // USART1 priority over UART0.#define HAL_UART_Px_SEL_S 0xF0 // Peripheral I/O Select for Slave: SO/SI/CLK/CSn.#define HAL_UART_Px_SEL_M 0xE0 // Peripheral I/O Select for Master: MI/MO/CLK.// UxCSR – USART Control and Status Register.#define CSR_MODE 0x80#define CSR_RE 0x40#define CSR_SLAVE 0x20#define CSR_FE 0x10#define CSR_ERR 0x08#define CSR_RX_BYTE 0x04#define CSR_TX_BYTE 0x02#define CSR_ACTIVE 0x01// UxUCR – USART UART Control Register.#define UCR_FLUSH 0x80#define UCR_FLOW 0x40#define UCR_D9 0x20#define UCR_BIT9 0x10#define UCR_PARITY 0x08#define UCR_SPB 0x04#define UCR_STOP 0x02#define UCR_START 0x01
//****************************************************************************//名 称: SPI_Init()//功 能: 无//入口参数: 无//出口参数: 无//****************************************************************************void SPI_Init(void){ volatile uint8 receive = 0; PERCFG |= HAL_UART_PERCFG_BIT; // Set UART1 I/O to Alt. 2 location on P1.
//xm
UxBAUD = 216;
UxGCR |= 0x0B;
PxSEL |= HAL_UART_Px_SEL_M; // SPI-Slave peripheral select.
UxCSR = 0;//CSR_SLAVE; // Mode is SPI-Slave Mode. UxUCR = UCR_FLUSH; // Flush it. UxGCR |= (1 << 5); // Set bit order to MSB.UxGCR |= (1 << 6); // CPHA UxGCR &= ~(1 << 7); // CPHA TCON &= ~(1 << 7); //清空usart1接收中断标志位 IEN0 |= (1 << 3); //使能usart1接收中断 IP0 &= ~(1 << 3); //设置spi的中断组为等级2 IP1 |= (1 << 3);
UxCSR |= CSR_RE; //使能 URX1IE = 1;
UxCSR &= 0xFB;
UxDBUF = 0xff;
receive = UxDBUF; //读寄存器,防止里面有残留数据 P2DIR |= 0x01;//cs
P1DIR |= 0x20;//clk
P1DIR |= 0x40;//0xBF;//SI
P1DIR &= 0x7F;//|= 0x80;//SO
}
ming lu3:
CC2541发送接收的CLK是通过发送0xFF来实现的。
da qin zheng sheng:
降低sclk频率,spi工作模式,另外数据和命令参数是8位?