USI ATtiny85: регистры и биты
Универсальный последовательный интерфейс USI — аппаратная основа для SPI (трёхпроводный режим) и I²C (двухпроводный режим): сдвиговый регистр USIDR, 4-битный счётчик тактов и детектор условия START. Протокол достраивается программно: тактирование, адреса и подтверждения задаёт код.
Данные: описание ATtiny85 из пакета Microchip ATtiny_DFP 3.4.278 (Apache-2.0), сверено со сводкой регистров даташита 2586Q.
Регистры блока
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
USICR = 0;Ассемблер Microchip (tn85def.inc)
ldi r16, 0x00
out USICR, r16USICR — управление USI
Адрес 0x2D (I/O 0x0D), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | USISIE | USIOIE | USIWM1 | USIWM0 | USICS1 | USICS0 | USICLK | USITC |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | W | W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- USISIE (бит 7) — Прерывание по условию START.
- USIOIE (бит 6) — Прерывание по переполнению счётчика USI.
- USIWM1:0 (биты 5:4) — Режим проводов USI.
USIWM1:0 Значение 00 USI выключен, выводы работают как порт 01 Трёхпроводный режим (как SPI): DO, DI, USCK 10 Двухпроводный режим (как I²C): SDA, SCL 11 Двухпроводный, SCL удерживается низким и при переполнении счётчика - USICS1:0 (биты 3:2) — Источник тактирования USI.
- USICLK (бит 1) — Программный такт (строб) USI.
- USITC (бит 0) — Переключение вывода тактирования USI.
USISR — состояние USI
Адрес 0x2E (I/O 0x0E), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | USISIF | USIOIF | USIPF | USIDC | USICNT3 | USICNT2 | USICNT1 | USICNT0 |
| Доступ | R/W | R/W | R/W | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- USISIF (бит 7) — Флаг условия START.
- USIOIF (бит 6) — Флаг переполнения счётчика USI.
- USIPF (бит 5) — Флаг условия STOP.
- USIDC (бит 4) — Конфликт данных на выходе USI.
- USICNT3:0 (биты 3:0) — Счётчик тактов USI.
USIDR — данные USI (сдвиговый регистр)
Адрес 0x2F (I/O 0x0F), 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
USIBR — буфер данных USI
Адрес 0x30 (I/O 0x10), 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
Частые вопросы
Какими командами ассемблера обращаться к регистрам USI ATtiny85?
Командами IN и OUT доступны USICR (0x0D), USISR (0x0E), USIDR (0x0F) и USIBR (0x10); из них USICR, USISR, USIDR и USIBR — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.
Какие значения у регистров USI после сброса?
Все регистры блока, для которых даташит 2586Q приводит значение после сброса (USICR, USISR, USIDR и USIBR), после сброса равны нулю.
Как установить биты USICR на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: USICR = (1 << USISIE) | (1 << USIOIE); записывает новое значение целиком, а USICR |= (1 << USISIE); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. Atmel. ATtiny25/45/85 datasheet (2586Q) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATtiny_DFP 3.4.278, описание ATtiny85 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATtiny85
- Все регистры ATtiny85Таблица по адресам
- Порты ввода-выводаPINB, DDRB, PORTB
- Аналоговый компараторADCSRB, ACSR, DIDR0
- АЦПADCSRB, ADC, ADCSRA, ADMUX, DIDR0
- Внешние прерыванияPCMSK, MCUCR, GIFR, GIMSK
- EEPROMEECR, EEDR, EEAR
- Таймер-счётчик 0 (8 бит)OCR0B, OCR0A, TCCR0A, GTCCR, TCNT0, TCCR0B
- Таймер-счётчик 1 (8 бит, с PLL)DTPS1, DT1B, DT1A, OCR1B, GTCCR, OCR1C
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, PRR, WDTCR, DWDR