Hi,
I used the nrf51822 as the spi master,it could send out the data, but it didn't receive the slave data.Did I miss somthing?
static volatile bool m_transfer_completed = true;
static void spi_master_0_event_handler(spi_master_evt_t spi_master_evt)
{
switch (spi_master_evt.evt_type)
{
case SPI_MASTER_EVT_TRANSFER_COMPLETED:
m_transfer_completed = true;
break;
default:
// No implementation needed.
break;
}
}
static void spi_master_init( )
{
uint32_t sm_err_code;
// Configure SPI master.
spi_master_config_t spi_config = SPI_MASTER_INIT_DEFAULT;
spi_config.SPI_Pin_SCK = GT_CLK;
spi_config.SPI_Pin_MISO = GT_DO;
spi_config.SPI_Pin_MOSI = GT_DI;
spi_config.SPI_Pin_SS = GT_CS;
spi_config.SPI_CONFIG_ORDER = SPI_CONFIG_ORDER_MsbFirst;
sm_err_code = spi_master_open(SPI_MASTER_0, &spi_config);
APP_ERROR_CHECK(sm_err_code);
// Register event handler for SPI master.
spi_master_evt_handler_reg(SPI_MASTER_0, spi_master_0_event_handler);
}
void r_dat_bat(unsigned long TAB_addr,unsigned int Num,unsigned char *p_arr)
{
uint8_t tabAddr[4];
uint16_t spiTimeOut=65535;
uint32_t gt_err_code;
TAB_addr |= 0x03000000;
tabAddr[0] = (uint8_t)( TAB_addr>>24 );
tabAddr[1] = (uint8_t)( TAB_addr>>16 );
tabAddr[2] = (uint8_t)( TAB_addr>>8 );
tabAddr[3] = (uint8_t)( TAB_addr&0x000000FF );
spi_master_init( );
m_transfer_completed = false;
gt_err_code = spi_master_send_recv(SPI_MASTER_0, tabAddr, 4, p_arr, 2);
if( gt_err_code != NRF_SUCCESS )
{
gt_err_code = spi_master_send_recv(SPI_MASTER_0, tabAddr, 4, p_arr, 2);
}
if( gt_err_code == NRF_SUCCESS )
{
while( ( spiTimeOut>0 ) && ( !m_transfer_completed ) )
{
A_NOP;
A_NOP;
spiTimeOut--;
}
}
// Close SPI master.
spi_master_close(SPI_MASTER_0);
GT_CS_H;
GT_CLK_L;
GT_DI_L;
GT_DO_PL;
}