TIMx slave mode control register (TIMx_SMCR)
Регистр управления таймерами TIM2 - TIM5 в подчинённом (slave) режиме
Смещение (Address offset): 0x08
Reset value: 0x0000
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
ETP | ECE | ETPS[0:1] | ETF[3:0] | ||||
rw | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
MSM | TS[2:0] | Reserved | SMS[2:0] | ||||
rw | rw | rw | rw | --- | rw | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 - ETR не инвертирован, активен на высоком уровне или нарастающим фронтом
1 - ETR инвертирован, активен на низком уровне или убывающим фронтом
0 - режим внешнего тактирование в режиме 2 отключен.
1 - режим внешнего тактирование в режиме 2 включен. Счетчик синхронизируется с любым активным фронтом сигнала ETRF.
- Установка бита ECE аналогична выбору режима внешнего тактирования в режиме 1 с TRGI подключенным к ETRF (SMS=111 и TS=111).
- Можно одновременно использовать внешнее тактирование в режиме 2 со следующими подчиненными режимами: режимом сброса (reset mode), стробирующим режимом (gated mode) и в режиме триггера (trigger mode). В этом случае TRGI не должен быть подключен к ETRF (биты TS не должен быть равны 111).
- Если одновременно включено внешнее тактирование в режиме 2 и в режиме 1, то вход внешнего тактового сигнала равен ETRF
Частота сигнала внешнего триггера должна быть не более 1/4 частоты CK_INT. Для высокочастотных внешних тактовых сигналов надо включить предделитель частоты ETRP:
00 - предделитель отключен
01 - Частота ETRP делится на 2
10 - Частота ETRP делится на 4
11 - Частота ETRP делится на 8
0000 : fsampling = fdts; фильтра нет
0001 : fsampling = fck_int; N = 2
0010 : fsampling = fck_int; N = 4
0011 : fsampling = fck_int; N = 8
0100 : fsampling = fdts/2; N = 6
0101 : fsampling = fdts/2; N = 8
0110 : fsampling = fdts/4; N = 6
0111 : fsampling = fdts/4; N = 8
1000 : fsampling = fdts/8; N = 6
1001 : fsampling = fdts/8; N = 8
1010 : fsampling = fdts/16; N = 5
1011 : fsampling = fdts/16; N = 6
1100 : fsampling = fdts/16; N = 8
1101 : fsampling = fdts/32; N = 5
1110 : fsampling = fdts/32; N = 6
1111 : fsampling = fdts/32; N = 8
0 : нет синхронизации
1 : реакция на событие на триггерном входе (TRGI) задерживается для синхронизации текущего таймера и его подчинённых устройств (через TRGO).
000 : Internal Trigger 0 (ITR0)
001 : Internal Trigger 1 (ITR1)
010 : Internal Trigger 2 (ITR2)
011 : Internal Trigger 3 (ITR3)
100 : TI1 Edge Detector (TI1F_ED)
101 : Filtered Timer Input 1 (TI1FP1)
110 : Filtered Timer Input 2 (TI2FP2)
111 : External Trigger input (ETRF)
Эти биты следует изменять когда они не используются (например: SMS=000), чтобы избежать неправильного определения границ при переходе
Slave TIM | ITR0 (TS = 000) | ITR1 (TS = 001) | ITR2 (TS = 010) | ITR3 (TS = 011) |
TIM2 | TIM1 | TIM8 | TIM3 | TIM4 |
TIM3 | TIM1 | TIM2 | TIM5 | TIM4 |
TIM4 | TIM1 | TIM2 | TIM3 | TIM8 |
TIM5 | TIM2 | TIM3 | TIM4 | TIM8 |
000 : Подчинённый режим отключен.
001 : Режим энкодера 1 (Encoder mode 1). Счет вверх/вниз по фронту TI2FP1 в зависимости от уровня на TI1FP2.
010 : Режим энкодера 2 (Encoder mode 2). Счет вверх/вниз по фронту TI2FP2 в зависимости от уровня на TI1FP1.
011 : Режим энкодера 3 (Encoder mode 3). Счет вверх/вниз по фронту и TI2FP1 и TI2FP2 в зависимости от уровня на другом входе.
100 : Режим сброса (Reset mode). Нарастающий фронт на выбранном триггерном входе TRGI повторно инициализирует счетчик и обновляет регистры.
101 : Стробирующий режим (gated mode). Таймер счетчика работает при высоком значении входного сигнала триггера (TRGI). Счетчик останавливается, но не сбрасывается, как только значение на входе TRGI становится низким. Можно управлять как запуском, так и остановкой счетчика.
110 : Режим триггера (trigger mode). Счетчик запускается на нарастающем фронте сигнала TRGI. Контролируется только запуск счетчика, но не его останов или сброс.
111 : Режим внешней синхронизации (External Clock mode 1). Нарастающий фронт выбранного входа триггера TRGI тактирует счетчик.
/******************* Bit definition for TIM_SMCR register *******************/
#define TIM_SMCR_SMS ((uint16_t)0x0007) /* SMS[2:0] bits (Slave mode selection) */
#define TIM_SMCR_SMS_0 ((uint16_t)0x0001) /* Bit 0 */
#define TIM_SMCR_SMS_1 ((uint16_t)0x0002) /* Bit 1 */
#define TIM_SMCR_SMS_2 ((uint16_t)0x0004) /* Bit 2 */
#define TIM_SMCR_TS ((uint16_t)0x0070) /* TS[2:0] bits (Trigger selection) */
#define TIM_SMCR_TS_0 ((uint16_t)0x0010) /* Bit 0 */
#define TIM_SMCR_TS_1 ((uint16_t)0x0020) /* Bit 1 */
#define TIM_SMCR_TS_2 ((uint16_t)0x0040) /* Bit 2 */
#define TIM_SMCR_MSM ((uint16_t)0x0080) /* Master/slave mode */
#define TIM_SMCR_ETF ((uint16_t)0x0F00) /* ETF[3:0] bits (External trigger filter) */
#define TIM_SMCR_ETF_0 ((uint16_t)0x0100) /* Bit 0 */
#define TIM_SMCR_ETF_1 ((uint16_t)0x0200) /* Bit 1 */
#define TIM_SMCR_ETF_2 ((uint16_t)0x0400) /* Bit 2 */
#define TIM_SMCR_ETF_3 ((uint16_t)0x0800) /* Bit 3 */
#define TIM_SMCR_ETPS ((uint16_t)0x3000) /* ETPS[1:0] bits (External trigger prescaler) */
#define TIM_SMCR_ETPS_0 ((uint16_t)0x1000) /* Bit 0 */
#define TIM_SMCR_ETPS_1 ((uint16_t)0x2000) /* Bit 1 */
#define TIM_SMCR_ECE ((uint16_t)0x4000) /* External clock enable */
#define TIM_SMCR_ETP ((uint16_t)0x8000) /* External trigger polarity */