Esempio n. 1
0
//=====================================
u8 sx1278_LoRaRxPacket(void)
//=====================================
{
  u8 i; 
  u8 addr;
  u8 packet_size; 
  if(Get_NIRQ())
  {
    for(i=0;i<32;i++) 
      RxData[i] = 0x00;    
    addr = SPIRead(LR_RegFifoRxCurrentaddr);      //last packet addr
    SPIWrite(LR_RegFifoAddrPtr,addr);             //RxBaseAddr -> FiFoAddrPtr    
    if(sx1278SpreadFactorTable[Lora_Rate_Sel]==6)	//When SpreadFactor is six£¬will used Implicit Header mode(Excluding internal packet length)
      packet_size=21;
    else
      packet_size = SPIRead(LR_RegRxNbBytes);     //Number for received bytes    
    SPIBurstRead(0x00, RxData, packet_size);    
    SPIWrite(LR_RegIrqFlags,LoRa_ClearIRQ_Value);
    for(i=0;i<17;i++)
    {
      if(RxData[i]!=sx1278Data[i])
        break;  
    }    
    if(i>=17)                                     //Rx success
      return(1);
    else
      return(0);
  }
  else
    return(0);
}
/* SPIWrite2Bytes: Wirte one byte to denstination register. 
 * 
 */
void SPIWrite2Bytes(uint8_t reg, uint32_t data){
//	digitalWrite(SLAVE_CS, LOW);
	SPIWrite(reg);
	SPIWrite((data>>8)&0xff);
	SPIWrite(data&0xff);
//	digitalWrite(SLAVE_CS, HIGH);
}
Esempio n. 3
0
/*************************************************
  Function:		SPIWrite
  Description:  
  Input:		
  Output:		
  Return:		
  Others:
*************************************************/
void SPIWriteByte(unsigned char Addr, unsigned char Data)
{
	CLR_SPI_CS;
	SPIWrite(Addr);
	SPIWrite(Data);
	SET_SPI_CS;
}
/** @brief SPIReset: Reset the AD7796 chip, write 4 0xff.
 */
void SPIReset(void){
//	digitalWrite(SLAVE_CS, LOW);
	SPIWrite(0xff);
	SPIWrite(0xff);
	SPIWrite(0xff);
	SPIWrite(0xff);
//	digitalWrite(SLAVE_CS, HIGH);	
}
Esempio n. 5
0
File: SI4432.c Progetto: edwios/IoT
/******************************************************************************
**Name:           SI4432_Standby
**Function:       config SI4432 module into Standby mode
**Input:          none
**Output:         none
******************************************************************************/
void SI4432_Standby(void)
{
	SPIWrite(0x0803);					//Clr FIFO
	SPIWrite(0x0800);	
	SPIRead(0x03);						//Clr nIRQ
	SPIRead(0x04);	
	SPIWrite(0x0701);					//Standby
}
Esempio n. 6
0
File: SI4432.c Progetto: edwios/IoT
/******************************************************************************
**Name:         SI4432_Sleep
**Function:     config SI4432 module into sleep
**Input:        none
**Output:       none
******************************************************************************/
void SI4432_Sleep(void)
{
	SPIWrite(0x0803);					//Clr FIFO
	SPIWrite(0x0800);	
	SPIRead(0x03);						//Clr nIRQ
	SPIRead(0x04);	
	SPIWrite(0x0700);					//Sleep
}
Esempio n. 7
0
File: SI4432.c Progetto: edwios/IoT
/******************************************************************************
**Name:         SI4432_TestConfig
**Function:     initialization module Test mode
**Input:        none
**Output:       none
******************************************************************************/
void SI4432_TestConfig(void)
{
	SI4432_Config();
	SPIWrite(0x0500);
	SPIWrite(0x0600);
	SPIWrite(0x0C10); 		//0C	GPIO1	RfData	RF Output Tx
	SPIWrite(0x3000);
	SPIWrite(0x7102);		//Direct Mode
}
/* SPIWriteByte: Wirte one byte to denstination register. 
 * 
 */
