Esempio n. 1
0
void XSPI_PutByte(uint8_t out)
{
	for(uint8_t i = 0; i < 8; i++)
	{
		if(out & (1 << i)) PINHIGH(SPIPORT, MOSI); else PINLOW(SPIPORT, MOSI);
		PINHIGH(SPIPORT, SCK);
		PINLOW(SPIPORT, SCK);
	}
}
Esempio n. 2
0
void XSPI_LeaveFlashmode(void)
{
	PINHIGH(SPIPORT, SS);
	PINLOW(SPIPORT, EJ);
	
	_delay_ms(50);
	
	PINLOW(SPIPORT, XX);
	PINHIGH(SPIPORT, EJ);
}
Esempio n. 3
0
void XSPI_Shutdown(void)
{
	PINHIGH(SPIPORT, SS);
	PINLOW(SPIPORT, XX);
	PINLOW(SPIPORT, EJ);
	
	_delay_ms(50);
	
	PINHIGH(SPIPORT, EJ);
}
Esempio n. 4
0
void XSPI_Init(void)
{
	PINOUT(SPIDDR, KSK);
	PINOUT(SPIDDR, EJ);
	PINOUT(SPIDDR, XX);
	PINOUT(SPIDDR, SS);
	PINOUT(SPIDDR, SCK);
	PINOUT(SPIDDR, MOSI);
	
	PINHIGH(SPIPORT, EJ);
	PINHIGH(SPIPORT, SS);
	PINHIGH(SPIPORT, XX);
	PINHIGH(SPIPORT, SCK);
	PINHIGH(SPIPORT, KSK);
	PINLOW(SPIPORT, MOSI);
}
Esempio n. 5
0
void XSPI_Powerup(void)
{
	PINLOW(SPIPORT, KSK);
	_delay_ms(5);
	PINHIGH(SPIPORT, KSK);
	_delay_ms(5);
	
	PINLOW(SPIPORT, KSK);
	_delay_ms(5);
	PINHIGH(SPIPORT, KSK);
	_delay_ms(5);
	
	PINLOW(SPIPORT, KSK);
	_delay_ms(5);
	PINHIGH(SPIPORT, KSK);
	_delay_ms(5);
	
	PINLOW(SPIPORT, KSK);
	_delay_ms(5);
	PINHIGH(SPIPORT, KSK);
}
Esempio n. 6
0
uint8 set_relay_state(uint8 chan,uint8 val){
  if (chan >= NUM_RELAY_CHANNELS)
    return 0;   //FIXME should be error
  if ( val == 0 ){
    _relay_state &=  (uint8)(~( 1 << chan ));
    if (chan == 0 ) {
      PINLOW(RLA);
    } else if (chan == 1){
      PINLOW(RLB);
    }
  }
  else {
    _relay_state |=  (uint8)( 1 << chan );  
    if (chan == 0 ) {
      PINHIGH(RLA);
    } else if (chan == 1){
      PINHIGH(RLB);
    }
  }
  return 0;
}
Esempio n. 7
0
void XSPI_Write(uint8_t reg, uint8_t* buf)
{
    PINLOW(SPIPORT, SS);
	
	XSPI_PutByte((reg << 2) | 2);
	
	XSPI_PutByte(*buf++);
	XSPI_PutByte(*buf++);
	XSPI_PutByte(*buf++);
	XSPI_PutByte(*buf++);
	
	PINHIGH(SPIPORT, SS);
}
Esempio n. 8
0
void XSPI_Read(uint8_t reg, uint8_t* buf)
{
	PINLOW(SPIPORT, SS);
	
	XSPI_PutByte((reg << 2) | 1);
	XSPI_PutByte(0xFF);
	
	*buf++ = XSPI_FetchByte();
	*buf++ = XSPI_FetchByte();
	*buf++ = XSPI_FetchByte();
	*buf++ = XSPI_FetchByte();
	
	PINHIGH(SPIPORT, SS);
}
Esempio n. 9
0
uint8_t XSPI_FetchByte()
{
	uint8_t in = 0;
	PINLOW(SPIPORT, MOSI);
	
	for(uint8_t i = 0; i < 8; i++)
	{
		PINHIGH(SPIPORT, SCK);
		in |= PINGET(SPIPIN, MISO) ? (1 << i) : 0x00;
		PINLOW(SPIPORT, SCK);
	}
	
	return in;
}
Esempio n. 10
0
uint8_t XSPI_ReadByte(uint8_t reg)
{
    uint8_t res;
    
    PINLOW(SPIPORT, SS);
    
    XSPI_PutByte((reg << 2) | 1);
	XSPI_PutByte(0xFF);
	
	res = XSPI_FetchByte();
    
    PINHIGH(SPIPORT, SS);
    
    return res;
}
Esempio n. 11
0
uint16_t XSPI_ReadWord(uint8_t reg)
{
    uint16_t res;
    
    PINLOW(SPIPORT, SS);
    
    XSPI_PutByte((reg << 2) | 1);
	XSPI_PutByte(0xFF);
	
	res = XSPI_FetchByte();
    res |= ((uint16_t)XSPI_FetchByte()) << 8;
    
    PINHIGH(SPIPORT, SS);
    
    return res;
}