Портирование приложений с семейства PIC18 на PIC24F. 2.4. Модуль SPI

    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.