|
调试24L01时发现,寄存器在发送配置函数中CE = 1 之前,可以通过串口读出写入的值,
但当 CE = 1 之后,读取到的总是默认值,不知何故,求解
发送模块的配置
void TX_Mode( uchar* BUF )
{
CE = 0 ;
//SPI_RW_Reg( FLUSH_TX, 0 ) ;
SPI_RW_Reg( WRITE_REG + CONFIG, 0x0E ) ; // CRC使能,16位CRC校验,上电
// SPI_RW_Reg( WRITE_REG + EN_AA, 0x3f ) ; // 使能接收通道0自动应答
// SPI_RW_Reg( WRITE_REG + EN_RXADDR, 0x3f ) ; // 使能接收通道0
SPI_RW_Reg( WRITE_REG + EN_AA, 0x01 ) ; // 使能接收通道0自动应答
SPI_RW_Reg( WRITE_REG + EN_RXADDR, 0x01 ) ; // 使能接收通道0
SPI_RW_Reg( WRITE_REG + SETUP_RETR, 0x0a ) ; // 自动重发延时等待250us+86us,自动重发10次
SPI_RW_Reg( WRITE_REG + RF_CH, 40 ) ; // 选择射频通道0x40
SPI_RW_Reg( WRITE_REG + RF_SETUP, 0x07 ) ; // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
SPI_Write_Buf( WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH ) ; // 写入发送地址
SPI_Write_Buf( WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH ) ; // 为了应答接收设备,接收通道0地址和发送地址相同
SPI_Write_Buf( WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH ) ; // 写数据包到TX FIFO
Read_24L01_reg() ; // 正常输出以上写入的数据
UART_Send_Byte( 0x11 ) ;
UART_Send_Byte( SPI_Read( STATUS ) ) ;
UART_Send_Byte( 0x11 ) ;
P2 = 0x55 ;
CE = 1 ;
Read_24L01_reg() ; // 输出都是默认值
UART_Send_Byte( 0x11 ) ;
UART_Send_Byte( SPI_Read( STATUS ) ) ;
UART_Send_Byte( 0x11 ) ;
}
寄存器读取的代码
void Read_24L01_reg( void )
{
UART_Send_Byte( SPI_Read( CONFIG ) ) ;
UART_Send_Byte( SPI_Read( EN_AA ) ) ;
UART_Send_Byte( SPI_Read( EN_RXADDR ) ) ;
UART_Send_Byte( SPI_Read( SETUP_RETR ) ) ;
UART_Send_Byte( SPI_Read( RF_CH ) ) ;
UART_Send_Byte( SPI_Read( RF_SETUP ) ) ;
UART_Send_Byte( SPI_Read( RX_PW_P0 ) ) ;
{
uchar temp_buf[ TX_ADR_WIDTH ] ;
uchar i = 0 ;
for( i = 0 ; i < TX_ADR_WIDTH ; i++ )
temp_buf[ i ] = 0x00 ;
SPI_Read_Buf( READ_REG + TX_ADDR, temp_buf, TX_ADR_WIDTH ) ;
for( i = 0 ; i < TX_ADR_WIDTH ; i++ )
UART_Send_Byte( temp_buf[ i ] ) ;
for( i = 0 ; i < TX_ADR_WIDTH ; i++ )
temp_buf[ i ] = 0x00 ;
for( i = 0 ; i < 12 ; i++ )
UART_Send_Byte( 0x55 ) ;
SPI_Read_Buf( READ_REG + RX_ADDR_P0, temp_buf, TX_ADR_WIDTH ) ;
for( i = 0 ; i < TX_ADR_WIDTH ; i++ )
UART_Send_Byte( temp_buf[ i ] ) ;
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|