Other Parts Discussed in Thread: MSP430F5438A, MSP430F5438
I have an application that utilizes the UCB1 as an SPI slave feeding through DMA channel 0. The UCSWRST bit is UCB1 is initialized once at startup and the UCSWRST bit is used to enable/disable the port thereafter. The behavoir is the same in both 3 pin and 4 pin slave modes.
This has been working fine on the 'F5438 Rev L chip, but on the 'F5438 Rev B chip, the UCB1 shift register does not reset between uses. It appears as though UCB1 'keeps' an extra bit following its first use which then forces all further uses to be off by one bit.
1st: 138 bytes - all are ok.
2nd: 138 bytes - all bytes are shifted right by 1 bit. 0xFA becomes 0x7D; 0x8A becomes 0x45; 0x33 & 0x00 become 0x19 & 0x80, etc.
3rd, 4th, etc., are identical in form to 2nd usage.
Workaround:
If I initialize UCB1 to master mode and then switch back to slave mode between each usage, the shift register is reset correctly and the port works properly.
Further info:
The UCB1 and DMA0 are initialized in active mode, the CPU then enters LPM3 until awakened by an external interrupt indicating the end of reception.
Is this an unpublished errata? Has this problem been previously identified? Any idea if the workaround is sufficient?
Thanks for any help/confirmation