I2C Control register 2 (I2C_CR2)
Второй регистр управления интерфейсом I2C
Смещение (Address offset): 0x04
Reset value: 0x0000
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| Reserved | LAST | DMAEN | ITBUFEN | ITEVTEN | ITERREN | ||
| --- | --- | --- | rw | rw | rw | rw | rw |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | FREQ[5:0] | ||||||
| --- | --- | rw | rw | rw | rw | rw | rw |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 : следующий DMA EOT не завершает передачу
1 : следующий DMA EOT завершает передачу
Этот бит используется в режиме приёма мастером, чтобы разрешить генерацию NAСK по окончании приёма.
0 : запрет запроса DMA
1 : разрешает запрос DMA, когда TxE=1 или RxNE =1
0 : состояния TxE = 1 or RxNE = 1 не вызывают никакого прерывания
1 : состояния TxE = 1 or RxNE = 1 вызывают прерывание по событию (Event Interrupt) независимо от состояния DMAEN.
0 : прерывание по событию запрещено
1 : прерывание по событию разрешено
Прерывание генерируется когда:
- SB = 1 (Master)
- ADDR = 1 (Master/Slave)
- ADD10= 1 (Master)
- STOPF = 1 (Slave)
- BTF = 1 with no TxE or RxNE event
- TxE event to 1 if ITBUFEN = 1
- RxNE event to 1 if ITBUFEN = 1
0 : прерывание по ошибкам запрещено
1 : прерывание по ошибкам разрешено
Прерывание генерируется когда:
- BERR = 1
- ARLO = 1
- AF = 1
- OVR = 1
- PECERR = 1
- TIMEOUT = 1
- SMBAlert = 1
Биты должны соответствовать значению тактовой частоты APB, к которой подключен контроллер I2C.
000000 : недопустимое значение
000001 : недопустимое значение
000010 : 2 MHz
000011 : 3 MHz
...
110010 : 50 MHz
выше : недопустимое значение
Поле FREQ используется периферийным устройством для генерации времени настройки и удержания данных в соответствии со спецификациями I2C.
Минимально допустимая частота составляет 2 МГц, максимальная частота ограничена максимальной частотой APB, но в любом случае не может превышать 50 МГц (аппаратные ограничения контроллера).
/******************* Bit definition for I2C_CR2 register ********************/
#define I2C_CR2_FREQ ((uint16_t)0x003F) /* FREQ[5:0] bits (Peripheral Clock Frequency) */
#define I2C_CR2_FREQ_0 ((uint16_t)0x0001) /* Bit 0 */
#define I2C_CR2_FREQ_1 ((uint16_t)0x0002) /* Bit 1 */
#define I2C_CR2_FREQ_2 ((uint16_t)0x0004) /* Bit 2 */
#define I2C_CR2_FREQ_3 ((uint16_t)0x0008) /* Bit 3 */
#define I2C_CR2_FREQ_4 ((uint16_t)0x0010) /* Bit 4 */
#define I2C_CR2_FREQ_5 ((uint16_t)0x0020) /* Bit 5 */
#define I2C_CR2_ITERREN ((uint16_t)0x0100) /* Error Interrupt Enable */
#define I2C_CR2_ITEVTEN ((uint16_t)0x0200) /* Event Interrupt Enable */
#define I2C_CR2_ITBUFEN ((uint16_t)0x0400) /* Buffer Interrupt Enable */
#define I2C_CR2_DMAEN ((uint16_t)0x0800) /* DMA Requests Enable */
#define I2C_CR2_LAST ((uint16_t)0x1000) /* DMA Last Transfer */