В статье описываются функции для работы с модулем SPI в микроконтроллёрах PIC.
Работа с SPI в PIC, компилятор MCC18
Для начала подключаем библиотеку функций SPI:
#include "spi.h"Функция OpenSPI. Инициализация SPI.
Прототип функции
void OpenSPI( unsigned char sync_mode, unsigned char bus_mode, unsigned char smp_phase);
Аргументы:
sync_mode (Определяет режим работы и частоту)
SPI_FOSC_4 SPI Master mode, clock = Fosc/4 SPI_FOSC_16 SPI Master mode, clock = Fosc/16 SPI_FOSC_64 SPI Master mode, clock = Fosc/64 SPI_FOSC_TMR2 SPI Master mode, clock = TMR2 output/2 SLV_SSON SPI Slave mode, /SS pin control enabled SLV_SSOFF SPI Slave mode, /SS pin control disabled
bus_mode (установка битов CKE и CKP)
Может принимать следующие значения
MODE_00 //0b00000000 //CKE 0x40 // SSPSTAT register //CKP 0x00 // SSPCON1 register MODE_01 //0b00000001 //CKE 0x00 // SSPSTAT register //CKP 0x00 // SSPCON1 register MODE_10 //0b00000010 //CKE 0x40 // SSPSTAT register //CKP 0x10 // SSPCON1 register MODE_11 //0b00000011 //CKE 0x00 // SSPSTAT register //CKP 0x10 // SSPCON1 register
CKE – определяет, на каком шаге происходит изменение данных на выходе:
если CKP = 0, то
1 – данные передаются по переднему фронту сигнала на выводе SCK;
0 – данные передаются по заднему фронту сигнала на выводе SCK.
если CKP = 1, то
1 – данный передаются по заднему фронту сигнала на выводе SCK;
0 – данные передаются по переднему фронту сигнала на выводе SCK.
CKP – выбор полярности импульса синхронизации:
1 – пассивный высокий уровень сигнала;
0 – пассивный низкий уровень сигнала.
smp_phase (Определяет режим захвата входных данных)
SMPEND – опрос входа в конце периода вывода данных;
SMPMID – опрос входа в середине периода вывода данных.
Пример использования:
OpenSPI(SPI_FOSC_16, MODE_00, SMPEND);
Функция CloseSPI. Отключает модуль SSPx.
Прототип
void CloseSPI( void );
Функция DataRdySPI. Эта функция определяет есть ли новое значение в регистре SSPBUFx.
Прототип
unsigned char DataRdySPI( void );
Пример использования
while (!DataRdySPI());
Функция ReadSPI. Читает байт из модуля SPIx.
Прототип
unsigned char ReadSPI( void );
Пример использования
char x; x = ReadSPI();
Функция WriteSPI. Записывает байт в модуль SPIx.
Прототип
unsigned char WriteSPI( unsigned char data_out );
Возвращаемые значения:
0 – нет ошибок;
-1 – была ошибка.
Пример использования
WriteSPI(‘a’);
Функция putsSPI. Передаёт строку в модуль SPIx.
Прототип. Строка заканчивается нулевым символом (который при этом не передаётся).
void putsSPI( unsigned char *wrptr );
Пример использования
unsigned char wrptr[] = “Hello!”; putsSPI(wrptr);
Функция getsSPI. Читает строку из модуля SPIx.
Прототип (в параметрах указатель на строку и длина строки)
void getsSPI( unsigned char *rdptr, unsigned char length );
Пример использования
unsigned char wrptr[10]; getsSPI(wrptr, 10);

Похожие статьи
1 отзыв к этой записи
Сделал SPI с использованием этих функций. Не работает. Надо ли настраивать что-то ещё в самом процессоре?
Оставить отзыв