3. Ожидать установки бита SPIF в регистре состояния SPI. Бит SPIF будет автоматически установлен по последнему тактовому перепаду (положительному или отрицательному, в зависимости от настроек модуля SPI) сигнала SCK, синхронизирующего процесс выборки данных для передачи.
4. Прочитать регистр состояния SPI.
5. Прочитать принятые через SPI данные путем чтения регистра данных, если это необходимо, т. е. требуется произвести не только передачу, но и прием.
6. Вернуться к выполнению пункта 2, если имеются еще данные, подлежащие передаче.
Обратите внимание: чтобы сбросить бит SPIF в регистре состояния, требуется произвести чтение или запись регистра данных SPI. Поэтому всегда необходимо или прочитать регистр данных, или произвести запись в него.
13.3.4. Условия возникновения исключительных ситуаций SPI
При осуществлении обмена через SPI возможно возникновение исключительной ситуации, т. е. ситуации, когда происходит какая-либо некорректная операция, приводящая к потере данных или другим нежелательным последствиям. Исключительные ситуации блока SPI могут быть следующими.
Переполнение при чтении. Происходит, когда внутренний приемный буфер блока SPI содержал данные, которые не были прочитаны процессором до завершения следующей передачи данных. Указанием на то, что приемный буфер содержит достоверные данные, служит текущее активное состояние бита SPIF в регистре состояния. Когда передача завершается, блок SPI автоматически перемещает принятые данные в приемный буфер. Если в этот момент бит SPIF находится в активном состоянии, то при перемещении новых данных в приемный буфер находящиеся там старые данные будут «затерты» (потеряны). На переполнение при чтении указывает бит ROVR в регистре состояния, который в описываемой ситуации перейдет в активный уровень.
Конфликт записи. Как уже было сказано выше, между интерфейсом шины блока SPI и внутренним сдвиговым регистром SPI отсутствует какой-либо аппаратный буфер. В связи с этим, данные не должны записываться в регистр данных SPI в то время, когда через SPI производится передача данных. Интервал времени, во время которого данные нельзя записывать в регистр данных, отсчитывается от момента начала передачи, т. е. от момента последней записи в регистр данных до момента чтения регистра состояния, в котором бит SPIF находился в активном уровне. Если запись в регистр данных SPI будет произведена в течение указанного интервала, то данные записи будут потеряны, а в регистре состояния перейдет в активный уровень бит конфликта записи WCOL.
Ошибка режима. Внешний сигнал на входе SSEL устройства, у которого блок SPI сконфигурирован как ведущий, всегда должен иметь неактивный (ВЫСОКИЙ) уровень. Если сигнал на входе SSEL ведущего устройства станет активным, то это означает, что другой ведущий выбрал данное устройство в качестве ведомого. Такое состояние для выбранного устройства называется ошибкой режима. В случае возникновения ошибки режима, бит ошибки режима MODF в регистре состояния переходит в активный уровень, драйверы сигналов SPI деак-тивируются и режим блока SPI выбранного устройства изменяется с ведущего на ведомый.
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |