error_t error = (m_pos == m_len) ? SUCCESS : FAIL;
m_len = 0;
- signal SpiPacket.sendDone(m_txBuf, m_rxBuf, m_pos, error);
+ atomic signal SpiPacket.sendDone(m_txBuf, m_rxBuf, m_pos, error);
}
async command void ResourceConfigure.unconfigure()
async command uint8_t SpiByte.write(uint8_t byte)
{
- if (isBusy())
- return 0;
- else {
- waitOnTx();
- call Registers.setTxbuf(byte);
- waitOnRx();
- return call Registers.getRxbuf();
+ atomic {
+ if (isBusy())
+ return 0;
+ else {
+ waitOnTx();
+ call Registers.setTxbuf(byte);
+ waitOnRx();
+ return call Registers.getRxbuf();
+ }
}
}
if (end > m_len)
end = m_len;
+ waitOnTx(); /* Don't assume that the last tx is done already */
call Registers.setTxbuf(m_txBuf ? m_txBuf[m_pos] : 0);
while (++m_pos < end) {
waitOnRx();