]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/msp430/usart/Msp430SpiNoDmaP.nc
bugfix: previously two bytes were written to the U0TXBUF register before one was...
[tinyos-2.x.git] / tos / chips / msp430 / usart / Msp430SpiNoDmaP.nc
index 57102aaf7d0dccd839aa3ea623c0ff2aefca9152..3fc9d9a7067b07b8353fa2959ff38b21679c3e1b 100644 (file)
@@ -31,6 +31,7 @@
 
 /**
  * @author Jonathan Hui <jhui@archedrock.com>
+ * @author Jan Hauer <hauer@tkn.tu-berlin.de> (bugfix in continueOp())
  * @version $Revision$ $Date$
  */
 
@@ -56,9 +57,9 @@ implementation {
     SPI_ATOMIC_SIZE = 2,
   };
 
-  norace uint8_t* m_tx_buf;
-  norace uint8_t* m_rx_buf;
   norace uint16_t m_len;
+  norace uint8_t* COUNT_NOK(m_len) m_tx_buf;
+  norace uint8_t* COUNT_NOK(m_len) m_rx_buf;
   norace uint16_t m_pos;
   norace uint8_t m_client;
 
@@ -119,27 +120,24 @@ implementation {
 
   void continueOp() {
 
-    uint8_t end;
-    uint8_t tmp;
-
-    atomic {
-      call Usart.tx( m_tx_buf ? m_tx_buf[ m_pos ] : 0 );
-
-      end = m_pos + SPI_ATOMIC_SIZE;
-      if ( end > m_len )
-        end = m_len;
-
-      while ( ++m_pos < end ) {
-        while( !call Usart.isTxIntrPending() );
-        call Usart.clrTxIntr();
-        call Usart.tx( m_tx_buf ? m_tx_buf[ m_pos ] : 0 );
-        while( !call Usart.isRxIntrPending() );
-        call Usart.clrRxIntr();
-        tmp = call Usart.rx();
-        if ( m_rx_buf )
-          m_rx_buf[ m_pos - 1 ] = tmp;
-      }
-    }
+   uint8_t end;
+   uint8_t tmp;
+
+   atomic {
+     call Usart.tx( m_tx_buf ? m_tx_buf[ m_pos ] : 0 );
+
+     end = m_pos + SPI_ATOMIC_SIZE;
+     if ( end > m_len )
+       end = m_len;
+
+     while ( ++m_pos < end ) {
+       while( !call Usart.isRxIntrPending() );
+       tmp = call Usart.rx();
+       if ( m_rx_buf )
+         m_rx_buf[ m_pos - 1 ] = tmp;
+       call Usart.tx( m_tx_buf ? m_tx_buf[ m_pos ] : 0 );
+     }
+   }
 
   }