Интерфейс I2C (Inter-Integrated Circuit)
Это последовательный интерфейс образующий адресную шину. Каждое устройство на шине имеет свой уникальный адрес. Обмен данными производится по выводу SDA синхронно, т.е. на шине есть специальный сигнал SCL, который синхронизирует передачу каждого бита адреса и данных. Сигналы SDA и SCL двунаправленные. Инициатором обмена данными по шине может быть любое устройство, такие шины относятся к классу multi-master. Это касается как передачи, так и приёма данных.
Можно выделить следующие особенности:
-поддержка байтового обмена данными
-поддержка 7-ми и 10-ти битной адресации устройств на шине
-скорость передачи данных от 10 кбит/сек, до 400 кбит/сек
-поддержка режима DMA (только контроллер DMA2)
-наличие вектора прерывания
В момент обмена на шине должен присутствовать одно управляющее устройство (“master”) инициирующее обмен данными и одно подчинённое устройство (“slave”). “Master” является инициатором выработки синхросигналов SCL.
Для передачи и приёма используются четыре регистра. Процессор или канал DMA записывают данные при передаче в регистр ICDXR и при чтении читают данные из ICDRR. Когда запускается процесс передачи данные из ICDXR, копируются в регистр ICXSR и последовательно сдвигаются через вывод SDA процессора. При приёме данные вдвигаются в регистр ICRSR и копируются в регистр ICDRR для последующей обработки.
Тактирование блока I2C осуществляется аналогично тактированию самого процессора. Необходимая частота сигнала SCL достигается использованием предделителя (prescaler) и делителя (dividers). После предделителя, частота должна быть в диапазоне 6,7-13,3 мГц.
Когда шина свободна сигналы SDA и SCL поддерживаются на высоком логическом уровне. “Master” генерирует один импульс при передаче одного бита данных. Уровень сигнала SDA должен быть стабильным во время высокого уровня SCL. Изменение уровня на SDA должно происходить только когда SCL имеет низкий уровень.
Начало и окончание передачи данных “master” инициируется комбинацией сигналов SDA и SCL. Условие старта, переход сигнала SDA из высокого в низкий при высоком SCL. Условие останова, переход сигнала SDA из низкого уровня в высокий при высоком SCL. Шина считается занятой от момента старта до момента останова. Занятость шины определяется по биту BB (bus busy) в регистре ICSTR. Для старта передачи должны быть установлены биты MST и STT в регистре ICMDR. Для останова должен быть установлен бит STP.
Данные передаются, начиная со старшего MSB (most-significant) бита. Данные могут передаваться посылками от 2-х до 8-ми бит, что определяется полем бит BC в регистре ICMDR. Посылки перемежаются сигналом подтверждения ACK (acknowledgment) от приёмника. В процессоре возможен выбор 7-ми или 10-ти битной адресации устройств на шине I2C. После адреса следует бит указатель R/W того, что “master” передаёт данные в “slave” или читает из “slave”.
Может быть осуществлён программный сброс (reset) интерфейса I2C обнулением бита IRS (ICMDR) или через установку бита I2C_RST (PRCR).
Перед конфигурированием шины бит I2C-RST=0. Настройка I2C должна производиться до начала передачи данных при этом интерфейс должен находиться в режиме сброса по биту IRS=0. После всех настроек шина выводится из режима сброса IRS=1.
В процессоре реализован алгоритм т.н. арбитража шины. При этом отслеживаются конфликтные ситуации, когда на шине происходят одновременно две передачи данных. Для реагирования на эту ситуацию введено отдельное прерывание AL (Arbitration-lost interrupt).
Источниками прерывания могут выступать следующие события:
-отсутствие сигнала подтверждения от приёмника (No-acknowledge interrupt (NACK))
-условие STOP обнаружено (Stop-Condition-Detection interrupt (SCD))
-процессор распознал собственный адрес (Address-as-Slave interrupt (AAS))
-регистры I2C доступны после изменения настроек (Registers-ready-for-access interrupt (ARDY))
-данные приняты (Receive interrupt/status)
-данные переданы (Transmit interrupt/status)
Каждое из этих событий вызывает одно и то же прерывание. Которое событие произошло, определяется в регистре Interrupt Vector Register (ICIVR) в поле INTCODE.
Можно выделить четыре режима:
1)Slave-receiver mode – интерфейс настраивается в подчинённый режим и принимает данные от “master”.
2)Slave-transmitter mode - интерфейс настраивается в подчинённый режим и передаёт данные в “master”.
3)Master-receiver mode - интерфейс настраивается в управляющий режим и принимает данные от “slave”.
4)Master-transmitter mode - интерфейс настраивается в управляющий режим и передаёт данные в “slave”.
2.10. Интерфейс I2S (Inter-IC Sound)
Это скоростной последовательный интерфейс для потоковой передачи цифровых аудио данных. В основном она используется при работе с аудио-кодеками. Процессор содержит четыре независимых I2S модуля. Надо отметить, что по одному I2S могут обмениваться только два устройства без использования адресации (поэтому их четыре), в то время I2C адресная шина с возможностью подключения большого количества устройств с разными адресами.
К основным характеристикам модуля I2S можно отнести:
-возможность одновременной передачи и приёма данных.
-наличие буферных регистров данных.
-длина слова данных может быть 8,10,12,14,16,18,20,24 или 32 бита.
-возможность работы с данными со знаком, что удобно при использовании цифровых сигнальных алгоритмов.
-наличие обратной петли (loopback) данных для проверки внутренней передачи/приёма при отладке кода.
-программируемый делитель частоты передачи/приёма синхронизации каждого бита и каждого фрейма.
Принимаемые данные поступают на вход I2S RX процессора. Блок-схема приёмника включает, приёмный сдвиговый регистр Receive Shift Register, данные из которого передаются в регистр Receive Left/Right Data Registers. Для каждого канала (левого и правого) последний регистр может быть доступен как два 16-ти битных регистра (для CPU) или как 32-х битный регистр (для DMA).
Данные для передачи записываются из CPU или DMA в регистре Transmit Left/Right Data Registers. За тем они копируются в Transmit Shift Register через регистр Transmit Buffer Register и последовательно сдвигаются через внешний вывод I2S DX.
Блок управления интерфейса содержит внутренний генератор тактовых импульсов, генератор сигналов синхронизации фреймов и управление ими. Интерфейс может настраиваться на режим “master” и “slave”. В режиме “master” вырабатывается сигнал синхронизации фрейма I2S_FS и сигнал синхронизации каждого бита I2S_CLK. Эти сигналы на шине являются двунаправленными. В режиме “slave” внутренний генератор выключен. Длина фрейма определяется количеством слов, передаваемых во фрейме. Для выбора соотношения полярности сигналов синхронизации данных и фреймов выделены отдельные управляющие биты CLKPOL и FSPOL в регистре I2SSCTRL .
Обмен данными может вызывать прерывания CPU (если они разрешены в I2SINTMASK Interrupt Mask Register). Прерывание при передаче данных генерируется, когда регистр данных передатчика пуст. Прерывание при приёме данных генерируется, когда регистр данных приёмника полон. Появление прерывания вызывает установку соответствующего флага в регистре Interrupt Flag Register (I2SINTFL). В этом последнем регистре есть флаги, фиксирующие события-ошибки при обмене данных, но эти события не подключены к прерываниям процессора и могут отслеживаться путём программного опроса.
I2S управляется от основного системного тактового генератора. Неиспользуемый модуль может быть отключён от этого генератора для экономии энергопотребления через конфигурационный регистр PCGCR1. Требуемая частота синхронизации битов и фреймов программируется через делители, на вход которых подаётся частота системного генератора. Эти частоты для битов и фреймов вырабатываются только, когда I2S модуль работает в режиме “master” (MODE = 1 в регистре I2SSCTRL). Частота синхронизации определяется по соответствующим формулам, которые можно найти в описании, и во многом зависит от частоты дискретизации АЦП или аудио кодека.
Управляющими регистрами можно установить соотношения фаз синхронизирующих сигналов для бит и для фреймов.
Может использоваться эффективный режим упаковки данных в память, если размер слова меньше 32-х бит (а именно 10,12,14 или 16 бит), когда последовательно заполняются ячейки со значащими данными. Т.о. в 32-х битах могут располагаться последовательно два 12-ти битных слова.
Сброс шины I2S может производиться как программой (software reset) через регистр PRCR (данные в сдвиговых регистрах сохраняются), так и через общий сброс процессора (hardware reset). В последнем случае во всех регистрах устанавливаются данные по умолчанию.
Каждая из четырёх I2S шин поддерживает прерывания по передаче и приёму данных в процессорное ядро или DMA. Разрешения или запрет этих прерываний записывается в регистр I2SINTMASK регистр. Отдельно выделены биты-маски для моно и стерео режимов. Прерывания фиксируются в соответствующих флагах регистра I2SINTFL.
В случае стерео режима прерывания передачи/приёма генерируются после передачи данных правого канала, так как данные правого канала всегда передаются последними. В моно режиме передаются данные только левого канала, и соответственно только по ним срабатывает прерывание.
При работе шины с DMA прерывания процессора от шины должны быть запрещены.
Данные с I2S шины через DMA могут писаться как во внутреннее ОЗУ (DARAM, SARAM), так и во внешнее через EMIF интерфейс.