• PS7 — сигнал
. Когда линия
установлена в 0, происходит передача данных из ведущего устройства SPI;
• PS6 — сигнал SCK;
• PS5 — сигнал MOSI. По этой линии передаются данные от ведущего устройства к ведомому;
• PS4 — сигнал MISO. По этой линии передаются данные от ведомого устройства к ведущему.
Регистры управления, используемый в примере. Ниже перечислены биты и регистры управления, которые используются в данном примере:
• DDRS — регистр направления передачи порта S. Разряды DDRS7…DDRS4 должны быть установлены соответствующим образом при работе контроллера SPI в режиме ведущего. Это необходимо для правильного формирования сигналов обмена на линиях порта S;
• SP0BR — регистр скорости передачи. Разряды SPR2…SPR0 этого регистра задают скорость обмена по шине SPI;
• SP0CR1 — регистр управления (первый). Задает режимы работы контроллера SPI;
• SP0CR2 — регистр управления (второй). Задает режимы работы контроллера SPI;
• SP0SR — регистр состояния. Отражает текущее состояние процесса передачи информации по шине SPI;
• SP0DR — регистр данных. В этот регистр записываются данные, подлежащие передаче в интерфейсную ИС.
Пример программирования контроллера SPI. В нашем примере мы будем использовать встроенный контроллер SPI в режиме ведущего. Контролер будет непрерывно посылать шестнадцатеричное число $F0 в «воображаемую» периферийную ИС. Работоспособность приведенного программного кода может быть проверена с помощью осциллографа. При желании Вы можете собрать простейшую периферийную ИС — последовательный регистр со светодиодами, подключенными к параллельным выходам (рис. 4.79). В примере не использованы прерывания, контроль за состоянием флага SPIF ведется методом полинга.
Рис. 4.79.Функциональная схема периферийного устройства для тестирования обмена по SPI
/*--------------------------------------------------------------------*/
/* filename: SPI.c */
/* МAIN PROGRAМ: Эта программа реализует непрерывную посылку кода */
/* символа "S" с скоростью 9600 бод в 8-разрядном формате (кадр 10 бит)*/
/* с битом паритета */
/*--------------------------------------------------------------------*/
/*подключаемые файлы*/
#include <912b32.h>
#include
/*используемые функции*/
void initialize_spi(void);
void send_data(unsigned int);
void main(void) {
int i, j;
unsigned int data;
initialize_spi(); /*инициализация модуля SCI*/
data = 0xF0;
while(1) /*передавать данные непрерывно*/
{
send_data(data);
}
}
/* Функция initialize_spi производит инициализацию модуля SPI. */
void initialize_spi(void) {
SP0BR = 0х04; /*установить скорость обмена*/
SP0CR1 = 0x18; /*запретить прерывания от SPI, назначить режим*/
/*ведущего, старшим битом вперед*/
SP0DR = 0x00; /*очистить регистр данных */
SP0SR = 0x00; /*очистить регистр состояния*/
SP0CR1 = 0x58; /* разрешить SPI */
}
/* Функция send_data производит инициализацию модуля SPI. */
void send_data(unsigned int data) {
unsigned int status;
SP0DR = data; /*задать число для пересылки*/
while ((SP0SR & 0x80) == 0x00) /*ожидать флага завершения передачи*/
{
;
}
status = SP0SR /*прочитать регистр состояния с целью сброса флага SPIF*/
}
В приведенном примере мы показали лишь технику программирования обмена для контроллера SPI, однако мы не останавливались на особенностях подчиненного устройства, с которым происходит обмен.
4.19.5 Периферийные ИС с интерфейсом SPI
Интерфейс SPI обычно используется для расширения функциональных возможностей однокристального МК. Многие производители полупроводниковых компонентов выпускают периферийные интегральные схемы с интерфейсом SPI. По функциональному назначению эти схемы принадлежат к следующим группам устройств:
• Память типа EEPROM или FLASH;
• Дополнительные порты ввода/вывода;
• Часы реального времени;
• АЦП высокого разрешения (число разрядов преобразования превышает 8 бит);
• Драйверы светодиодных и жидкокристаллических дисплеев;
• Многоканальные ЦАП;
• Схемы фазовой автоподстройки частоты.
4.20. Введение в теорию аналого-цифрового преобразования
Встраиваемые микропроцессорные системы на основе МК семейства 68HC12 часто предназначаются для управления реальными промышленными объектами, в которых входные сигналы имеют аналоговую природу. Это сигналы различных датчиков: тока, напряжения, температуры, давления, ускорения, освещенности, загрязненности воздуха и т.д. Управляя каким либо технологическим агрегатом, МК должен обработать выходные сигналы этих датчиков, рассчитать по их значениям требуемые управляющие воздействия и сформировать необходимые управляющие сигналы для исполнительных устройств. Однако МК по своей сути является цифровым устройством, он способен преобразовывать данные только в цифровом виде. Поэтому для взаимодействия с аналоговыми датчиками микропроцессорная система должна быть оснащена аналого-цифровым преобразователем, который позволит представить аналоговые сигналы в виде цифровых кодов.
Читать дальше