]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/msp430/usci/Msp430SpiB1C.nc
Added SPI support. Now working using the loopback feature (UCLISTEN bit).
[tinyos-2.x.git] / tos / chips / msp430 / usci / Msp430SpiB1C.nc
index 9cfd71db4ec0b46bd3e8e9b97b178efb4ece9a40..93a9f22b7b28cb52222a5448c3612263ad98a32b 100644 (file)
  * This configuration provides the interface for using USCI_B1 in its SPI
  * mode.
  *
+ * The instantiator should set the blockSize, which represents the maximum
+ * number of bytes the underlying SPI stack will transmit or receive in a
+ * single interrupt service.  Increasing the block size decreases SPI
+ * communications time at the expense of reducing system responsiveness to
+ * other events.
+ *
+ * The blockSize is best set by considering the maximum time the SPI stack
+ * should be able to delay other events.  A rule of thumb formula would be:
+ *
+ * block_time = block_size / (spi_bitclock/8)
+ *
+ * For example, using a 500KHZ SPI bitclock, a block size of 64 bytes
+ * equates to a block time of 1 ms.  Note that this calculation is rough
+ * because it does not take into account ISR overhead and other factors.
+ *
+ * The implementation will use a default blockSize if set to 0 here.
+ *
  * @author R. Steve McKown <smckown@gmail.com>
  */
  
@@ -40,7 +57,7 @@
 
 #include "Msp430Usci.h"
 
-generic configuration Msp430SpiB1C() {
+generic configuration Msp430SpiB1C(uint16_t blockSize) {
   provides {
     interface Resource;
     interface ResourceRequested;
@@ -55,12 +72,12 @@ implementation {
     CLIENT_ID = unique(MSP430_USCIB1_RESOURCE)
   };
 
-  components new Msp430SpiP() as SpiP;
+  components new Msp430SpiP(blockSize) as SpiP;
   SpiByte = SpiP;
   SpiPacket = SpiP;
   Configure = SpiP;
 
-  components Msp430UsciA0C as UsciC;
+  components Msp430UsciB1C as UsciC;
   Resource = UsciC.Resource[CLIENT_ID];
   ResourceRequested = UsciC.ResourceRequested[CLIENT_ID];
   ArbiterInfo = UsciC.ArbiterInfo;
@@ -73,5 +90,5 @@ implementation {
   SpiP.STE -> IOC.UCB1STE;
   SpiP.SIMO -> IOC.UCB1SIMO;
   SpiP.SOMI -> IOC.UCB1SOMI;
-  SpiP.SCL -> IOC.UCB1SCL;
+  SpiP.CLK -> IOC.UCB1CLK;
 }