Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 6 / laba_6

.docx
Скачиваний:
2
Добавлен:
08.04.2022
Размер:
208.97 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

Индивидуальное

домашнее задание №6

по дисциплине «Микропроцессорные системы»

Тема: Работа с SPI

Студентка гр. 7502

Кузнецова М.А.

Преподаватель

Анисимов А. А.

Санкт-Петербург

2020

Цель работы: изучить передачу данных по интерфейсу SPI, использование SPI и ЦАП для получения пилообразного сигнала на осциллографе, работа с datasheet на ATMega328P. Создание программы на языке ассемблера.

Задачи:

1) К выходу ЦАП прицепляем канал осциллографа, чтобы контролировать выходной сигнал (ЦАП со встроенным SPI интерфейсом MCP4921).

2) Инициализируем SPI (все настройки проверяем по документации, режим работы, максимальная скорость), по переполнению таймера (необходимо, чтобы период пилообразного сигнала лежал в пределах одной секунды) выводим на ЦАП очередную порцию данных.

3) В качестве данных используем линейно возрастающее значение счётчика. То есть по сути мы просто инкрементируем значение с нуля до 4095, потом сбрасываемся обратно в ноль.

4) Получение на осциллографе мы увидим пилообразный сигнал.

Основные теоретические положения

В отличие от стандартного асинхронного последовательного интерфейса UART, SPI является синхронным интерфейсом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством (чаще всего в роли ведущего выступает микроконтроллер). Принимающая периферия (ведомая) синхронизирует получение битовой последовательности с тактовым сигналом. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Ведущее устройство выбирает ведомое для передачи, активируя сигнал «выбор кристалла» (chip select) на ведомой микросхеме. Периферия, не выбранная ведущим устройством, не принимает участие в передаче по SPI.

В SPI используются четыре линии передачи (рис. 1):