void SPIWriteByte(uint8_t reg, uint8_t data){
	if (selectedShieldVersion < 4){
		digitalWrite(CS, LOW);
	}
	SPIWrite(reg);
	SPIWrite(data);
	if (selectedShieldVersion < 4){
		digitalWrite(CS, HIGH);
	}
}
/** @brief SPIWrite2Bytes: Wirte one byte to denstination register. 
 *  @param reg : register
 *  @param data
 */
void SPIWrite2Bytes(uint8_t reg, uint32_t data){
	if (selectedShieldVersion < 4){
		digitalWrite(CS, LOW);
	}
	SPIWrite(reg);
	SPIWrite((data>>8)&0xff);
	SPIWrite(data&0xff);
	if (selectedShieldVersion < 4){
		digitalWrite(CS, HIGH);
	}
}
/** @brief SPIReset: Reset the AD7794 chip, write 4 0xff.
 */
void SPIReset(void){
	if (selectedShieldVersion < 4){
		digitalWrite(CS, LOW);
	}
	SPIWrite(0xff);
	SPIWrite(0xff);
	SPIWrite(0xff);
	SPIWrite(0xff);
	if (selectedShieldVersion < 4){
		digitalWrite(CS, HIGH);
	}
}
Esempio n. 11
0
static u16 WriteMacBuffer(u08 * bytBuffer,u16 ui_len)
{
  u08 bytOpcode;
  u16 len;

  bytOpcode = WBM_OP;
  SEL_MAC(TRUE);            // ENC CS low
  SPIWrite(&bytOpcode,1);   // Tx opcode 
  len = SPIWrite(bytBuffer, ui_len);   // read bytes into buffer
  SEL_MAC(FALSE);           // release CS

  return len;

}
Esempio n. 12
0
//=====================================
u8 sx1278_LoRaEntryRx(void)
//=====================================
{
  u8 addr,temp; 
  ANT_EN_L();
	ANT_CTRL_RX();        
  sx1278_Config();                            //setting base parameter
  SPIWrite(REG_LR_PADAC,0x84);                    //Normal and Rx
  SPIWrite(LR_RegHopPeriod,0xFF);                 //RegHopPeriod NO FHSS
  SPIWrite(REG_LR_DIOMAPPING1,0x01);              //DIO0=00, DIO1=00, DIO2=00, DIO3=01 Valid header      
  SPIWrite(LR_RegIrqFlagsMask,0x3F);              //Open RxDone interrupt & Timeout
  SPIWrite(LR_RegIrqFlags,LoRa_ClearIRQ_Value);     
  SPIWrite(LR_RegPayloadLength,21);               //RegPayloadLength  21byte(this register must difine when the data long of one byte in SF is 6)
  addr = SPIRead(LR_RegFifoRxBaseAddr);           //Read RxBaseAddr
  SPIWrite(LR_RegFifoAddrPtr,addr);               //RxBaseAddr -> FiFoAddrPtr¡¡ 
  SPIWrite(LR_RegOpMode,0x8d);                    //Continuous Rx Mode//Low Frequency Mode
	//SPIWrite(LR_RegOpMode,0x05);                  //Continuous Rx Mode//High Frequency Mode
	SysTime = 0;
	while(1)
	{
		if((SPIRead(LR_RegModemStat)&0x04)==0x04)   	//Rx-on going RegModemStat
			break;
		if(SysTime>=3)	
			return 0;                                   //over time for error
	}
}
Esempio n. 13
0
static u08 SetBitField(u08 bytAddress, u08 bytData)
{
  if (bytAddress > 0x1f)
  {
    return FALSE;
  }

  bytAddress |= BFS_OP;       // Set opcode
  SEL_MAC(TRUE);              // ENC CS low
  SPIWrite(&bytAddress,1);    // Tx opcode and address
  SPIWrite(&bytData,1);       // Tx data
  SEL_MAC(FALSE);

  return TRUE;
}
Esempio n. 14
0
// Read 10 bits from the MCP3004 ADC converter
unsigned int GetADC (unsigned char channel) 
{
	unsigned int adc;
	// initialize the SPI port to read the MCP3004 ADC attached to it.
	SSIG=1;
	SPCR=SPE|MSTR|CPOL|CPHA|SPR1|SPR0; // Mode (1,1): see figure 6--2 of MCP3004 datasheet.
	P1_4=0;                            // Activate the MCP3004 ADC.
	SPIWrite(0x01);                    // Send the start bit.
	SPIWrite((channel*0x10)|0x80);     // Send single/diff* bit, D2, D1, and D0 bits.
	adc=((SPDR & 0x03)*0x100);         // SPDR has the 2--most significant bits of volt.
	SPIWrite(0x55);                    // It doesn't matter what we send now.
	adc+=SPDR;                         // SPDR contains the low part of the result.
	P1_4=1;                            // Deactivate the MCP3004 ADC.
	return adc;
}
Esempio n. 15
0
int copy_raw(const uint32_t src_addr,
             const uint32_t dst_addr,
             const uint32_t size)
{
    // require regions to be aligned
    if (src_addr & 0xfff != 0 ||
        dst_addr & 0xfff != 0) {
        return 1;
    }

    const uint32_t buffer_size = FLASH_SECTOR_SIZE;
    uint8_t buffer[buffer_size];
    uint32_t left = ((size+buffer_size-1) & ~(buffer_size-1));
    uint32_t saddr = src_addr;
    uint32_t daddr = dst_addr;

    while (left) {
        if (SPIEraseSector(daddr/buffer_size)) {
            return 2;
        }
        if (SPIRead(saddr, buffer, buffer_size)) {
            return 3;
        }
        if (SPIWrite(daddr, buffer, buffer_size)) {
            return 4;
        }
        saddr += buffer_size;
        daddr += buffer_size;
        left  -= buffer_size;
    }

    return 0;
}
Esempio n. 16
0
/***************************************************************************
 *
 * Function : set_coulomb_counter_calibration_mode
 *
 * IN   : param, a value to write to the regiter CoulombCounterControl
 * OUT  : 
 *
 * RET  : Return the value of register CoulombCounterControl
 *
 * Notes : From register 0x0C00, bits 3:3
 *
 **************************************************************************/
