Портирование приложений с семейства 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 | 
| Отключение линии передачи | 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:
- установить бит в регистре TRIS, соответствующий линии SDI;
- сбросить биты в регистре TRIS, соответствующие линиям SDO и SCK;
- выбрать требуемую полярность и активный фронт линии тактирования SCK, используя биты CKE и CKP;
- установить требуемую скорость обмена и момент захвата входных данных
- если используется прерывание, сбросить флаг SSPxIF и разрешить прерывание, установив биты SSPxIE и GIE;
- сбросить биты WCOL и SSPOV и разрешить работу модуля, установив бит SSPEN.
Для семейства PIC24F:
- если используется прерывание, сбросить флаг SPIxIF, разрешить прерывание установкой флага SPIxIE, установить требуемый приоритет прерывания – биты SPIxIP;
- установить требуемую частоту на линии SCK, активный уровень и фронт на линии тактирования;
- выбрать требуемый момент захвата входных данных и активировать ведущий режим, установив бит MSTEN;
- если необходимо, отключить линию SDO, установив бит DISSDO;
- сбросить флаг переполнения SPIROV и разрешить работу модуля, установив бит SPIEN (SPIxSTAT<15>).
2.4.5. Рекомендации по портированию приложения
Особое внимание следует уделить расчету скорости обмена. Так как модуль SPI в семействе PIC24F тактируется частотой FOSC/2, то формула расчета будет отличаться от аналогичной в PIC18.