Запросы прерывания

По окончании пересылки каналы вырабатывают запросы прерывания SSIO0 или SSIOl, которые могут обслуживаться контроллером прерываний или периферийным сервером. Считывание содержимого регистра SSIOx CON и анализ его содержимого позволяют микроконтроллеру выявлять возможные нарушения при обращении к каналам.

Избежать таких нарушений при выполнении многобайтных обменов позволяет использование квитирования, при котором ведомый канал в случае неготовности к обмену выдает сигнал, задерживающий пересылку данных. Для реализации квитирования в регистре SSIOx CON должны быть установлены значения битов THS — STE — ATR — 1, а выводы Р6.4 или Р6.6 ведущего и ведомого каналов, используемые для передачи синхросигналов SCx, должны иметь выход «с открытым стоком», для чего соответствующие биты в регистре Р6 DIR устанавливаются в «1». Эти выводы необходимо подключить через внешний резистор к напряжению питания Vn, чтобы обеспечить высокий уровень синхросигнала SCx = 1 при закрытых выходных транзисторах. Если ведомый канал готов к обмену (в его регистре SSIOx CON бит TBS = 0), то транзистор, подключенный к выводу SCx этого канала, запирается. При передаче каждого бита данных транзистор на выходе SCx ведущего канала открывается, обеспечивая низкий уровень синхросигнала SCx — 0, что вызывает ввод или вывод бита в регистрах SSIOx BUF ведущего и ведомого каналов. После пересылки байта транзистор на выходе SCx ведомого канала открывается, фиксируя низкий уровень синхросигнала SCx = 0. Таким образом блокируется формирование синхросигналов, то есть обмен данными запрещается (см.  1.356).

Следующая пересылка становится возможной, когда ведомый канал будет готов к обмену. Для этого необходимо либо считать из его регистра SSIOx BUF введенные данные (если канал работает в режиме приема), либо записать в этот регистр данные для вывода (если канал работает в режиме передачи). Когда готовность ведомого канала восстановится, транзистор, подключенный к его выводу SCx, запирается, и устанавливается высокий уровень синхросигнала SCx = 1. После этого ведущий канал может формировать следующую серию синхросигналов для пересылки очередного байта.

Частота формируемых синхросигналов, определяющая скорость последовательного обмена, программируется с помощью регистра SSIO BAUD (см.  1.366). Семь разрядов этого регистра задают величину Bs — коэффициент деления тактовой частоты Ft. Частота синхросигналов при этом составляет Fs = Ft/8(Bs+l). Бит BE в этом регистре разрешает функционирование генератора синхросигналов, если установлено значение BE = 1.

Comments are closed.