26.5.5 Master Status
Normal TWI operation dictates that this register is regarded purely as a read-only register. Clearing any of the status flags is done indirectly by accessing the Master Transmits Address (TWIn.MADDR), the Master Data register (TWIn.MDATA), or the Command bits (CMD) in the Master Control B register (TWIn.MCTRLB).
Name: | MSTATUS |
Offset: | 0x05 |
Reset: | 0x00 |
Property: | - |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
RIF | WIF | CLKHOLD | RXACK | ARBLOST | BUSERR | BUSSTATE[1:0] | |||
Access | R/W | R/W | R/W | R | R/W | R/W | R/W | R/W | |
Reset | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – RIF Read Interrupt Flag
This bit is set to ‘1’ when the master byte read operation is successfully completed (i.e., no arbitration lost or bus error occurred during the operation). The read operation is triggered by software reading DATA or writing to ADDR registers with bit ADDR[0] written to ‘1’. A slave device must have responded with an ACK to the address and direction byte transmitted by the master for this flag to be set.
Writing a ‘1’ to this bit will clear the RIF. However, normal use of the TWI does not require the flag to be cleared by this method.
Clearing the RIF bit will follow the same software interaction as the CLKHOLD flag.
The RIF flag can generate a master read interrupt (see the description of the RIEN control bit in the TWIn.MCTRLA register).
Bit 6 – WIF Write Interrupt Flag
This bit is set when a master transmit address or byte write is completed, regardless of the occurrence of a bus error or an arbitration lost condition.
Writing a ‘1’ to this bit will clear the WIF. However, normal use of the TWI does not require the flag to be cleared by this method.
Clearing the WIF bit will follow the same software interaction as the CLKHOLD flag.
The WIF flag can generate a master write interrupt (see the description of the WIEN control bit in the TWIn.MCTRLA register).
Bit 5 – CLKHOLD Clock Hold
If read as ‘1’, this bit indicates that the master is currently holding the TWI clock (SCL) low, stretching the TWI clock period.
Writing a ‘1’ to this bit will clear the CLKHOLD flag. However, normal use of the TWI does not require the CLKHOLD flag to be cleared by this method, since the flag is automatically cleared when accessing several other TWI registers. The CLKHOLD flag can be cleared by:
- Writing a ‘1’ to it.
- Writing to the TWIn.MADDR register.
- Writing to the TWIn.MDATA register.
- Reading the TWIn.DATA register while the ACKACT control bits in TWIn.MCTRLB are set to either send ACK or NACK.
- Writing a valid command to the TWIn.MCTRLB register.
Bit 4 – RXACK Received Acknowledge
This bit is read-only and contains the most recently received Acknowledge bit from the slave. When read as ‘0’, the most recent acknowledge bit from the slave was ACK. When read as ‘1’, the most recent acknowledge bit was NACK.
Bit 3 – ARBLOST Arbitration Lost
If read as ‘1’ this bit indicates that the master has lost arbitration while transmitting a high data or NACK bit, or while issuing a Start or repeated Start condition (S/Sr) on the bus.
Writing a ‘1’ to it will clear the ARBLOST flag. However, normal use of the TWI does not require the flag to be cleared by this method. However, as for the CLKHOLD flag, clearing the ARBLOST flag is not required during normal use of the TWI.
Clearing the ARBLOST bit will follow the same software interaction as the CLKHOLD flag.
Given the condition where the bus ownership is lost to another master, the software must either abort operation or resend the data packet. Either way, the next required software interaction is in both cases to write to the TWIn.MADDR register. A write access to the TWIn.MADDR register will then clear the ARBLOST flag.
Bit 2 – BUSERR Bus Error
The BUSERR flag indicates that an illegal bus condition has occurred. An illegal bus condition is detected if a protocol violating Start (S), repeated Start (Sr), or Stop (P) is detected on the TWI bus lines. A Start condition directly followed by a Stop condition is one example of protocol violation.
Writing a ‘1’ to this bit will clear the BUSERR. However, normal use of the TWI does not require the BUSERR to be cleared by this method.
A robust TWI driver software design will treat the bus error flag similarly to the ARBLOST flag, assuming the bus ownership is lost when the bus error flag is set. As for the ARBLOST flag, the next software operation of writing the TWIn.MADDR register will consequently clear the BUSERR flag. For bus error to be detected, the bus state logic must be enabled and the system frequency must be 4x the SCL frequency.
Bits 1:0 – BUSSTATE[1:0] Bus State
These bits indicate the current TWI bus state as defined in the table below. After a System Reset or re-enabling, the TWI master bus state will be unknown. The change of bus state is dependent on the bus activity.
Writing 0x1 to the BUSSTATE bits forces the bus state logic into its Idle state. However, the bus state logic cannot be forced into any other state. When the master is disabled, the bus state is ‘unknown’.
Value | Name | Description |
---|---|---|
0x0 | UNKNOWN | Unknown bus state |
0x1 | IDLE | Bus is idle |
0x2 | OWNER | This TWI controls the bus |
0x3 | BUSY | The bus is busy |