I2C Clock control register (I2C_CCR)

Регистр управления тактированием интерфейса I2C

Смещение (Address offset): 0x1C

Reset value: 0x0000

15141312111098
F/S DUTY Reserved CCR[11:8]
rwrw---rw
00000000
76543210
CCR[7:0]
rw
00000000


Изменение регистра I2C_CCR возможно только когда отключен интерфейс I2C (PE=0 в регистре I2C_CR1).



Биты
Имя
Описание
15
F/S
I2C master mode selection
Выбор скоростного режима

 0 :  Standard-mode (Sm) - стандартный режим до 100 кГц

 1 :  Fast-mode (Fm) - быстрый режим до 400 кГц

14
DUTY
Fm mode duty cycle
Выбор длительности импульсов на шине I2C в fast-mode

Выбирает отношение времени низкого состояния к времени высокого состояния:

 0 :  tlow/thigh = 2

 1 :  tlow/thigh = 16/9

13:12
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса.
11:0
CCR[11:0]
Clock control register in Fm/Sm mode (Master mode)
Управление частотой тактовых импульсов SCL в режиме master

fPCLK1 - частота APB1.

В режиме Standard-mode (Sm):

  CCR=fPCLK1/(2*fSCL);

  для fPCLK1=36 МГц, fSCL=100 кГц, CCR=180.

  tlow = thigh = CCR * TPCLK1

В режиме Fast-mode (Fm):

-  Если DUTY=0:

  CCR=fPCLK1/(3*fSCL);

  для fPCLK1=36 МГц, fSCL=400 кГц, CCR=30.

  thigh = CCR * TPCLK1

  tlow = 2 * CCR * TPCLK1

-  Если DUTY=1:

  CCR=fPCLK1/(25*fSCL);   fPCLK1 - должна быть кратна 10 МГц!

  для fPCLK1=30 МГц, fSCL=400 кГц, CCR=3.

  thigh = 9 * CCR * TPCLK1

  tlow = 16 * CCR * TPCLK1

Минимальное значение регистра равно 0x04, за исключением режима Fm DUTY=1, где минимальное значение - 0x01.

Частота тактовых импульсов SCL примерно равна 1/(thigh+tlow). Реальная частота немного отличается из-за задержки на входе аналогового фильтра помех.

Изменение CCR возможно только когда отключен интерфейс I2C (PE=0 в регистре I2C_CR1).



/*******************  Bit definition for I2C_CCR register  ********************/

#define  I2C_CCR_CCR      ((uint16_t)0x0FFF)   /* Clock Control Register in Fast/Standard mode (Master mode) */
#define  I2C_CCR_DUTY     ((uint16_t)0x4000)   /* Fast Mode Duty Cycle */
#define  I2C_CCR_FS       ((uint16_t)0x8000)   /* I2C Master Mode Selection */