All pastes #42030 Raw Edit

Anonymous

public text v1 · immutable
#42030 ·published 2006-02-18 05:59 UTC
rendered paste body
#define FW_WREN 0x06
#define FW_WRDI 0x04
#define FW_RDID 0x9F
#define FW_RDSR 0x05
#define FW_READ 0x03
#define FW_FAST_READ 0x0B
#define FW_PW   0x0A
#define FW_PP   0x02
#define FW_PE   0xDB
#define FW_SE   0xD8
#define FW_DP   0xB9
#define FW_RDP  0xAB


int getID(void) {
  int result; 

  //REG_IME = 0; // disable interrupts (critical section)

  // Get ID
  while (SERIAL_CR & SPI_BUSY);
  SERIAL_CR = SPI_ENABLE | SPI_CONTINUOUS | SPI_DEVICE_FIRMWARE;
  SERIAL_DATA = FW_RDID;
  while (SERIAL_CR & SPI_BUSY);

  result = 0;
  for (int i = 0; i < 3; i++) {
    SERIAL_DATA = 0;
    while (SERIAL_CR & SPI_BUSY);
    result = (SERIAL_DATA & 0xFF) | (result<<8);
  }

  // Get status
  while (SERIAL_CR & SPI_BUSY);
  SERIAL_CR = SPI_ENABLE | SPI_CONTINUOUS | SPI_DEVICE_FIRMWARE;
  SERIAL_DATA = FW_RDSR;
  while (SERIAL_CR & SPI_BUSY);

  SERIAL_DATA = 0;
  while (SERIAL_CR & SPI_BUSY);
  result = ((SERIAL_DATA & 0xFF) << 24) | result;
  
  //REG_IME = 1; // enable interrupts

  return result;
}