microchip

Портирование приложений с семейства PIC18 на PIC24F

2.4. Модуль SPI
Модуль последовательного интерфейса SPI микроконтроллеров PIC24F значительно переработан по сравнению с аналогичным интерфейсом в семействе PIC18. В отличие от семейства PIC18, в котором работа в режиме SPI осуществляется конфигурацией модуля MSSP (который так же обеспечивает работу I2C), модуль SPI семейства PIC24F является отдельным периферийным устройством. В большинстве микроконтроллеров PIC24F с 64 и большим количеством выводов присутствует два независимых SPI модуля.
В отличие от PIC18 модуль SPI микроконтроллеров PIC24F может быть настроен для работы в режиме синхронного USART порта. Режим асинхронного UART обеспечивается отдельным модулем (см. п. 2.6 «Модуль UART»).
В обеих архитектурах поддерживается работа SPI в качестве ведущего и ведомого, выбор активного фронта на линии тактирования и выбор уровня на линии тактирования в режиме ожидания.
Сравнение модулей SPI семейств PIC18 и PIC24F приведено в табл. 23.
Таблица 23 Сравнение модулей SPI семейств PIC18 и PIC24F


Параметры

PIC18

PIC24F

Выбор активного фронта на линии тактирования

да

да

Выбор уровня на линии тактирования в режиме ожидания

да

да

Поддержка двухпроводного режима работы

да

да

Линия выбора ведомого (slave select)

да

да

Буфер FIFO

нет

да

Разрядность передаваемых/принимаемых данных

8 бит

8/16 бит

Поддержка кадрового режима работы

нет

да

Поддержка режима работы «синхронный USART»

нет

да

2.4.1. Наименования битов и регистров модуля
Большинство псевдонимов служебных битов и регистров модуля SPI в семействе PIC24F не отличаются от аналогичных по функциональности в семействе PIC18. В табл. 24 приведено сравнение названий служебных битов и регистров для микроконтроллеров PIC18 и PIC24F.
Таблица 21. Сравнение основных управляющих битов и регистров для модулей SPI семейств PIC18 и PIC24F


Функция

PIC18

PIC24F

Полярность линии тактирования

CKE

CKE

Активный фронт линии тактирования

CKP

CKP

Буфер данных модуля SPI

SSPxBUF

SPIxBUF

Бит статуса операции приема/передачи

BF

SPITBF и SPIRBF

Флаг события модуля SPI

флаг прерывания SSPxIF

SPIxIF

Флаг переполнения буфера

SSPOV

SPIROV

Конфигурация момента захвата входных данных

SMP

SMP

Выбор режима работы и скорости обмена

SSPM<3:0>

MSTEN
PPRE<1:0>
SPRE<2:0>
SSEN

Отключение линии передачи

TRIS<SDO>

DISSDO

2.4.2. Новые функции модуля SPI в семействе PIC24F
Буфер FIFO. Одно из наиболее значительных усовершенствований SPI модуля PIC18 – это введение в PIC24F 8 уровневого буфера FIFO, который позволяет производить пакетный обмен данными с меньшими временными затратами на прерывания. Возможна гибкая настройка глубины заполнения буфера, при которой устанавливается флаг заполнения.
Поддержка 8-битного и 16-битного обмена. Поддерживается как 8-битный обмен, так и 16-битный. Размерность данных зависит от значения бита MODE16 (SPIxCON1<10>).
Поддержка кадрового режима обмена. Кадровый режим обмена (используемый в частности в большинстве голосовых кодеках) инициализируется установкой бита FRMEN (SPIxCON2<15>). Опционально доступна генерация импульса кадровой синхронизации с настраиваемым активным уровнем и фронтом.
Возможность использования внешней синхронизации. Линия SCK (аналогично SDO) может быть отключена битом DISSCK. Это позволяет использовать внешнюю частоту для синхронизации обмена.
Флаг прерывания. Флаг прерывания SPIxIF при приеме байта (слова) устанавливается даже в том случае, если установлен флаг переполнения SPIROV.
2.4.3. Функции модуля SPI, отсутствующие в семействе PIC24F
Все функции модуля SPI семейства PIC18 поддерживаются модулем SPI семейства PIC24F.
2.4.4. Портирование типового приложения
Рассмотрим последовательность инициализации аппаратного модуля SPI в режиме ведущего для двух архитектур.
Семейство PIC18:

  1. установить бит в регистре TRIS, соответствующий линии SDI;
  2. сбросить биты в регистре TRIS, соответствующие линиям SDO и SCK;
  3. выбрать требуемую полярность и активный фронт линии тактирования SCK, используя биты CKE и CKP;
  4. установить требуемую скорость обмена и момент захвата входных данных
  5. если используется прерывание, сбросить флаг SSPxIF и разрешить прерывание, установив биты SSPxIE и GIE;
  6. сбросить биты WCOL и SSPOV и разрешить работу модуля, установив бит SSPEN.

Для семейства PIC24F:

  1. если используется прерывание, сбросить флаг SPIxIF, разрешить прерывание установкой флага SPIxIE, установить требуемый приоритет прерывания – биты SPIxIP;
  2. установить требуемую частоту на линии SCK, активный уровень и фронт на линии тактирования;
  3. выбрать требуемый момент захвата входных данных и активировать ведущий режим, установив бит MSTEN;
  4. если необходимо, отключить линию SDO, установив бит DISSDO;
  5. сбросить флаг переполнения SPIROV и разрешить работу модуля, установив бит SPIEN (SPIxSTAT<15>).

2.4.5. Рекомендации по портированию приложения

Особое внимание следует уделить расчету скорости обмена. Так как модуль SPI в семействе PIC24F тактируется частотой FOSC/2, то формула расчета будет отличаться от аналогичной в PIC18.

©2007 Гамма-Санкт-Петербург