unsigned char set_coulomb_counter_calibration_mode( enum calibration_enable param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_COUNTER_CONTROL_REG);

    /* 
     * 0: doesn't set ADconverter in calibration mode. 
     * 1: set ADconverter in calibration mode 
     */ 
    switch( param )
      {
        case CALIBRATION_ENABLE_E: 
           value = old_value | CALIBRATION_ENABLE_PARAM_MASK; 
           break;
        case CALIBRATION_DISABLE_E: 
           value = old_value & ~ CALIBRATION_ENABLE_PARAM_MASK;
           break;
      }
  

    SPIWrite(COULOMB_COUNTER_CONTROL_REG, value);

    return old_value;
  }
Esempio n. 17
0
/***************************************************************************
 *
 * Function : set_coulomb_counter_reset_accumlator
 *
 * IN   : param, a value to write to the regiter CoulombCounterControl
 * OUT  : 
 *
 * RET  : Return the value of register CoulombCounterControl
 *
 * Notes : From register 0x0C00, bits 1:1
 *
 **************************************************************************/
unsigned char set_coulomb_counter_reset_accumlator( enum reset_accumlator_enable param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_COUNTER_CONTROL_REG);

    /* 
     * (auto-cleared) 
     * 0: inactive 
     * 1: allow to reset Accumulator and SampleConversion 
     * counters when a reading is done.r 
     */ 
    switch( param )
      {
        case RESET_E: 
           value = old_value | RESET_ACCUMLATOR_ENABLE_PARAM_MASK; 
           break;
        case UN_RESET_E: 
           value = old_value & ~ RESET_ACCUMLATOR_ENABLE_PARAM_MASK;
           break;
      }
  

    SPIWrite(COULOMB_COUNTER_CONTROL_REG, value);

    return old_value;
  }
