daniel.n...@sigicom.com (Daniel Néri) wrote:

> Andreas Schwarz <andrea...@web.de> writes:
> 
> > I'm talking to a MMC in SPI-Mode, and if I don't check TXEPT (or
> > alternatively URXIFG0) it doesn't work reliably!
> 
> It's actually pretty simple: UTXIFG gets set when UTXBUF becomes
> empty, i.e. when the data has moved from UTXBUF to the transmitter
> shift register and starts to shift out on the output pin. TXEPT is set
> when UTXBUF *and* the transmitter shift register are empty, i.e. after
> the last bit of the data has been shifted out (and no new data has
> been written to UTXBUF).

Then I don't understand why it isn't sufficient to test UTXIFG in my
application:

  #define SPI_TXC (IFG2 & UTXIFG0)
  #define SPI_RXC (IFG2 & URXIFG0)

   ...

  TXBUF0 = 0x40+command;
  while (!SPI_TXC);

  for(count=0;count<4;count++) {
    TXBUF0 = 0x00;
    while (!SPI_TXC);
  }

  TXBUF0 = 0xFF;     // CRC not used, send 0xFF
  while (!SPI_TXC);

  TXBUF0=DUMMY;        // 8 clock cycles
  while (!SPI_TXC);
  // while(!SPI_RXC);  // <- only _here_ I need to test URXIFG or TXEPT to make 
it work!

  TXBUF0=DUMMY;        // send dummy byte to read response
  while (!SPI_TXC);
  while (!SPI_RXC);

  response=RXBUF0;

Reply via email to