示例#1
0
BOOL CPU_SPI_Xaction_nWrite8_nRead8( SPI_XACTION_8& Transaction )
{
    LPC_SSP_T *spi = SPI_REG(Transaction.SPI_mod);
    
    UINT8* outBuf = Transaction.Write8;
    UINT8* inBuf  = Transaction.Read8;
    INT32 outLen = Transaction.WriteCount;
    INT32 num, ii, i = 0;
    
    if (Transaction.ReadCount) { // write & read
        num = Transaction.ReadCount + Transaction.ReadStartOffset;
        ii = -Transaction.ReadStartOffset;
    } else { // write only
        num = outLen;
        ii = 0x80000000; // disable write to inBuf
    }

    UINT8 out = outBuf[0];
    UINT16 in;
    SPI_Write(spi, out); // write first word
    while (++i < num) {
        if (i < outLen) out = outBuf[i]; // get new output data
        while (!(SPI_Readable(spi))); // wait for Rx buffer
        in = SPI_Read(spi); // read input
        SPI_Write(spi, out); // start output
        if (ii >= 0) inBuf[ii] = (UINT8)in; // save input data
        ii++;
    }
    while (!(SPI_Readable(spi))); // wait for Rx buffer
    in = SPI_Read(spi); // read last input
    if (ii >= 0) inBuf[ii] = (UINT8)in; // save last input

    return TRUE;
}
unsigned int SPI_Read16(unsigned int addr)
{
  unsigned int L = 0;
  L = SPI_Read(addr) << 8;
  L |= SPI_Read(addr + 1);
  return L;
}
//******************************************************************
//Function	: to read a single block from SD card
//Arguments	: none
//return	: unsigned char; will be 0 if no error,
// 			  otherwise the response byte will be sent
//******************************************************************
unsigned char SD_readSingleBlock(char *inputbuffer,uint32_t startBlock)
{
    unsigned char response;
    uint16_t i, retry=0;

    response = SD_sendCommand(READ_SINGLE_BLOCK, startBlock); //read a Block command

    if(response != 0x00)
    {
        return response; //check for SD status: 0x00 - OK (No flags set)
    }

    SPI_EnableChipSelect();

    retry = 0;
    while(SPI_Read() != 0xfe) //wait for start block token 0xfe (0x11111110)
    {
        if(retry++ > 0xfffe)
        {
            SPI_DisableChipSelect();
            return 1; //return if time-out
        }
    }

    for(i=0; i<512; i++) //read 512 bytes
        inputbuffer[i] = SPI_Read();

    SPI_Read(); //receive incoming CRC (16-bit), CRC is ignored here
    SPI_Read();

    SPI_Read(); //extra 8 clock pulses
    SPI_DisableChipSelect();

    return 0;
}
示例#4
0
void test_spi(void)
{
    uint8_t i, tmp;
    int n;

    i = 0;

    yushan_spi_write(0x0808, 0x0);
    mdelay(10);
    SPI_Read(0x0808, 1, (uint8_t *)(&tmp));

    if(i != tmp) {
        printk("SPI test fail 1: i %x read tmp is %x\n",i, tmp);
        return;
    }

#if 1
    for(n=0; n<5; n++) {
        pr_info("spi test loop count=%d\n",n);
        i = 0x66;

        yushan_spi_write(0x0808, i);
        mdelay(10);
        SPI_Read(0x808, 1, (uint8_t *)(&tmp));

        if(i != tmp) {
            printk("SPI test fail 2: i %x read tmp is %x\n",i, tmp);

        } else {
            pr_info("SPI test write %x :OK\n",i);
        }

        i = 0x55;

        yushan_spi_write(0x0808, i);
        mdelay(10);
        SPI_Read(0x0808, 1, (uint8_t *)(&tmp));

        if(i != tmp) {
            printk("SPI test fail 3: i %x read tmp is %x\n",i, tmp);

        } else {
            pr_info("SPI test write %x :OK\n",i);
        }

        i = 0xaa;
        yushan_spi_write(0x0808, i);
        mdelay(10);
        SPI_Read(0x0808, 1, (uint8_t *)(&tmp));

        if(i != tmp) {
            printk("SPI test fail 4: i %x read tmp is %x\n",i, tmp);

        } else {
            pr_info("SPI test write %x :OK\n",i);
        }
    }

#endif
}
示例#5
0
uchar SPIRD(uchar rs)   //写SPI移入数据, RS=0输入指令, RS=1输入数据
{
uchar rdata;
	SPI_Write(0xf8+(1<<2)+(rs<<1));		//数据格式:11111 | RW | RS | 0 |
	rdata=SPI_Read()&0xf0;			//读取数据字高4位,数据格式: D7-D4| 0000 |
	rdata=rdata|((SPI_Read()&0xf0)>>4);		//读取数据字低4位,数据格式:  D3-D0| 0000 |
return rdata;
}
void checkstatus()
{
unsigned char temp1,temp2;
	temp1=SPI_Read(STATUS);
	  temp2=SPI_Read(FIFO_STATUS);
	  if(temp1==0x40)
		{
			//Delaynms(100);
			LED0=~LED0;
			LED1=~LED1;			
		}  	
}
示例#7
0
void handlepost(){
	printf(" HP \n");
	if (ledmode==1){
		ledmode=0;
		asm("	req\n");
	} else {
		ledmode=1;
		asm("	seq\n");
	}
	cmdip[0]=SPI_Read(S0_DIPR + 0);cmdip[1]=SPI_Read(S0_DIPR + 1);cmdip[2]=SPI_Read(S0_DIPR + 2);cmdip[3]=SPI_Read(S0_DIPR + 3);
	sendform();
}
示例#8
0
void flush(rsize){ //flush the receive buffer
    unsigned int ptr,offaddr;
    ptr = SPI_Read(S0_RX_RD);   // Read the Rx Read Pointer
    offaddr = (((ptr & 0x00FF) << 8 ) + SPI_Read(S0_RX_RD + 1));
	offaddr+=rsize;				//how much to skip
    // Increase the S0_RX_RD value, so it point to the next receive
    SPI_Write(S0_RX_RD,(offaddr >> 8) );
    SPI_Write(S0_RX_RD + 1,(offaddr & 0x00FF));

    SPI_Write(S0_CR,CR_RECV);	// Now Send the RECV command
    delay(5);    				// Wait for Receive Process
}
//******************************************************************
//Function	: to write to a single block of SD card
//Arguments	: none
//return	: unsigned char; will be 0 if no error,
// 			  otherwise the response byte will be sent
//******************************************************************
unsigned char SD_writeSingleBlock(char *inputbuffer,uint32_t startBlock)
{
    unsigned char response;
    uint16_t i, retry=0;

    response = SD_sendCommand(WRITE_SINGLE_BLOCK, startBlock); //write a Block command

    if(response != 0x00) return response; //check for SD status: 0x00 - OK (No flags set)

    SPI_EnableChipSelect();

    SPI_Write(0xfe);     //Send start block token 0xfe (0x11111110)

    for(i=0; i<512; i++)    //send 512 bytes data
        SPI_Write(inputbuffer[i]);

    SPI_Write(0xff);     //transmit dummy CRC (16-bit), CRC is ignored here
    SPI_Write(0xff);

    response = SPI_Read();

    if( (response & 0x1f) != 0x05) //response= 0xXXX0AAA1 ; AAA='010' - data accepted
    {                              //AAA='101'-data rejected due to CRC error
        SPI_DisableChipSelect();              //AAA='110'-data rejected due to write error
        return response;
    }

    while(!SPI_Read()) //wait for SD card to complete writing and get idle
    {
        if(retry++ > 0xfffe)
        {
            SPI_DisableChipSelect();
            return 1;
        }
    }

    SPI_DisableChipSelect();
    SPI_Write(0xff);   //just spend 8 clock cycle delay before reasserting the CS line
    SPI_EnableChipSelect();         //re-asserting the CS line to verify if card is still busy

    while(!SPI_Read()) //wait for SD card to complete writing and get idle
    {
        if(retry++ > 0xfffe)
        {
            SPI_DisableChipSelect();
            return 1;
        }
    }
    SPI_DisableChipSelect();


    return 0;
}
示例#10
0
文件: NRFLib.cpp 项目: sharst/NRFLib
bool NRFLib::receive_message(unsigned char buf[]) {
	if (_txmode)
		RXMode();
	unsigned char status = SPI_Read(STATUS);                         // read register STATUS's value
	unsigned char fifo = SPI_Read(0x17);
	//if(status&RX_DR){                                              // if receive data ready (TX_DS) interrupt
	if (!(fifo&1)) {
	  SPI_Read_Buf(RD_RX_PLOAD, buf, _payload);             // read playload to rx_buf
	  //flushRX();                                        // clear RX_FIFO
	  SPI_RW_Reg(WRITE_REG+STATUS,0x70); //0x70);                             // clear RX_DR or TX_DS or MAX_RT interrupt flag
	  return true;
	}
	return false;
}
示例#11
0
/**
   @brief Reads the accelerometer data.

   @return none

**/
void Sensor_Scan(void)
{
   if (Sensor_Delay(0, &ui32ScanSensorCounter, SCAN_SENSOR_TIME)) {
      Sensor_Delay(1, &ui32ScanSensorCounter, SCAN_SENSOR_TIME);

      i16SensorX = SPI_Read(XDATA_L_REG, SPI_READ_TWO_REG);

      i16SensorY = SPI_Read(YDATA_L_REG, SPI_READ_TWO_REG);

      i16SensorZ = SPI_Read(ZDATA_L_REG, SPI_READ_TWO_REG);

      i16SensorT = SPI_Read(TEMP_L_REG, SPI_READ_TWO_REG);
   }
}
示例#12
0
文件: main.c 项目: francissabado/chll
uint16_t ADT7310_QueryValue() {
  uint16_t SensorValue;
  // send read command 0x50 and two dummy bytes
  ADT7310_CS_OUT &= ~ADT7310_CS_PIN;   // low active --> activate
  SPI_Write(0x50);
  while (SPI_IsBusy()) {}
  SPI_Write(0xFF);
  while (SPI_IsBusy()) {}
  SensorValue = SPI_Read() << 8;      // read MSB
  SPI_Write(0xFF);
  while (SPI_IsBusy()) {}
  ADT7310_CS_OUT |= ADT7310_CS_PIN;   // low active --> deactivate
  SensorValue |= SPI_Read();          // read LSB
  return SensorValue;
}
示例#13
0
文件: nrf24l01.c 项目: sigmax6/sigmav
/**************************************************
函数:nrf24l01_rxPacket(uchar * rx_buf)

描述:
    向rx_buf 指向的缓冲区位置按照RX_PLOAD_WIDTH宽度数据接收
**************************************************/
int nrf24l01_rxPacket(uchar * rx_buf)
{
    int rx_result=0;

    sta=SPI_Read(STATUS);
#ifdef DEBUG
    printk("Statue is %x",sta);
#endif

    if(sta & (1<<RX_DR) )           //收到数据
    {
#ifdef DEBUG
        printk("Data received!\n");
#endif
//    	    CE_L;
//    	    udelay(10);
        SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);  //从节点读取数据到RxBuffer
        rx_result = 1;
    }

    SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除RX_DS中断标志

    return rx_result;

}
示例#14
0
void W5100_Init(void){// Ethernet Setup
  unsigned char mac_addr[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  unsigned char ip_addr[] = {169,254,180,2};//{192,168,0,182};//
  unsigned char sub_mask[] = {255,255,255,0};
  unsigned char gtw_addr[] = {192,168,0,1};
  SPI_Write(MR,0x80);   // setting bit 7 of the mode register does a software reset of the w5100
  delay(1);
  //set the wiznet gateway address register
  SPI_Write(GAR + 0,gtw_addr[0]); SPI_Write(GAR + 1,gtw_addr[1]);
  SPI_Write(GAR + 2,gtw_addr[2]); SPI_Write(GAR + 3,gtw_addr[3]);
  delay(1);
  // Set the Wiznet W5100 MAC address - Source Address Register (SAR): 0x0009 to 0x000E
  SPI_Write(SAR + 0,mac_addr[0]); SPI_Write(SAR + 1,mac_addr[1]);
  SPI_Write(SAR + 2,mac_addr[2]); SPI_Write(SAR + 3,mac_addr[3]);
  SPI_Write(SAR + 4,mac_addr[4]); SPI_Write(SAR + 5,mac_addr[5]);
  delay(1);
  // Set the Wiznet W5100 Sub Mask Address (SUBR): 0x0005 to 0x0008
  SPI_Write(SUBR + 0,sub_mask[0]); SPI_Write(SUBR + 1,sub_mask[1]);
  SPI_Write(SUBR + 2,sub_mask[2]); SPI_Write(SUBR + 3,sub_mask[3]);
  delay(1);
  // Set the Wiznet W5100 IP Address (SIPR): 0x000F to 0x0012
  SPI_Write(SIPR + 0,ip_addr[0]); SPI_Write(SIPR + 1,ip_addr[1]);
  SPI_Write(SIPR + 2,ip_addr[2]); SPI_Write(SIPR + 3,ip_addr[3]);
  delay(1);
  // Set the Wiznet W5100 RX and TX Memory Size, we use 2KB for Rx/Tx 4 channels
  SPI_Write(RMSR,0x55);
  SPI_Write(TMSR,0x55);
  printf("Done Wiznet W5100 Initialization on IP address %d.%d.%d.%d\n\n",SPI_Read(SIPR + 0),SPI_Read(SIPR + 1),SPI_Read(SIPR + 2),SPI_Read(SIPR + 3));
}
示例#15
0
void main(void){
	int socket0status;
	//ledmode=0; digitalWrite(0,LOW); cmdip[0]=0; pagehits=0;
	delay(100);
	printf("\nOlduino Web Server v5.1\n");
    W5100_Init(); //initialize the wiznet chip
	while(1){  // Loop forever
		socket0status=SPI_Read(S0_SR);
		//printf("s0s=%x ",socket0status);
		switch (socket0status){
			case SOCK_CLOSED: //initial condition
				socket0_init();	//initialize socket 0
				break;
			case SOCK_ESTABLISHED: //someone wants to talk to the server
				handlesession();
				break;
			//following are cases where we have to reset and reopen the socket
			case SOCK_FIN_WAIT: case SOCK_CLOSING: case SOCK_TIME_WAIT:
			case SOCK_CLOSE_WAIT: case SOCK_LAST_ACK:
				close0();
				break;
		}
		delay(100);
	}
}
示例#16
0
unsigned char nRF24L01_debug(void)
{
#ifdef nRF24L01_RX_Debug
    unsigned char RxBuf[RX_PLOAD_WIDTH]={0};
    SetRX_Mode();
    while(1){
        SetRX_Mode();
        if(nRF24L01_RxPacket(RxBuf)){ 
            //add your code
            return 1;
        }
    } 
#endif
    
#ifdef nRF24L01_TX_Debug   
    unsigned char sta=0; 
    unsigned char TxBuf[TX_PLOAD_WIDTH]={0};
    nRF24L01_TxPacket(TxBuf);
    while(1){ 
        nRF24L01_TxPacket(TxBuf);
        sta = SPI_Read(STATUS);
        if(sta == 0x2e){
            //add your code
            return 1;
        }
        SPI_RW_Reg(WRITE_REG+STATUS, 0xff);
        xSysCtlDelay(10000);
    }
#endif
}
示例#17
0
int main (void)
{	
	unsigned char i = 0;
	unsigned char sta;
	init_uart (BAUD_SETTING);
	stdout = &mystdout;
	for (i = 0; i < 32; i++)
	{
	   	tx_buf [i] = i;
	}	
	NRF24L01_SPI_Init ();
//	init_nrf24l01_io ();
//	ifnnrf_tx_mode ();
//	_delay_ms (10);
//	sta = SPI_Read (FIFO_STATUS);
	while (1)
	{
		ifnnrf_tx_mode ();
		_delay_ms (10);
		sta = SPI_Read (STATUS);
		ifnnrf_CLERN_ALL ();
		printf ("the status reg = 0x%x\n",sta);
		_delay_ms (1000);
	}
}
示例#18
0
uchar nRF24L01_RxPacket(uchar *rx_buf)
{	 
    uchar revale=0;
	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0,RX_ADDRESS, RX_ADR_WIDTH);
	CE=0;
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);   		// IRQ收发完成中断响应,16位CRC	,主接收
	CE = 1; 
	inerDelay_us(130);
	sta=SPI_Read(STATUS);     // 读取状态寄存其来判断数据接收状况
	if(RX_DR)				// 判断是否接收到数据
	{
	    CE = 0; 			//SPI使能
		SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
		revale =1;			//读取数据完成标志
						write_com(0x80);
						write_str("   Hum");
						write_data(':');
						write_data(rx_buf[1]/10%10+48);
						write_data(rx_buf[1]%10+48);
						
						write_data('%');
						write_com(0x80+0x40);
						write_str("   Tem");
						write_data(':');
						write_data(rx_buf[2]/10%10+48);
						write_data(rx_buf[2]%10+48);
                        write_data(0xdf);
						write_data('c');
				
	}
	SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
	return revale;
}
示例#19
0
int rawchip_match_id(void)
{
	int rc = 0;
	uint32_t chipid = 0;
	int retry_spi_cnt = 0, retry_readid_cnt = 0;
	CDBG("%s\n", __func__);

	for (retry_spi_cnt = 0, retry_readid_cnt = 0; (retry_spi_cnt < 3 && retry_readid_cnt < 3); ) {
		rc = SPI_Read(rawchip_info.rawchip_id_info->rawchip_id_reg_addr, 4, (uint8_t*)(&chipid));
		if (rc < 0) {
			pr_err("%s: read id failed\n", __func__);
			retry_spi_cnt++;
			pr_info("%s: retry: %d\n", __func__, retry_spi_cnt);
			mdelay(5);
			continue;
		} else
			rawchip_id = chipid;

		pr_info("rawchip id: 0x%x requested id: 0x%x\n", chipid, rawchip_info.rawchip_id_info->rawchip_id);
		if (chipid != rawchip_info.rawchip_id_info->rawchip_id) {
			pr_err("rawchip_match_id chip id does not match\n");
			retry_readid_cnt++;
			pr_info("%s: retry: %d\n", __func__, retry_readid_cnt);
			mdelay(5);
			rc = -ENODEV;
			continue;
		} else
			break;
	}

	return rc;
}
示例#20
0
文件: spi.c 项目: amol-ven/BE-proj
uint8_t SPI_ClearBuffer(void)
{
   uint8_t rbuf;     //Place holder to clear Rx Buffer
   uint8_t timeout;  //Read Function Completion Status
   timeout = SPI_Read (&rbuf);
   return(timeout);
}
示例#21
0
void NRF24_Check_Event(void)
{
	rt_uint8_t buff[34];
	rt_uint8_t sta = SPI_Read(NRF_READ_REG + NRFRegSTATUS);

	//rt_kprintf("sta=0x%x\n",sta);
	if(sta & (0x01 << 6))
	{
		rt_uint8_t rx_len = SPI_Read(R_RX_PL_WID);
		if(rx_len<33)
		{
			SPI_Read_Buf(RD_RX_PLOAD,buff,rx_len);// read receive payload from RX_FIFO buffer
			rt_kprintf("Data_Receive:");
			for(rt_uint8_t i=0;i<32;i++)
			{
				rt_kprintf("%c",buff[i]);
			}
			rt_kprintf("\n");
			//LED1_ONOFF();
			Data_Receive_Anl(buff,rx_len);
		}
		else 
		{
			SPI_RW_Reg(FLUSH_RX,0xff);//Çå¿Õ»º³åÇø
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<5))
	{
		//LED1_ONOFF();
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<4))
	{
		if(sta & 0x01)	//TX FIFO FULL
		{
			SPI_RW_Reg(FLUSH_TX,0xff);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	SPI_RW_Reg(RF_WRITE_REG + NRFRegSTATUS, sta);
}
示例#22
0
/**
   @brief Software reset routine

   @return none
**/
static void AD7091R_SoftwareReset(void)
{

   CONVST_PORT->GPCLR = CONVST_PIN;                   /* Start conversion -> CONVST low */
   CONVST_PORT->GPSET = CONVST_PIN;                   /* Pull CONVST high */

   SPI_Read(AD7091R_OPERATION_MODE, ONE_BYTE);        /* Read a dummy conversion result */

}
示例#23
0
/*
*********************************************************************************************************
*                                           AD7799_CMD_Read()
*
* Description : Read AD7799 registers via SPI interface.
*
* Argument(s) : None. 
*
* Return(s)   : Byte return from AD7799
* 
* Caller(s)   : 
*
* Note(s)     : None.
*********************************************************************************************************
*/
static unsigned char AD7799_CMD_Read( void ) 
{  
    unsigned char ReadData;    
   
    SPI_Write(spi_adc, NPCS_AD7799, 0x00);   
    ReadData = SPI_Read(  spi_adc  );
     
    return ReadData;
}
示例#24
0
void SPI_Read_Burst_Reg(uint8_t addr, uint8_t *buffer, uint8_t count)
{
	uint8_t i;
	RF_CS_PORT->ODR &=~ RF_CS_PIN;
	while (RF_MISO_PORT->IDR & RF_MISO_PIN);
	SPI_Write(addr | READ_BURST);
	for (i = 0; i < count; i++)
		buffer[i] = SPI_Read();
	RF_CS_PORT->ODR |= RF_CS_PIN;
}
示例#25
0
uint8_t SPI_Read_Status(uint8_t addr)
{
	uint8_t x;
	RF_CS_PORT->ODR &=~ RF_CS_PIN;
	while (RF_MISO_PORT->IDR & RF_MISO_PIN);
	x = SPI_Write(addr | READ_BURST);
	x = SPI_Read();
	RF_CS_PORT->ODR |= RF_CS_PIN;
	return x;
}
示例#26
0
/**************************************************************************//**
* @brief Reads data from a register
*
* @param regAddr - The adress of the register to be read
*
* @return Returns the read data or negative error code
******************************************************************************/
int32_t ad9643_read(uint32_t regAddr)
{
	int32_t ret;
	uint32_t data;

	regAddr += 0x8000;
    ret = SPI_Read(SPI_SEL_AD9643, regAddr, &data);

    return (ret < 0 ? ret : (int32_t)data);
}
示例#27
0
char Init_LIS35(void)
{
	char Reg;
	SPI_Write(CTRL_REG2,0x40); //boot
	SPI_Write(CTRL_REG1,0x47); ///aktywacja wszystkich osi
	SPI_Read(CTRL_REG1,&Reg);
	if(Reg==0x47) return 1;
	else return 0;

}
示例#28
0
/***************************************************************************//**
 * @brief Reads the value of the selected register.
 *
 * @param regAddress - The address of the register to read.
 *
 * @return registerValue - The register's value or negative error code.
*******************************************************************************/
int32_t ad9122_read(uint8_t registerAddress)
{
	uint8_t regAddr			= 0;
	uint32_t registerValue 	= 0;
	int32_t ret;

	regAddr = 0x80 + (0x7F & registerAddress);
    ret = SPI_Read(SPI_SEL_AD9122, regAddr, &registerValue);

	return (ret < 0 ? ret : (int32_t)registerValue);
}
示例#29
0
// Reads response of a multi-byte SPI transaction.
unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
{
    unsigned char status,i;

    PIO_Clear(&CSN);                           // Set CSN low, init SPI tranaction
    SPI_Write(AT91C_BASE_SPI0, 0, reg);        // Select register to write to and read status unsigned char
    while(!SPI_IsFinished(AT91C_BASE_SPI0));   // Wait for write to complete
    status = SPI_Read(AT91C_BASE_SPI0);        // read status of the 24l01
  
    for(i=0;i<bytes;i++)
    {
        SPI_Write(AT91C_BASE_SPI0, 0, 0);             // write dummy byte
            while(!SPI_IsFinished(AT91C_BASE_SPI0));  // Wait for write to complete
        pBuf[i] = SPI_Read(AT91C_BASE_SPI0);          // Read unsigned char from nRF24L01
    }

    PIO_Set(&CSN);                                    // Set CSN high again

    return(status);                  // return nRF24L01 status unsigned char
}
bool ADXL345_SPI_IsDataReady(alt_u32 device_base){
    bool bReady = FALSE;
    alt_u8 data8;
    
    if (SPI_Read(device_base, ADXL345_REG_INT_SOURCE,&data8)){
        if (data8 & XL345_DATAREADY)
            bReady = TRUE;
    }            
    
    return bReady;
}