MOSI – выход ведущего, вход ведомого (Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.

MISO – вход ведущего, выход ведомого (Master ISlave Out). Служит для передачи данных от ведомого устройства ведущему.

SCK – последовательный тактовый сигнал (Serial Clock). Служит для передачи тактового сигнала для ведомых устройств.

–  CS (SS) –  выбор микросхемы, выбор ведомого (Chip Select, Slave Select).

Рисунок 1 – Схема организации SPI интерфейса

Главным составным блоком интерфейса SPI является обычный сдвиговый регистр, сигналы синхронизации и ввода/вывода битового потока которого и образуют интерфейсные сигналы. Таким образом, протокол SPI правильнее назвать не протоколом передачи данных, а протоколом обмена данными между двумя сдвиговыми регистрами, каждый из которых одновременно выполняет и функцию приемника, и функцию передатчика. Частота следования битовых интервалов в линиях данных SPI определяется синхросигналом SCK, который генерирует один из абонентов – ведущий (Master). Прочие абоненты – ведомые (Slave), которых может быть несколько, используют синхросигнал для определения моментов изменения битов на линии данных. Ведомые устройства никак не могут влиять на частоту следования битовых интервалов (в отличие, например, от интерфейса I2C, который не рассматривается в рамках данного пособия).

 Ведущий в подавляющем большинстве случаев является приемопередатчиком SPI в составе микроконтроллера (если аппаратный SPI отсутствует, его можно эмулировать программно). В качестве ведомого устройства обычно выступает какая-либо периферийная микросхема. Однако SPI можно использовать и для связи двух (или больше) микроконтроллеров, если существует такая необходимость.

 Передача битов осуществляется пакетами. Длина пакета чаще всего составляет 1 байт (8 битов), хотя встречаются реализации SPI с иной длиной пакета. Как в ведущем устройстве, так и в ведомом имеется (обычно недоступный из исполняемой программы) счетчик импульсов синхронизации (битов). Счетчик в ведомом устройстве позволяет последнему определить момент окончания передачи пакета. Счетчик битов сбрасывается в ноль при выключении (деактивации) подсистемы SPI, такая возможность всегда имеется в ведущем устройстве. В ведомом устройстве счетчик битов обычно сбрасывается деактивацией интерфейсного сигнала SS. Передача пакета, т. е. запуск генератора синхроимпульсов в ведущем, обычно осуществляется автоматически при записи передаваемого байта в регистр сдвига ведущего.

 Задание частоты следования битов FSCK осуществляется стандартным для последовательных интерфейсов способом: FSCK=FG/DIV, где FG – постоянная частота задающего генератора SPI, значение которой приведено в техническом описании на микросхему, DIV – делитель, который может быть задан программным образом. В ряде микроконтроллеров делитель DIV может быть выбран только из набора предопределенных значений (что реализовано в изучаемых микроконтроллерах серии AtTiny). В других значение DIV разрешается выбирать произвольно в пределах ограниченной разрядности.

 Поскольку действия на ведущем и ведомом устройствах тактируются одним и тем же сигналом SCK, к стабильности частоты этого сигнала не предъявляется никаких требований (за исключением ограничения сверху на длительности полупериодов, определяемого максимальной рабочей частотой более медленного абонента). Это позволяет использовать SPI в системах с низкостабильной частотой тактирования (тактовый генератор без кварцевой стабилизации с времязадающей RC-цепью), а также существенно облегчает программную эмуляцию ведущего устройства. Более того, при программной эмуляции вполне допустимо приостанавливать передачу «в середине» байта, если это допускает ведомое устройство.

Существует три типа подключения к шине SPI, в каждом из которых участвуют четыре сигнала. Самое простое подключение, в котором участвуют только две микросхемы, показано на рисунке 2. Здесь ведущий шины передает данные по линии MOSI синхронно со сгенерированным им же сигналом SCK, а ведомый захватывает переданные биты данных по определенным фронтам принятого сигнала синхронизации. Одновременно с этим ведомый отправляет свою посылку данных. Представленную схему можно упростить исключением линии MISO, если используемая подчиненная микросхема не предусматривает ответную передачу данных или в ней нет потребности. Одностороннюю передачу данных можно встретить у таких микросхем как ЦАП, цифровые потенциометры, программируемые усилители и драйверы. Таким образом, рассматриваемый вариант подключения подчиненной микросхемы требует 3 или 4 линии связи.

Чтобы подчиненная микросхема принимала и передавала данные, помимо наличия сигнала синхронизации необходимо также, чтобы линия СS была переведена в низкое состояние. В противном случае подчиненная микросхема будет неактивна. Когда используется только одна внешняя микросхема, может возникнуть соблазн исключения и линии CS за счет жесткой установки низкого уровня на входе выбора подчиненной микросхемы. Такое решение крайне нежелательно и может привести к сбоям или вообще невозможности передачи данных, так как вход выбора микросхемы служит для перевода в её исходное состояние и иногда инициирует вывод первого бита данных.

До начала передачи пакета, левее момента времени А, сигнал SS на выходе ведущего в высоком состоянии, ведомый неактивен, его выход MISO в отключенном состоянии, а входы ведомого MOSI и SCK не воспринимают сигналов, формируемых ведущим. Тактовый сигнал на выходе ведущего в этот период имеет низкий уровень.

Рисунок 2 – Диаграмма передачи данных по SPI, режим 0

Для активации ведомого ведущий переводит в активное (низкое) состояние сигнал SS выбора ведомого (момент времени A). Ведомый включается, его вход тактирования способен воспринимать тактовый сигнал, а вывод MISO переходит в режим выхода. Тактовые импульсы пока еще не начались, выходные сигналы на линях данных MOSI и MISO теперь отражают значения бита, который будет первым передан другому абоненту.

 Через некоторое время ведущий начинает формирование пакета сдвиговых импульсов – сигнал SCK. Перепады тактового сигнала вызывают сдвиг содержимого сдвиговых регистров ведущего и ведомого, а также захват новых значений битов после сдвига. Моменты сдвига и захвата должны быть разнесены во времени, поэтому эти действия выполняются в интерфейсе SPI по разным перепадам тактовых импульсов. Диаграмма изображена в предположении, что захват производится по нарастанию тактового сигнала (по нечетным перепадам на рисунке, а сдвиг в регистрах — по спаду (четные перепады). Таким образом, порядок событий при действии каждого тактового импульса можно описать как «захват, затем сдвиг» (Latch, then Shift).

 После окончания обмена пакетами (правее перепада 16-тактовой последовательности) выходной сигнал на каждой из линий данных MOSI и MISO отражает значение бита, который был передан первым. Передача пакета завершается снятием сигнала SS на выходе ведущего (момент B), что деактивирует ведомого абонента. Через некоторое время возможно начало передачи следующего пакета (момент С).

Обработка результатов работы

Код программы на языке Assembler:

.ORG 0x0000

RJMP RESET

.ORG 0x0020

RJMP TIM0_OVF

.ORG INT_VECTORS_SIZE

RESET:

LDI R20, 0b00110000

LDI R16, (1 << DDRB5) | (0 << DDRB4) | (1 << DDRB3) | (1 << DDRB2)

OUT DDRB, R16

LDI R16, (1 << DDRB2)

OUT PORTB, R16

LDI R16, 0b01010000 (1 << SPE) | (1 << MSTR)

OUT SPCR, R16

LDI R16, 0b00001111

STS OCR1AH, R16

LDI R17, 0b11111111

STS OCR1AL, R17

LDI R16, 0b00000001

OUT TCCR0B, R16

LDI R16, (1 << TOIE)

STS TIMSK0, R16

LDI R17, 0b00001100 (1 << SPE) | (1 << MSTR)

STS TCCR1B, R17

SEI

TIM0_OVF:

LDS R16, TCNT1L

LDS R17, TCNT1H

ADD R17, R20

CBI PORTB, PORTB2

OUT SPDR, R17

Wait_Transmit1:

IN R17, SPSR

SBRS R17, SPIF

RJMP Wait_Transmit1

OUT SPDR, R16

Wait_Transmit2:

IN R17, SPSR

SBRS R17, SPIF

RJMP Wait_Transmit2

SBI PORTB, PORTB2

RETI

MAIN:

RJMP MAIN

Для проверки кода, произведем моделирование работы МК в САПР Proteus 8.

Разработанная схема приведена на рисунке 3.

Рисунок 3 – Вид схемы

Работа схемы приведена на рисунке 4.

Рисунок 4 – Сигнал на выходе ЦАП

Вывод: в ходе данной лабораторной работы были изучены передача данных по интерфейсу SPI, использование SPI и ЦАП для получения пилообразного сигнала на осциллографе, работа с datasheet на ATMega328P. Создана программы на языке ассемблера.

Соседние файлы в папке Лаба 6