|
主要表现为读出来的STATUS和寄存器的数据都是0xFF 不知道哪里的问题 希望大侠给指点指点
CPU是Mega16L 晶振12MHz
#include "global.h"
#include "lcd.h"
//#################################################################################################
//nRF24L01 Interface
//#################################################################################################
#define NRF_DDR DDRA
#define NRF_PORT PORTA
#define NRF_PIN PINA
#define NRF_CE 3 //output
#define NRF_CSN 0 //output
#define NRF_SCK 4 //output
#define NRF_MOSI 1 //output
#define NRF_MISO 5 //input
#define NRF_IRQ 2 //input
//#################################################################################################
//SPI Commands
//#################################################################################################
#define NRF_READ_REG 0x00 //000A AAAA Read command and status registers.
#define NRF_WRITE_REG 0x20 //001A AAAA Write command and status registers.
#define NRF_R_RX_PAYLOAD 0x61 //0110 0001 Read RX-payload: 1~32 bytes.
#define NRF_W_TX_PAYLOAD 0xA0 //1010 0000 Write TX-payload: 1~32 bytes.
#define NRF_FLUSH_TX 0xE1 //1110 0001 Flush TX FIFO, used in TX mode
#define NRF_FLUSH_RX 0xE2 //1110 0010 Flush RX FIFO, used in RX mode
#define NRF_REUSE_TX_PL 0xE3 //1110 0011 Used for a PTX device Reuse last transmitted payload.
#define NRF_ACTIVATE 0x50 //0101 0000
#define NRF_NOP 0xFF //1111 1111
//#################################################################################################
//SPI Registers
//#################################################################################################
#define NRF_CONFIG 0x00
#define NRF_EN_AA 0x01
#define NRF_EN_RXADDR 0x02
#define NRF_SETUP_AW 0x03
#define NRF_SETUP_RETR 0x04
#define NRF_RF_CH 0x05
#define NRF_RF_SETUP 0x06
#define NRF_STATUS 0x07
#define NRF_OBSERVE_TX 0x08
#define NRF_RPD 0x09
#define NRF_RX_ADDR_P0 0x0A
#define NRF_RX_ADDR_P1 0x0B
#define NRF_RX_ADDR_P2 0x0C
#define NRF_RX_ADDR_P3 0x0D
#define NRF_RX_ADDR_P4 0x0E
#define NRF_RX_ADDR_P5 0x0F
#define NRF_TX_ADDR 0x10
#define NRF_RX_PW_P0 0x11
#define NRF_RX_PW_P1 0x12
#define NRF_RX_PW_P2 0x13
#define NRF_RX_PW_P3 0x14
#define NRF_RX_PW_P4 0x15
#define NRF_RX_PW_P5 0x16
#define NRF_FIFO_STATUS 0x17
//#################################################################################################
//Functions
//#################################################################################################
void nrf_init(void);
void nrf_select(void);
void nrf_unselect(void);
unsigned char nrf_spi_cmd(unsigned char cmd);
void nrf_spi_read(unsigned char * data, unsigned char len);
void nrf_spi_write(unsigned char * data, unsigned char len);
//#################################################################################################
//#################################################################################################
void nrf_init(void)
{
NRF_DDR |= ( _BV(NRF_CE)|_BV(NRF_CSN)|_BV(NRF_SCK)|_BV(NRF_MOSI) );
NRF_DDR &= ~( _BV(NRF_MISO)|_BV(NRF_IRQ) );
NRF_PORT |= ( _BV(NRF_MISO)|_BV(NRF_IRQ) );
}
//#################################################################################################
//#################################################################################################
void nrf_select(void)
{
CBIT(NRF_PORT, NRF_CSN); //CSN = 0
delay_us(10);
}
//#################################################################################################
//#################################################################################################
void nrf_unselect(void)
{
SBIT(NRF_PORT, NRF_CSN); //CSN = 1
delay_us(10);
}
//#################################################################################################
//#################################################################################################
unsigned char nrf_spi_cmd(unsigned char cmd)
{
CBIT(NRF_PORT, NRF_SCK); //SCK = 0
delay_us(10);
for (unsigned char i=0; i<8; i++)
{
if ( cmd & 0x80 )
SBIT(NRF_PORT, NRF_MOSI); //MOSI = 1
else
CBIT(NRF_PORT, NRF_MOSI); //MOSI = 0
cmd = cmd<<1;
delay_us(2);
SBIT(NRF_PORT, NRF_SCK); //SCK = 1
delay_us(2);
if ( NRF_PIN & _BV(NRF_MISO) )
cmd |= 0x01;
else
cmd &= 0xFE;
CBIT(NRF_PORT, NRF_SCK); //SCK = 0
delay_us(10);
}
return cmd;
}
//#################################################################################################
//#################################################################################################
void nrf_spi_read(unsigned char * data, unsigned char len)
{
CBIT(NRF_PORT, NRF_SCK); //SCK = 0
delay_us(10);
for (unsigned char i=0; i<len; i++)
{
unsigned char n = 0x00;
for (unsigned char j=0; j<8; j++)
{
n = n<<1;
SBIT(NRF_PORT, NRF_SCK); //SCK = 1
delay_us(2);
if ( NRF_PIN & _BV(NRF_MISO) )
n |= 0x01;
else
n &= 0xFE;
CBIT(NRF_PORT, NRF_SCK); //SCK = 0
delay_us(2);
}
* (data+i) = n;
}
}
//#################################################################################################
//#################################################################################################
void nrf_spi_write(unsigned char * data, unsigned char len)
{
for (unsigned char i=0; i<len; i++)
{
unsigned char n = *(data+i);
for (unsigned char j=0; j<8; j++)
{
if ( n & 0x80 )
SBIT(NRF_PORT, NRF_MOSI); //MOSI = 1
else
CBIT(NRF_PORT, NRF_MOSI); //MOSI = 0
n = n<<1;
SBIT(NRF_PORT, NRF_SCK); //SCK = 1
delay_us(10);
CBIT(NRF_PORT, NRF_SCK); //SCK = 0
delay_us(10);
}
}
}
//#################################################################################################
//主函数
//#################################################################################################
int main(void)
{
lcd_init();
lcd_clear();
nrf_init();
unsigned char status = 0;
unsigned char data[5];
while (1)
{
//-------------------------------------------------------------------------------
nrf_select();
status = nrf_spi_cmd(NRF_READ_REG|NRF_CONFIG);
nrf_spi_read(data, 1);
nrf_unselect();
lcd_view_data(0, 0, &status, 1);
lcd_print_string(4, 0, "CONFIG");
lcd_view_data(0, 1, data, 1);
delay_ms(500);
//-------------------------------------------------------------------------------
}
}
//################################################################################################# |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|