]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/msp430/usci/HplMsp430UsciRegP.nc
USCI UART output on USCI_A1 is working, using ACLK as BRCLK. Baud rate
[tinyos-2.x.git] / tos / chips / msp430 / usci / HplMsp430UsciRegP.nc
index cde8ae1acbc44247886d0cbc6e9a0402329c840d..67f650a7e5d4e8a94f658410071ae9b17394bfe0 100644 (file)
@@ -85,66 +85,72 @@ implementation
   #define UCxxIe (*TCAST(volatile uint8_t* ONE, Ie_addr))
   #define UCxxIfg (*TCAST(volatile uint8_t* ONE, Ifg_addr))
 
+#if 0
   #define ASSIGNBITS(reg, mask, value) \
                (reg = ((reg) & ~(mask)) | ((value) & (mask)))
+#endif
 
   #define RENDER(name) \
-       command volatile uint8_t* Registers.ptr##name() { \
+       async command volatile uint8_t* Registers.ptr##name() { \
                return &UCxx##name; \
        } \
-       command uint8_t Registers.get##name(uint8_t mask) { \
+       async command uint8_t Registers.get##name(uint8_t mask) { \
                return READ_FLAG(UCxx##name, mask); \
        } \
-       command void Registers.set##name(uint8_t mask) { \
+       async command void Registers.set##name(uint8_t mask) { \
                SET_FLAG(UCxx##name, mask); \
        } \
-       command void Registers.clr##name(uint8_t mask) { \
+       async command void Registers.clr##name(uint8_t mask) { \
                CLR_FLAG(UCxx##name, mask); \
        } \
-       command void Registers.assign##name(uint8_t mask, uint8_t value) { \
-               ASSIGNBITS(UCxx##name, mask, value); \
+       async command void Registers.assign##name(uint8_t value) { \
+               UCxx##name = value; \
        }
 
   #define RENDER_A(name) \
-       command volatile uint8_t* Registers.ptr##name() { \
+       async command volatile uint8_t* Registers.ptr##name() { \
                return &UCAx##name; \
        } \
-       command uint8_t Registers.get##name(uint8_t mask) { \
+       async command uint8_t Registers.get##name(uint8_t mask) { \
                if (IS_USCI_Ax) \
                        return READ_FLAG(UCAx##name, mask); \
+               else \
+                       return 0; \
        } \
-       command void Registers.set##name(uint8_t mask) { \
+       async command void Registers.set##name(uint8_t mask) { \
                if (IS_USCI_Ax) \
                        SET_FLAG(UCAx##name, mask); \
        } \
-       command void Registers.clr##name(uint8_t mask) { \
+       async command void Registers.clr##name(uint8_t mask) { \
                if (IS_USCI_Ax) \
                        CLR_FLAG(UCAx##name, mask); \
        } \
-       command void Registers.assign##name(uint8_t mask, uint8_t value) { \
+       async command void Registers.assign##name(uint8_t value) { \
                if (IS_USCI_Ax) \
-                       ASSIGNBITS(UCAx##name, mask, value); \
+                       UCAx##name = value; \
        }
 
   #define RENDER_B(name) \
-       command volatile uint8_t* Registers.ptr##name() { \
+       async command volatile uint8_t* Registers.ptr##name() { \
                return &UCBx##name; \
        } \
-       command uint8_t Registers.get##name(uint8_t mask) { \
+       async command uint8_t Registers.get##name(uint8_t mask) { \
                if (IS_USCI_Bx) \
                        return READ_FLAG(UCBx##name, mask); \
+               else \
+                       return 0; \
        } \
-       command void Registers.set##name(uint8_t mask) { \
+       async command void Registers.set##name(uint8_t mask) { \
                if (IS_USCI_Bx) \
                        SET_FLAG(UCBx##name, mask); \
        } \
-       command void Registers.clr##name(uint8_t mask) { \
+       async command void Registers.clr##name(uint8_t mask) { \
                if (IS_USCI_Bx) \
                        CLR_FLAG(UCBx##name, mask); \
        } \
-       command void Registers.assign##name(uint8_t mask, uint8_t value) { \
+       async command void Registers.assign##name(uint8_t value) { \
                if (IS_USCI_Bx) \
-                       ASSIGNBITS(UCBx##name, mask, value); \
+                       UCBx##name = value; \
        }
 
 #if 0
