20.7. Описание регистров
20.7.1. CTRL - регистр управления SPI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x00 |
CLK2X |
ENABLE |
DORD |
MASTER |
MODE[1:0] |
PRESCALER[1:0] |
|
CTRL |
Чтение/запись |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Бит 7 - CLK2X: режим удвоенной скорости
Установка данного бита приводит к двукратному повышению частоты сигнала SCK в ведущем режиме (см. таблицу 20.4).
- Бит 6 - ENABLE: разрешение работы модуля SPI
Установка данного бита разрешает работу модуля SPI. Чтобы модуль SPI мог выполнить какую-либо операцию, данный бит должен быть равен единице.
- Бит 5 - DORD: очередность передачи бит
От значения бита DORD зависит, какой бит, старший или младший, будет первым передан сдвигом из регистра данных. Если бит DORD равен единице, то первым будет передан младший бит данных. Если же в DORD записан нуль, то первым будет передан старший бит данных.
- Бит 4 - MASTER: выбор режима ведущий/подчиненный
Для выбора ведущего режима в данный бит необходимо записать единицу, а для выбора подчиненного режима - ноль. Если после установки бита MASTER вывод SS настроить как вход и подать на него низкий уровень, бит MASTER будет сброшен.
- Бит 3:2 - MODE[1:0]: режим SPI
Данные биты задают режим передачи данных. Четыре варианта соотношения фазы и полярности сигнала SCK с сигналами данных показаны на рисунке 20.3. От данных бит зависит, каким будет первый фронт импульсов синхронизации (передний фронт), нарастающим или падающим, и по какому фронту, переднему или заднему, будет выполняться установка и выборка данных.
Если передний фронт - нарастающий (падающий), то, когда шина будет в состоянии IDLE, линия SCK будет находиться в низком (высоком) состоянии.
Таблица 20.3. Режимы SPI
MODE[1:0] |
Групповая конфигурация |
Передний фронт |
Задний фронт |
00 |
0 |
Нарастающий; выборка |
Падающий; выборка |
01 |
1 |
Нарастающий; установка |
Падающий; установка |
10 |
2 |
Падающий; выборка |
Нарастающий; выборка |
11 |
3 |
Падающий; установка |
Нарастающий; установка |
- Биты 1:0 - PRESCALER[1:0]: предделитель синхронизации шины SPI
Данные два бита управляют частотой сигнала SCK при работе модуля SPI в ведущем режиме. На работу в подчиненном режиме настройка данных бит никак не влияет. Соотношение между частотой сигнала SCK и частотой синхронизации УВВ (CLKPER) демонстрирует таблица 20.4.
Таблица 20.4. Соотношение частот SCK и CLKPER
CLK2X |
PRESCALER[1:0] |
Частота SCK |
0 |
00 |
CLKPER/4 |
0 |
01 |
CLKPER/16 |
0 |
10 |
CLKPER/64 |
0 |
11 |
CLKPER/128 |
1 |
00 |
CLKPER/2 |
1 |
01 |
CLKPER/8 |
1 |
10 |
CLKPER/32 |
1 |
11 |
CLKPER/64 |
20.7.2. INTCTRL - регистр управления прерываниями SPI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x01 |
|
INTCTRL |
Чтение/запись |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Биты 7:2 - Res: резервные биты
Данные биты не используются и зарезервированы для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.
- Биты 1:0 - INTLVL[1:0]: уровень прерывания модуля SPI
С помощью данных бит можно разрешить работу прерывания модуля SPI и задать его уровень. Более детально об уровнях прерывания см. в разделе 12. "Прерывания и программируемый многоуровневый контроллер прерываний". После разрешения прерывания, его генерация инициируется в случае установки флага IF в регистре STATUS.
20.7.3. STATUS - регистр статуса модуля SPI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x02 |
|
STATUS |
Чтение/запись |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Бит 7 - IF: флаг прерывания модуля SPI
Данный флаг становится равным единице по завершении последовательной передачи данных из регистра данных и последовательного приема данных в этот же регистр. Флаг IF также устанавливается, если модуль SPI работает в ведущем режиме и на его, настроенный как вход, вывод SS подается низкий уровень. Флаг IF сбрасывается аппаратно при переходе на вектор прерываний. Альтернативно, флаг SPIF может быть сброшен первым чтением регистра STATUS с установленным флагом IF и при выполнении доступа к регистру данных.
- Бит 6 - WRCOL: флаг обнаружения ошибочной записи
Бит WRCOL становится равным единице, если во время передачи выполняется запись в регистр данных. Сброс бита WRCOL происходит при первом чтении регистра STATUS с установленным битом WRCOL и при осуществлении доступа к регистру данных.
Данные биты являются резервными и всегда считываются с нулевыми значениями. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.
20.7.4. DATA - регистр данных SPI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x03 |
|
DATA |
Чтение/запись |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Регистр данных используется для передачи и приема данных. Запись в регистр инициирует передачу данных методом последовательных сдвигов через выходную линию шины SPI. При чтении регистра возвращается значение из буферного регистра, в котором сберегается последний успешно принятый байт данных.
20.8. Обзор регистров
Адрес |
Наимен. |
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 |
+0x00 |
CTRL |
CLK2X |
ENABLE |
DORD |
MASTER |
MODE[1:0] |
PRESCALER[1:0] |
+0x01 |
INTCTRL |
- |
- |
- |
- |
- |
- |
INTLVL[1:0] |
+0x02 |
STATUS |
IF |
WRCOL |
- |
- |
- |
- |
- |
- |
+0x03 |
DATA |
DATA[7:0] |
20.9. Векторы прерываний модуля SPI
Таблица 20.5. Вектор прерываний модуля SPI и значение смещения его адреса
Смещение |
Источник |
Описание прерывания |
0x00 |
SPI_vect |
Вектор прерываний модуля SPI |
|