Ejemplo n.º 1
0
/**
 * \brief         Read from the FRAM chip.
 * \param address The index of the byte to start reading from.
 * \param len     The number of bytes to read.
 * \param buf     A buffer to put the return data in.
 * \return        0 on success, -1 on error
 *
 *                Reads len bytes from the FRAM chip starting at address.
 */
int
fm25lb_read(uint16_t address, uint16_t len, uint8_t *buf)
{
  uint16_t i;
 // uint16_t c;
 // uint16_t cycles = (len / 6) + 1;
 // uint16_t index = 0;
  uint16_t current_address = address;

  spi_set_mode(SSI_CR0_FRF_MOTOROLA, SSI_CR0_SPO, SSI_CR0_SPH, 8);

  SPI_CS_CLR(FM25LB_CS_N_PORT_NUM, FM25LB_CS_N_PIN);

  /* Send the READ command and the address to the FRAM */
  SPI_WRITE(FM25LB_ADD_ADDRESS_BIT(current_address, FM25LB_READ_COMMAND));
  SPI_WRITE(current_address & 0xFF);

  SPI_FLUSH();

  for (i=0; i<len; i++) {
    SPI_READ(buf[i]);
  }

  SPI_CS_SET(FM25LB_CS_N_PORT_NUM, FM25LB_CS_N_PIN);

  return 0;
}
Ejemplo n.º 2
0
/*---------------------------------------------------------------------------*/
int
xmem_pread(void *_p, int size, unsigned long offset)
{
  unsigned char *p = _p;
  const unsigned char *end = p + size;
  int s;
  wait_ready();

  ENERGEST_ON(ENERGEST_TYPE_FLASH_READ);

  s = splhigh();
  SPI_FLASH_ENABLE();

  SPI_WRITE_FAST(SPI_FLASH_INS_READ);
  SPI_WRITE_FAST(offset >> 16);	/* MSB */
  SPI_WRITE_FAST(offset >> 8);
  SPI_WRITE_FAST(offset >> 0);	/* LSB */
  SPI_WAITFORTx_ENDED();
  
  SPI_FLUSH();
  for(; p < end; p++) {
    unsigned char u;
    SPI_READ(u);
    *p = ~u;
  }

  SPI_FLASH_DISABLE();
  splx(s);

  ENERGEST_OFF(ENERGEST_TYPE_FLASH_READ);

  return size;
}
Ejemplo n.º 3
0
Archivo: fm25v02.c Proyecto: lab11/G2
/**
 * \brief         Read from the FRAM chip.
 * \param address The index of the byte to start reading from.
 * \param len     The number of bytes to read.
 * \param buf     A buffer to put the return data in.
 * \return        0 on success, -1 on error
 *
 *                Reads len bytes from the FRAM chip starting at address.
 */
