Использую библиотеку с сайта нордика. Все регистры пишу согласно примерам. Все пишется и читается нормально( смотрю отладчиком ).
В режиме приема на ноге IEREF=1.2V на VDD_PA=0V. В режиме передачи и там и там по нулям.Соответственно ничего не принимает и не передает. Модули самодельные по мотивам референс дизайна. Может какие то тонкости есть...?
вот код
Код
#include <p24Fxxxx.h>
#include "ChipInit.h"
#include "Hal_nrf.h"
#include "Hal_nrf_hw.h"
#include "Radio.h"
#define _trapISR __attribute__((interrupt,no_auto_psv))
//#define __ICD2RAM
/** The address of the radio. Parameter to the radio init */
static uint8_t reg[24],address[HAL_NRF_AW_5BYTES] = {0x22,0x33,0x44,0x55,0x01};
static uint8_t pload[RF_PAYLOAD_LENGTH];
volatile uint8_t tmp;
int main ( void )
{
ChipInit();
hal_spi_init();
_LATA1=1;
CE_LOW();
CSN_HIGH();
DelayMs(100);
// Start as PRX in Enhanced
// ShockBurst
//hal_nrf_write_reg(RF_SETUP,7);
hal_nrf_set_datarate(HAL_NRF_1MBPS);
hal_nrf_set_output_power(HAL_NRF_0DBM);
hal_nrf_close_pipe(HAL_NRF_ALL); // First close all radio pipes
// Pipe 0 and 1 open by default
hal_nrf_open_pipe(HAL_NRF_PIPE0, true); // Then open pipe0, w/autoack
// Changed from sb/radio_sb.c
hal_nrf_set_crc_mode(HAL_NRF_CRC_16BIT); // Operates in 16bits CRC mode
hal_nrf_set_auto_retr(RF_RETRANSMITS, RF_RETRANS_DELAY);
// Enables auto retransmit.
// 3 retrans with 250ms delay
// Changed from sb/radio_sb.c
hal_nrf_set_address_width(HAL_NRF_AW_5BYTES); // 5 bytes address width
hal_nrf_set_address(HAL_NRF_TX, &address[0]); // Set device's addresses
hal_nrf_set_address(HAL_NRF_PIPE0, &address[0]); // Sets recieving address on
// pipe0
//****************************************************************************
hal_nrf_set_operation_mode(HAL_NRF_PRX); // Enter RX mode
hal_nrf_set_rx_pload_width((uint8_t)HAL_NRF_PIPE0, RF_PAYLOAD_LENGTH);
// // Pipe0 expect
// // PAYLOAD_LENGTH byte payload
// // PAYLOAD_LENGTH in radio.h
//****************************************************************************
// hal_nrf_set_operation_mode(HAL_NRF_PTX); // Enter TX mode
//****************************************************************************
//hal_nrf_enable_dynamic_pl(); // Enables dynamic payload
//hal_nrf_setup_dyn_pl(255); // Sets up dynamic payload on
// all data pipes.
hal_nrf_get_clear_irq_flags ();
hal_nrf_set_rf_channel(RF_CHANNEL); // Operating on static channel
// Defined in radio.h.
// Frequenzy =
// 2400 + RF_CHANNEL
hal_nrf_set_power_mode(HAL_NRF_PWR_UP); // Power up device
DelayMs(5);
// читаем регистры для проверки
// reg[0]=hal_nrf_read_reg(CONFIG);
// Nop();
// reg[1]=hal_nrf_read_reg(EN_AA);
// Nop();
// reg[2]=hal_nrf_read_reg(EN_RXADDR);
// Nop();
// reg[3]=hal_nrf_read_reg(SETUP_AW);
// Nop();
// reg[4]=hal_nrf_read_reg(SETUP_RETR);
// Nop();
// reg[5]=hal_nrf_read_reg(RF_CH);
// Nop();
// reg[6]=hal_nrf_read_reg(RF_SETUP);
// Nop();
// reg[7]=hal_nrf_read_reg(OBSERVE_TX);
// Nop();
// reg[8]=hal_nrf_read_reg(CD);
// Nop();
// reg[9]=hal_nrf_read_reg(RX_PW_P0);
// Nop();
// reg[10]=hal_nrf_read_reg(FIFO_STATUS);
// Nop();
// hal_nrf_get_address(HAL_NRF_PIPE0,®[11]);
// Nop();
// hal_nrf_get_address(HAL_NRF_TX,®[16]);
// Nop();
//
CE_HIGH(); // Set Chip Enable (CE) pin high to enable reciever
while(1)
{
Nop();
ClrWdt();
DelayMs(1);
//DelayMs(1000);
//hal_nrf_write_tx_pload(pload, RF_PAYLOAD_LENGTH); // load message into radio
//CE_PULSE();
if(_LATA1==1)_LATA1=0;
else _LATA1=1;
}
return 0;
}
__attribute__(( auto_psv)) void _ISR _INT0Interrupt (void)
{
IFS0bits.INT0IF = 0;
switch(hal_nrf_get_clear_irq_flags ())
{
case (1<<HAL_NRF_MAX_RT): // Max retries reached
hal_nrf_flush_tx(); // flush tx fifo, avoid fifo jam
// radio_set_status (RF_MAX_RT);
break;
case (1<<HAL_NRF_TX_DS): // Packet sent
// radio_set_status (RF_TX_DS);
break;
case (1<<HAL_NRF_RX_DR): // Packet received
while (!hal_nrf_rx_fifo_empty ())
{
hal_nrf_read_rx_pload(pload);
}
// radio_set_status (RF_RX_DR);
break;
case ((1<<HAL_NRF_RX_DR)|(1<<HAL_NRF_TX_DS)): // Ack payload recieved
while (!hal_nrf_rx_fifo_empty ())
{
hal_nrf_read_rx_pload(pload);
}
// radio_set_status (RF_TX_AP);
break;
default:
break;
}
}
З.Ы. Перепаивал чипы на новые (из другой партии), но тот же эффект.