Программирование микроконтроллеров. Часть 11-1
Последовательный интерфейс SPI
И снова здравствуйте.
SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.
Интерфейс SPI предназначен для коммуникации с периферийными устройствами, такими как сдвиговые регистры, внешняя память, часы реального времени и пр. При этом микроконтроллер может выступать как в качестве ведущего устройства, так и ведомого.
Характеристики интерфейса SPI:
- Полный дуплекс, трехпроводная синхронная передача данных
- Возможность работы в качестве ведущего/ведомого устройства
- Выбор порядка передачи данных (младший или старший бит первым)
- 7 скоростей передачи
- Прерывания по окончанию передачи
- Защита от записи в еще не опустошенный буфер передачи
- Режим пробуждения
- Повышение скорости передачи вдвое в режиме ведущего устройства
Регистры интерфейса SPI:
- SPCR - регистр управления модулем SPI
- SPSR - регистр контроля
- SPDR - регистр данных
Регистр SPCR0:
Бит SPIE0 (7) регистра SPCR0 разрешает прерывания от модуля SPI если установить в 1.
Бит SPE0 (6) регистра SPCR0 включает модуль SPI если установить в 1.
Бит DORD (5) регистра SPCR0 управляет порядком передачи (1 - младший бит первым / 0 - старший бит первым).
Бит MSTR0 (4) регистра SPCR0 выбирает режим работы (1 - ведущий / 0 - ведомый).
Бит CPOL0 (3) регистра SPCR0 управляет полярностью тактового сигнала (0 - импульсы положительной полярности, если нет импульсов, на выходе 0 / 1 - импульсы отрицательной полярности, если нет импульсов, на выходе 1).
Бит CPHA0 (2) регистра SPCR0 управляет фазой тактового сигнала (0 - для CPOL0=0 - по нарастающему фронту, для CPOL0=1 - по спадающему фронту / 1 - наоборот)
Бит SPR01 (1) и SPR00 (0) регистра SPCR0 выбор скорости передачи:
- 00 - CLK/4
- 01 - CLK/16
- 10 - CLK/64
- 110 - CLK/128
Регистр SPSR0:
Бит SPIF0 (7) регистра SPSR0 - флаг прерывания от SPI (1 - если поступило прерывание)
Бит WCOL0 (6) регистра SPSR0 - конфликт записи данных (1 - если запись в регистр SPDR происходит во время передачи предыдущего байта).
Бит SPI2X0 (1) регистра SPSR0 - увеличивает скорость передачи вдвое, если установить 1.
В следующей части я покажу как управлять семисегментным LED индикатором через SPI интерфейс.
Если есть вопросы и предложения по этому уроку, пишите комментарии буду рад ответить на ваши вопросы.
Часть 1
Часть 2-1 Часть 2-2
Часть 3-1 Часть 3-2
Часть 4-1 Часть 4-2
Часть 5
Часть 6-1 Часть 6-2
Часть 7
Часть 8-1 Часть 8-2
Часть 9
Часть 10