Разделы инструкций

В сети

Пользователей: 102
Из них просматривают:
Аналоги: 41. Даташиты: 23. Инструкции: 5. Новости: 10. Остальное: 6. Ошибки: 2. Программы: 1. Профиль пользователя: 1. Расчёты: 1. Торрент: 2. Форум: 10.
Участников: 2
Гостей: 100

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

Функции для работы с аппаратной реализацией SPI-интерфейса

Аппаратный модуль SPI имеется в ряде МК семейства PIC. Среда разработки mikroC предоставляет библиотеку для инициализации модуля SPI и удобства работы с ним.

 
С помощью SPI-интерфейса можно легко связать микроконтроллер с внешними микросхемами АЦП, ЦАП, памяти и т.д. Для этого потребуется только МК с аппаратно реализованным модулем SPI (например, PIC16F877). Некоторые микроконтроллеры, имеющие два модуля SPI, например P18F8722, требуют предварительно определить модуль, который будет использован. Для этого достаточно добавить номер 1 или 2 к имени функции Spi. Например, Spi2_Write().

 
Также, с целью обратной совместимости с предыдущими версиями компилятора и облегчения управления кодами, микроконтроллеры с несколькими модулями SPI имеют Spi-библиотеку, которая идентична Spi1 (т.е. можно использовать Spi_Init() вместо Spi1_Init() для операций с SPI).

 

Библиотека SPI включает в свой состав следующие функции: Spi_Init, Spi_Init_Advanced, Spi_Read и Spi_Write. Описание этих функций приведено в таблицах 44 - 47 соответственно.

 

 Таблица 44. Описание функции Spi_Init

Прототипvoid Spi_Init(void)
Возвращаемое значениеНет
ОписаниеКонфигурирование и инициализация SPI установками по умолчанию. Spi_Init_Advanced или Spi_Init должны вызываться перед использованием любых других функций библиотеки SPI. Установки по умолчанию: режим ведущего, частота синхронизации Fosc/4, низкий уровень при отсутствии синхросигнала на соответствующем выводе, передача по фронту, стробирование входных данных в середине интервала синхронизации. Для установки собственных настроек необходимо использовать функцию Spi_Init_Advanced
ТребованияТребуется PICмикроконтроллер с аппаратным модулем SPI
ПримерSpi_Init()

 

 Таблица 45. Описание функции Spi_Init_Advanced

Прототипvoid Spi_Init_Advanced(unsigned short master, unsigned short data_sample, unsigned short clock_idle, unsigned short transmit_edge)
Возвращаемое значениеНет
ОписаниеКонфигурирование и инициализация SPI. Spi_Init_Advanced или Spi_Init должны вызываться перед использованием любых других функций библиотеки
SPI. Аргумент mast_slav определяет режим работы SPI и может принимать следующие значения:
MASTER_OSC_DIV4 // Ведущий, частота синхр.=Fosc/4
MASTER_OSC_DIV16 // Ведущий, частота синхр.=Fosc/16
MASTER_OSC_DIV64 // Ведущий, частота синхр.=Fosc/64
MASTER_TMR2 // Ведущий, частоту синхр. задает TMR2
SLAVE_SS_ENABLE // Ведомый, разрешен Slave select
SLAVE_SS_DIS // Ведомый, запрещён Slave select
Аргумент data_sample определяет, когда стробируются входные данные, и может принимать следующие значения:
DATA_SAMPLE_MIDDLE // Входные данные стробируются
// в середине интервала синхронизации
DATA_SAMPLE_END // Входные данные стробируются
// в конце интервала синхронизации
Аргумент clock_idle определяет состояние вывода синхронизации при отсутствии обмена и может принимать следующие значения:
CLK_IDLE_HIGH // Высокий уровень на выводе
// синхронизации при отсутствии обмена
CLK_IDLE_LOW // Низкий уровень на выводе
// синхронизации при отсутствии обмена
Аргумент transmit_edge может принимать следующие значения:
LOW_2_HIGH // Данные передаются по фронту
HIGH_2_LOW // Данные передаются по спаду
ТребованияТребуется PICмикроконтроллер с аппаратным модулем SPI
ПримерSPI устанавливается в режим ведущего с частотой синхронизации = Fosc/4, входные данные стробируются в середине интервала синхронизации, вывод
синхронизации в состоянии низкого уровня при отсутствии обмена и данные передаются по фронту:
Spi_Init_Advanced(MASTER_OSC_DIV4, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH)

 

 

 Таблица 46. Описание функции Spi_Read

Прототипunsigned short Spi_Read(unsigned short buffer)
Возвращаемое значениеВозвращает принятый байт
ОписаниеЗапускает обмен посылкой байта buffer, принимает данные и возвращает принятый байт по окончанию приёма
ТребованияТребуется PIC-микроконтроллер с аппаратным модулем SPI. SPI должен быть предварительно проинициализирован функциями Spi_Init_Advanced или Spi_Init
Примерshort take, buffer;
...
take = Spi_Read(buffer);

 

 Таблица 47. Описание функции Spi_Write

Прототипvoid Spi_Write(unsigned short data)
Возвращаемое значениеНет
ОписаниеЗаписывает передаваемый байт data в регистр данных SSPBUF, что немедленно вызывает передачу
ТребованияТребуется PIC-микроконтроллер с аппаратным модулем SPI. SPI должен быть предварительно проинициализирован функциями Spi_Init_Advanced
или Spi_Init
ПримерSpi_Write(1)

 

 
Следующий пример демонстрирует, как использовать функции библиотеки SPI. Предлагаемая аппаратная конфигурация: вывод выборки ведомого max7219 (драйвер 8-сегментного светодиодного дисплея на 8 позиций) соединён с RC1 PIC, выводы SDO и SCK PIC - с соответствующими выводами max7219, вывод SDI PIC не используется.

 

//---------- Объявления функций
void max7219_init1();
//----------------------- конец
unsigned short i;
void main() {
Spi_Init(); // Стандартное конфигурирование SPI
//Вместо Spi_init можно использовать Spi_Init_Advanced,
// как показано в следующей строке:
//Spi_Init_Advanced(MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE,
// CLK_IDLE_HIGH, HIGH_2_LOW);
TRISC &= 0xFD;
max7219_init1(); // Инициализация max7219
for (i = 1; i <= 8u; i++) {
PORTC &= 0xFD; // Выбор max7219
Spi_Write(i); // Посылка i в max7219 (номер позиции)
Spi_Write(8 – i); // Посылка 8-i в max7219 (цифра в этой позиции)
PORTC |= 2; // Отмена выбора max7219
}
TRISB = 0;
PORTB = i;
}//end
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

Посыпав место пайки песком или натерев крошащимся камнем, можно паять обычными методами даже алюминий.

Интересно

Нихромовая проволока, из которой изготовлены спирали, очень плохо облуживается с помощью канифольных флюсов. Поэтому весьма трудно сделать какой либо контакт с ней надежным.

Похожие инструкции