Other Parts Discussed in Thread: CC2530
硬件SPI的管脚如下:
#define HAL_BOARD_IO_SPI_MISO_PORT 1
#define HAL_BOARD_IO_SPI_MISO_PIN 7
#define HAL_BOARD_IO_SPI_MOSI_PORT 1
#define HAL_BOARD_IO_SPI_MOSI_PIN 6
#define HAL_BOARD_IO_SPI_CLK_PORT 1
#define HAL_BOARD_IO_SPI_CLK_PIN 5
#define HAL_BOARD_IO_EM_CS_PORT 1
#define HAL_BOARD_IO_EM_CS_PIN 4
硬件SPI初始化代码如下:
void halLcdSpiInit(void)
{
register uint8 baud_exponent;
register uint8 baud_mantissa;
// Set SPI on UART 1 alternative 2
PERCFG |= 0x02;
// Use SPI on USART 1 alternative 2
MCU_IO_PERIPHERAL(HAL_BOARD_IO_SPI_MISO_PORT, HAL_BOARD_IO_SPI_MISO_PIN);
MCU_IO_PERIPHERAL(HAL_BOARD_IO_SPI_MOSI_PORT, HAL_BOARD_IO_SPI_MOSI_PIN);
MCU_IO_PERIPHERAL(HAL_BOARD_IO_SPI_CLK_PORT, HAL_BOARD_IO_SPI_CLK_PIN);
MCU_IO_PERIPHERAL(HAL_BOARD_IO_EM_CS_PORT, HAL_BOARD_IO_EM_CS_PIN);
baud_exponent = 17; //4M的速率
baud_mantissa = 0;
// Configure peripheral
U1UCR = 0x80; // Flush and goto IDLE state. 8-N-1.
U1GCR = SPI_TRANSFER_MSB_FIRST | SPI_CLOCK_PHA_0 | SPI_CLOCK_POL_LO | baud_exponent;
U1BAUD = baud_mantissa;
U1CSR = 0x40; // SPI mode, master.
}
硬件SPI的宏定义如下:
#define LCD_SPI_BEGIN() MCU_IO_SET_LOW(HAL_BOARD_IO_EM_CS_PORT, HAL_BOARD_IO_EM_CS_PIN)
#define LCD_SPI_TX(x) st( U1CSR &= ~0x02; U1DBUF = x; )
#define LCD_SPI_RX() U1DBUF
#define LCD_SPI_WAIT_RXRDY() st( while((U1CSR & 0x02) != 0x02); )
写命令的代码如下:
/*------------------------------------------------------------------------------
写命令
Data:命令
------------------------------------------------------------------------------*/
void LCD_WriteCommand(uint8 Data)
{
LCD_SPI_BEGIN(); //片选CS为低
LCD_SPI_TX(Data);
LCD_SPI_WAIT_RXRDY();
LCD_SPI_END(); //片选CS为高
}
写数据的代码如下:
/*------------------------------------------------------------------------------
写1个字节数据
Data:1个字节数据
------------------------------------------------------------------------------*/
void LCD_WriteData(uint8 Data)
{
LCD_SPI_BEGIN(); //片选CS为低
LCD_SPI_TX(Data); //发送数据
LCD_SPI_WAIT_RXRDY();
LCD_SPI_END(); //片选CS为高
}
读一个字节的代码如下:
/*------------------------------------------------------------------------------
读1个字节数据
Data:1个字节数据
------------------------------------------------------------------------------*/
uint8 LCD_ReadData()
{
uint8 Data;
LCD_SPI_BEGIN(); //片选CS为低
LCD_SPI_TX(0xff); //发送一个无效的数据
LCD_SPI_WAIT_RXRDY();
Data=LCD_SPI_RX(); //接收U1DBUF里的数据
LCD_SPI_END(); //片选CS为高
return Data;
}
好像就是读取数据不行,cc2530在硬件SPI主机模式下怎么样才能接收到从机发过来的数据??要怎么解决,请TI的工程师还有论坛里的高手们帮我解决一下,多谢!多谢!