Esempio n. 18
0
/***************************************************************************
 *
 * Function : set_coulomb_counter_mux_offset
 *
 * IN   : param, a value to write to the regiter CoulombCounterControl
 * OUT  : 
 *
 * RET  : Return the value of register CoulombCounterControl
 *
 * Notes : From register 0x0C00, bits 7:7
 *
 **************************************************************************/
unsigned char set_coulomb_counter_mux_offset( enum select param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_COUNTER_CONTROL_REG);

    /* 
     * 0: select offset from CC_Offset register. 
     * 1: select internal average offset 
     */ 
    switch( param )
      {
        case SELECT_FROM_OFFSET_REGISTER_E: 
           value = old_value | SELECT_PARAM_MASK; 
           break;
        case SELECT_INTERNAL_E: 
           value = old_value & ~ SELECT_PARAM_MASK;
           break;
      }
  

    SPIWrite(COULOMB_COUNTER_CONTROL_REG, value);

    return old_value;
  }
Esempio n. 19
0
char IMURead(char adress,char Device)
{
    char TempData=0;
    char Result=0;

    
    TempData = (adress | 0b10000000);          //set RW bit, and adress (clipped to 7 bits)
  
    if(Device==ACCEL_ID)                        // select the right CS to assert according to device selection
        ACCEL_SPI_CS = 0;
    else if(Device==GYRO_ID)
        GYRO_SPI_CS = 0;
    else if(Device==MAGNET_ID)
        MAGNET_SPI_CS=0;

    SPIWrite(TempData);
    Result = SPIRead(0);

    ACCEL_SPI_CS = 1;
    GYRO_SPI_CS = 1;
    MAGNET_SPI_CS= 1;

    return Result;

}
/***************************************************************************
 *
 * Function : set_data_connect_detection_enable
 *
 * IN   : param, a value to write to the regiter UsbPhyMmanagement3
 * OUT  : 
 *
 * RET  : Return the value of register UsbPhyMmanagement3
 *
 * Notes : From register 0x0583, bits 7:7
 *
 **************************************************************************/
unsigned char set_data_connect_detection_enable( enum data_connect_detection_enable param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(USB_PHY_MMANAGEMENT_3_REG);

    /* 
     * 0: inactive 
     * 1: force 60 Mhz PLL on 
     */ 
    switch( param )
      {
        case DATA_CONNECT_DETECTION_ENABLE_E: 
           value = old_value | DATA_CONNECT_DETECTION_ENABLE_PARAM_MASK; 
           break;
        case DATA_CONNECT_DETECTION_DISABLE_E: 
           value = old_value & ~ DATA_CONNECT_DETECTION_ENABLE_PARAM_MASK;
           break;
      }
  

    SPIWrite(USB_PHY_MMANAGEMENT_3_REG, value);

    return old_value;
  }
Esempio n. 21
0
/***************************************************************************
 *
 * Function : set_comlomb_reset_bit_data
 *
 * IN   : param, a value to write to the regiter CoulombDataManagement
 * OUT  : 
 *
 * RET  : Return the value of register CoulombDataManagement
 *
 * Notes : From register 0x0C11, bits 0:0
 *
 **************************************************************************/
unsigned char set_comlomb_reset_bit_data( enum bit_data_reset param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_DATA_MANAGEMENT_REG);

    /* 
     * allows to reset the 21bits accumulator data 
     */ 
    switch( param )
      {
        case BIT_DATA_RESET_E: 
           value = old_value | BIT_DATA_RESET_PARAM_MASK; 
           break;
        case BIT_DATA_UN_RESET_E: 
           value = old_value & ~ BIT_DATA_RESET_PARAM_MASK;
           break;
      }
  

    SPIWrite(COULOMB_DATA_MANAGEMENT_REG, value);

    return old_value;
  }
Esempio n. 22
0
/***************************************************************************
 *
 * Function : set_pwm_out1_enable
 *
 * IN   : param, a value to write to the regiter PwmOutManagement5
 * OUT  : 
 *
 * RET  : Return the value of register PwmOutManagement5
 *
 * Notes : From register 0x1066, bits 0:0
 *
 **************************************************************************/
