34.6.2.1 Initialization
The following registers are enable-protected, meaning they can be written only when the I2C interface is disabled (CTRLA.ENABLE = 0):
- Control A register (CTRLA), except Enable (CTRLA.ENABLE) and Software Reset (CTRLA.SWRST) bits
- Control B register (CTRLB), except Acknowledge Action (CTRLB.ACKACT) and Command (CTRLB.CMD) bits
- Baud register (BAUD)
- Address register (ADDR) in client operation
When the I2C is enabled or is being enabled (CTRLA.ENABLE = 1), writing to these registers is discarded. If the I2C is being disabled, writing to these registers is completed after the disabling.
Enable protection is denoted by the Enable-Protection property in the register description.
Before the I2C is enabled, it must be configured as outlined by the following steps:
- Select I2C Host or Client mode by writing 0x4 (Client mode) or 0x5 (Host mode) to the Operating Mode bits in the CTRLA register (CTRLA.MODE).
- If desired, select the SDA Hold Time in the CFGCON1 register (CFGCON1.I2CDSELx).
- In Client mode, the minimum client setup time for the SDA can be selected in the SDA Setup Time bit group in the Control C register (CTRLC.SDASETUP).
- If desired, enable smart operation by setting the Smart Mode Enable bit in the CTRLB register (CTRLB.SMEN).
- If desired, enable SCL low time-out by setting the SCL Low Time-Out bit in the Control A register (CTRLA.LOWTOUT).
- In Host mode:
- Select the inactive bus time-out in the Inactive Time-Out bit group in the CTRLA register (CTRLA.INACTOUT).
- Write the Baud Rate register (BAUD) to generate the desired baud rate.
- Configure the address match configuration by writing the Address mode value in the CTRLB register (CTRLB.AMODE).
- Set the Address and Address Mask value in the Address register (ADDR.ADDR and ADDR.ADDRMASK) according to the address configuration.