@@ -167,7 +173,7 @@ implementation
   MSP430REG_NORACE(UCxIfg);
 #endif
 
-  command msp430_usci_mode_t Registers.getMode()
+  async command msp430_usci_mode_t Registers.getMode()
   {
     if (READ_FLAG(UCxxCtl0, UCSYNC)) {
       if (READ_FLAG(UCxxCtl0, UCMODE_3) == UCMODE_3)
@@ -179,13 +185,17 @@ implementation
     }
   }
 
-  command bool Registers.setMode(msp430_usci_mode_t mode)
+  /* Doesn't really set the mode, but checks the most for the device and inits
+   * the device.
+   */
+  async command bool Registers.setMode(msp430_usci_mode_t mode)
   {
     if (mode == USCI_UART && IS_USCI_Bx)
       return FALSE;
     if (mode == USCI_I2C && IS_USCI_Ax)
       return FALSE;
-    SET_FLAG(UCxxCtl0, UCSYNC);
+    SET_FLAG(UCxxCtl1, UCSWRST);
+    return TRUE;
   }
 
   RENDER(Ctl0);
@@ -197,28 +207,28 @@ implementation
   RENDER(Stat);
 
   /* RENDER(Rxbuf); */
-  command volatile uint8_t* Registers.ptrRxbuf()
+  async command volatile uint8_t* Registers.ptrRxbuf()
   {
     return &UCxxRxbuf;
   }
 
-  command uint8_t Registers.getRxbuf()
+  async command uint8_t Registers.getRxbuf()
   {
     return UCxxRxbuf;
   }
 
   /* RENDER(Txbuf); */
-  command volatile uint8_t* Registers.ptrTxbuf()
+  async command volatile uint8_t* Registers.ptrTxbuf()
   {
     return &UCxxTxbuf;
   }
 
-  command uint8_t Registers.getTxbuf()
+  async command uint8_t Registers.getTxbuf()
   {
     return UCxxTxbuf;
   }
 
-  command void Registers.setTxbuf(uint8_t byte)
+  async command void Registers.setTxbuf(uint8_t byte)
   {
     UCxxTxbuf = byte;
   }
@@ -230,63 +240,63 @@ implementation
   RENDER_B(I2Csa);
 
   /* RENDER(Ie); */
-  command bool Registers.getIeRx()
+  async command bool Registers.getIeRx()
   {
     return READ_FLAG(UCxxIe, UCAxRXIFG);
   }
 
-  command void Registers.setIeRx()
+  async command void Registers.setIeRx()
   {
     SET_FLAG(UCxxIe, UCAxRXIFG);
   }
 
-  command void Registers.clrIeRx()
+  async command void Registers.clrIeRx()
   {
     CLR_FLAG(UCxxIe, UCAxRXIFG);
   }
 
-  command bool Registers.getIeTx()
+  async command bool Registers.getIeTx()
   {
     return READ_FLAG(UCxxIe, UCAxTXIFG);
   }
 
-  command void Registers.setIeTx()
+  async command void Registers.setIeTx()
   {
     SET_FLAG(UCxxIe, UCAxTXIFG);
   }
 
-  command void Registers.clrIeTx()
+  async command void Registers.clrIeTx()
   {
     CLR_FLAG(UCxxIe, UCAxTXIFG);
   }
 
   /* RENDER(Ifg); */
-  command bool Registers.getIfgRx()
+  async command bool Registers.getIfgRx()
   {
     return READ_FLAG(UCxxIfg, UCAxRXIFG);
   }
 
-  command void Registers.setIfgRx()
+  async command void Registers.setIfgRx()
   {
     SET_FLAG(UCxxIfg, UCAxRXIFG);
   }
 
-  command void Registers.clrIfgRx()
+  async command void Registers.clrIfgRx()
   {
     CLR_FLAG(UCxxIfg, UCAxRXIFG);
   }
 
-  command bool Registers.getIfgTx()
+  async command bool Registers.getIfgTx()
   {
     return READ_FLAG(UCxxIfg, UCAxTXIFG);
   }
 
-  command void Registers.setIfgTx()
+  async command void Registers.setIfgTx()
   {
     SET_FLAG(UCxxIfg, UCAxTXIFG);
   }
 
-  command void Registers.clrIfgTx()
+  async command void Registers.clrIfgTx()
   {
     CLR_FLAG(UCxxIfg, UCAxTXIFG);
   }