int
fm25v02_read(uint16_t address, uint16_t len, uint8_t *buf)
{
  uint16_t i;

  spi_set_mode(SSI_CR0_FRF_MOTOROLA, SSI_CR0_SPO, SSI_CR0_SPH, 8);

  SPI_CS_CLR(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);

  /* Send the READ command and the address to the FRAM */
  SPI_WRITE(FM25V02_READ_COMMAND);
  address &= 0x7fff;
  SPI_WRITE((address&0xff00)>>8);
  SPI_WRITE((address&0xff));

  SPI_FLUSH();

  for (i=0; i<len; i++) {
    SPI_READ(buf[i]);
  }

  SPI_CS_SET(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);

  return 0;
}
Ejemplo n.º 4
0
Archivo: fm25v02.c Proyecto: lab11/G2
uint8_t fm25v02_readStatus(){
	uint8_t statusReg;
	spi_set_mode(SSI_CR0_FRF_MOTOROLA, 0, 0, 8);
	SPI_CS_CLR(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);
	SPI_WRITE(FM25V02_READ_STATUS_COMMAND);
	SPI_FLUSH();
	SPI_READ(statusReg);
	SPI_CS_SET(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);
	return statusReg;
}
Ejemplo n.º 5
0
Archivo: fm25v02.c Proyecto: lab11/G2
void fm25v02_dummyWakeup(){
	uint8_t dummyReg;
	//uint16_t dummyCnt;
	spi_set_mode(SSI_CR0_FRF_MOTOROLA, 0, 0, 8);
	SPI_CS_CLR(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);
	// Delay for 400-ish us
	clock_delay_usec(400);
	//for (dummyCnt=0; dummyCnt<800; dummyCnt++)
	//	asm("nop");
	SPI_FLUSH();
	SPI_READ(dummyReg);
	SPI_CS_SET(FM25V02_CS_N_PORT_NUM, FM25V02_CS_N_PIN);
}
Ejemplo n.º 6
0
void nrf51822_get_all_advertisements () {
  //spi_set_mode(SSI_CR0_FRF_MOTOROLA, SSI_CR0_SPO, SSI_CR0_SPH, 8);
  spi_set_mode(SSI_CR0_FRF_MOTOROLA, 0, 0, 8);

  SPI_CS_CLR(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
clock_delay_usec(8);

  // GET ADVERTISEMENTS
  SPI_WRITE(0x02);

  SPI_FLUSH();

  SPI_CS_SET(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
}
Ejemplo n.º 7
0
void nrf51822_interrupt(uint8_t port, uint8_t pin)
{
  uint16_t b;
  uint8_t buf[256];
  int i;

  leds_toggle(LEDS_RED);


  spi_set_mode(SSI_CR0_FRF_MOTOROLA, 0, 0, 8);

  SPI_CS_CLR(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
clock_delay_usec(8);
  // READ_IRQ
  SPI_WRITE(0x01);
  SPI_FLUSH();

SPI_CS_SET(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);

clock_delay_usec(75);

  SPI_CS_CLR(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);
clock_delay_usec(8);



  SPI_READ(b);

  if (b == 0xFF) {
    // ERROR on the nrf51822 side. Skip this.

  } else {

    for (i=0; i<b; i++) {
      SPI_READ(buf[i]);
    }

  }


  SPI_CS_SET(NRF51822_CS_N_PORT_NUM, NRF51822_CS_N_PIN);


}
Ejemplo n.º 8
0
/*---------------------------------------------------------------------------*/
static unsigned
read_status_register(void)
{
  unsigned char u;

  int s;

  s = splhigh();
  SPI_FLASH_ENABLE();
  
  SPI_WRITE(SPI_FLASH_INS_RDSR);

  SPI_FLUSH();
  SPI_READ(u);

  SPI_FLASH_DISABLE();
  splx(s);

  return u;
}
Ejemplo n.º 9
0
Archivo: rv3049.c Proyecto: lab11/atum
int
rv3049_read_time(rv3049_time_t* time)
{
  uint8_t buf[8];
  int i;

  spix_set_mode(SPI_CONF_DEFAULT_INSTANCE, SSI_CR0_FRF_MOTOROLA, 0, SSI_CR0_SPH, 8);

  SPI_CS_SET(RV3049_CS_PORT_NUM, RV3049_CS_PIN);

  // Tell the RTC we want to read the clock
  SPI_WRITE(RV3049_SET_READ_BIT(RV3049_PAGE_ADDR_CLOCK));

  SPI_FLUSH();

  // Read a null byte here. Not exactly sure why.
  SPI_READ(buf[0]);

  // Then actually read the clock
  for (i=0; i<RV3049_READ_LEN_TIME; i++) {
    SPI_READ(buf[i]);
  }

  SPI_CS_CLR(RV3049_CS_PORT_NUM, RV3049_CS_PIN);

  // Convert the values
  time->seconds = BCD_TO_BINARY(buf[0]);
  time->minutes = BCD_TO_BINARY(buf[1]);
  time->hours   = BCD_TO_BINARY((buf[2])&0x3F);
  time->days    = BCD_TO_BINARY(buf[3]);
  time->weekday = buf[4];
  time->month   = buf[5];
  time->year    = BCD_TO_BINARY(buf[6])+2000;

  return 0;
}