unsigned char set_pwm_out1_enable( enum pwm_out1_enable param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(PWM_OUT_MANAGEMENT_5_REG);

    /* 
     * 0: Disable PWMOut1 generator 
     * 1: Enable PWMOut1 generator 
     */ 
    switch( param )
      {
        case PWM_OUT_1_ENABLE_E: 
           value = old_value | PWM_OUT_1_ENABLE_PARAM_MASK; 
           break;
        case PWM_OUT_1_DISABLE_E: 
           value = old_value & ~ PWM_OUT_1_ENABLE_PARAM_MASK;
           break;
      }
  

    SPIWrite(PWM_OUT_MANAGEMENT_5_REG, value);

    return old_value;
  }
Esempio n. 23
0
/***************************************************************************
 *
 * Function : set_coulomb_counter_read_enable
 *
 * IN   : param, a value to write to the regiter CoulombCounterControl
 * OUT  : 
 *
 * RET  : Return the value of register CoulombCounterControl
 *
 * Notes : From register 0x0C00, bits 0:0
 *
 **************************************************************************/
unsigned char set_coulomb_counter_read_enable( enum read_enable param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_COUNTER_CONTROL_REG);

    /* 
     * (auto-cleared) 
     * 0: inactive 
     * 1: allows to transfer the accumulator data, 
     * SampleConversion and SampleCounter data to the associated 
     * registers 
     */ 
    switch( param )
      {
        case READ_ENABLE_E: 
           value = old_value | READ_ENABLE_PARAM_MASK; 
           break;
        case READ_DISABLE_E: 
           value = old_value & ~ READ_ENABLE_PARAM_MASK;
           break;
      }
  

    SPIWrite(COULOMB_COUNTER_CONTROL_REG, value);

    return old_value;
  }
Esempio n. 24
0
/***************************************************************************
 *
 * Function : set_coulomb_counter_offset_computation
 *
 * IN   : param, a value to write to the regiter CoulombCounterControl
 * OUT  : 
 *
 * RET  : Return the value of register CoulombCounterControl
 *
 * Notes : From register 0x0C00, bits 4:4
 *
 **************************************************************************/
unsigned char set_coulomb_counter_offset_computation( enum computation_enable param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_COUNTER_CONTROL_REG);

    /* 
     * (auto-cleared) 
     * 0: disable offset average computation. 
     * 1: enable offset average computation 
     */ 
    switch( param )
      {
        case COMPUTATION_ENABLE_E: 
           value = old_value | COMPUTATION_ENABLE_PARAM_MASK; 
           break;
        case COMPUTATION_DISABLE_E: 
           value = old_value & ~ COMPUTATION_ENABLE_PARAM_MASK;
           break;
      }
  

    SPIWrite(COULOMB_COUNTER_CONTROL_REG, value);

    return old_value;
  }
/***************************************************************************
 *
 * Function : set_data_connect_source_enable
 *
 * IN   : param, a value to write to the regiter UsbPhyMmanagement3
 * OUT  : 
 *
 * RET  : Return the value of register UsbPhyMmanagement3
 *
 * Notes : From register 0x0583, bits 6:6
 *
 **************************************************************************/
unsigned char set_data_connect_source_enable( enum data_connect_source_enable param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(USB_PHY_MMANAGEMENT_3_REG);

    /* 
     * 0: Data Connect source is disabled 
     * 1:Data Connect source is enable 
     */ 
    switch( param )
      {
        case DATA_CONNECT_SOURCE_ENABLE_E: 
           value = old_value | DATA_CONNECT_SOURCE_ENABLE_PARAM_MASK; 
           break;
        case DATA_CONNECT_SOURCE_DISABLE_E: 
           value = old_value & ~ DATA_CONNECT_SOURCE_ENABLE_PARAM_MASK;
           break;
      }
  

    SPIWrite(USB_PHY_MMANAGEMENT_3_REG, value);

    return old_value;
  }
