Реализация ведомого устройства шины SMBus

Эта программа представляет пример реализации ведомого устройства шины SMBus и построена на базе прерываний. Назначения при помощи опера­тора, equ в начале программы позволяют выбрать адрес ведомого устройства, выводы и порты. В программе реализован протокол «Отправка байта» (что для ведомого устройства означает передачу байта к нему от ведущего). В проме­жутке между прерываниями ведомое устройство может находиться в режиме пониженного потребления либо выполнять другие задачи. Так как прерывание происходит каждый раз при переходе линии SDA из состояния лог. «1» в лог. «О», ведомое устройство при загруженности шины проводит значительную часть времени в подпрограмме обработки прерываний.

Чтобы исключить контроль шины ведомым устройством во время работы с другими ведомыми могут быть использованы внешние элементы, контро­лирующие шину и формирующие прерывания только при совпадении адреса ведомого устройства. Ещё одним недостатком использования прерываний без дополнительных внешних устройств является время обработки прерывания. Так как оно составляет несколько тактов, при этом существует вероятность пропуска стартовой последовательности. При реализации поллинга вероят­ность пропустить стартовую посылку снижается, но процессор постоянно за­нят отслеживанием состояния шины. Выбор оптимального решения зависит от конкретной реализации. Вариант с прерываниями позволяет процессору об­служивать другие задачи во время неактивного состояния шины, но при этом есть вероятность пропустить первую попытку установления связи. Вариант с поллингом не оставляет процессору возможности обрабатывать другие задачи