微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于CC541的SPI疑问,请TI员工指教。

关于CC541的SPI疑问,请TI员工指教。

时间:10-02 整理:3721RD 点击:

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

}

CC2541发送接收的CLK是通过发送0xFF来实现的。

降低sclk频率,spi工作模式,另外数据和命令参数是8位?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top