Esempio n. 26
0
/***************************************************************************
 *
 * Function : set_coulomb_counter_number_of_convertion
 *
 * IN   : param, a value to write to the regiter CoulombCounterControl
 * OUT  : 
 *
 * RET  : Return the value of register CoulombCounterControl
 *
 * Notes : From register 0x0C00, bits 6:5
 *
 **************************************************************************/
unsigned char set_coulomb_counter_number_of_convertion( enum number_convertion param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_COUNTER_CONTROL_REG);

    /* 
     * 00: 4 
     * 01: 8 
     * 10: 16 
     */ 
  

     value =  old_value & ~NUMBER_CONVERTION_PARAM_MASK ;

    switch(  param )
      {
        case NUMBER_CONVERTION_4_E:
            value  = value  | (NUMBER_CONVERTION_4 << 0x5);
           break;
        case NUMBER_CONVERTION_8_E:
            value  = value  | (NUMBER_CONVERTION_8 << 0x5);
           break;
        case NUMBER_CONVERTION_16_E:
            value  = value  | (NUMBER_CONVERTION_16 << 0x5);
           break;
      }
  

    SPIWrite(COULOMB_COUNTER_CONTROL_REG, value);

    return old_value;
  }
/***************************************************************************
 *
 * Function : set_sdm_src_switch
 *
 * IN   : param, a value to write to the regiter UsbPhyMmanagement3
 * OUT  : 
 *
 * RET  : Return the value of register UsbPhyMmanagement3
 *
 * Notes : From register 0x0583, bits 3:3
 *
 **************************************************************************/
unsigned char set_sdm_src_switch( enum sdm_src_switch_opened param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(USB_PHY_MMANAGEMENT_3_REG);

    /* 
     * 0: SDM_SRC USB switch is opened 
     * 1: SDM_SRC USB switch is closed 
     */ 
    switch( param )
      {
        case SDM_SRC_SWITCH_OPEN_E: 
           value = old_value | SDM_SRC_SWITCH_OPENED_PARAM_MASK; 
           break;
        case SDM_SRC_SWITCH_CLOSE_E: 
           value = old_value & ~ SDM_SRC_SWITCH_OPENED_PARAM_MASK;
           break;
      }
  

    SPIWrite(USB_PHY_MMANAGEMENT_3_REG, value);

    return old_value;
  }
Esempio n. 28
0
/***************************************************************************
 *
 * Function : set_comlomb_data_transfert
 *
 * IN   : param, a value to write to the regiter CoulombDataManagement
 * OUT  : 
 *
 * RET  : Return the value of register CoulombDataManagement
 *
 * Notes : From register 0x0C11, bits 1:1
 *
 **************************************************************************/
unsigned char set_comlomb_data_transfert( enum data_transfert param )
  {
    unsigned char value = 0;
    unsigned char old_value;

    old_value = SPIRead(COULOMB_DATA_MANAGEMENT_REG);

    /* 
     * allows to transfer the accumulator data to the NconAccu 
     * registers 
     */ 
    switch( param )
      {
        case NOT_TRANSFERT_TO_NCONACCU_E: 
           value = old_value | DATA_TRANSFERT_PARAM_MASK; 
           break;
        case TRANSFERT_TO_NCONACCU_E: 
           value = old_value & ~ DATA_TRANSFERT_PARAM_MASK;
           break;
      }
  

    SPIWrite(COULOMB_DATA_MANAGEMENT_REG, value);

    return old_value;
  }
Esempio n. 29
0
static void ResetMac(void)
{
  u08 bytOpcode = RESET_OP;
  SEL_MAC(TRUE);              // ENC CS low
  SPIWrite(&bytOpcode,1);     // Tx opcode and address
  SEL_MAC(FALSE);
}
Esempio n. 30
0
File: SI4432.c Progetto: edwios/IoT
/******************************************************************************
**Name:          SI4432_Reset
**Function:      Software Reset SI4432 module
**Input:         none
**Output:        none
******************************************************************************/
void SI4432_Reset(void)
{
	SPIWrite(0x0708);		    	//Software reset
	while (nIRQ);					// Wait for chip ready
	SPIRead(0x03);					//Clr nIRQ
	SPIRead(0x04);
}