X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Fmsp430%2Fusci%2FHplMsp430UsciRegP.nc;h=67f650a7e5d4e8a94f658410071ae9b17394bfe0;hb=b054fbe2a8deacc35f0067deb15274da53d96984;hp=cde8ae1acbc44247886d0cbc6e9a0402329c840d;hpb=02d7b93b83a3bd5299b12bb3ed85c65860578f3d;p=tinyos-2.x.git diff --git a/tos/chips/msp430/usci/HplMsp430UsciRegP.nc b/tos/chips/msp430/usci/HplMsp430UsciRegP.nc index cde8ae1a..67f650a7 100644 --- a/tos/chips/msp430/usci/HplMsp430UsciRegP.nc +++ b/tos/chips/msp430/usci/HplMsp430UsciRegP.nc @@ -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); }