Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

ГЛ А В А 1 3 И нтерфейс TWI ( 1 2С) и его применение Интерфейс TWI (иное наименование стандартизированной фирмой Phi l ips интер­ фейсной шины 1 2 С) устроен так же, как UART, но в нем есть несколько различаю­ щихся состояний: «старт», «стоп», передача от «мастера» или к «мастеру» и т. д. В результате протокол обмена все равно приходится строить, что называется, «руч­ ками», подобно разным случаям использования SPI . Кроме того, наличие в TWI всего одной линии «туда и обратно» (да еще и с поддержкой многих устройств, подключенных к ней) вынуждает организовывать протокол так, чтобы исключить электрические конфликты, и процедура в целом оказывается весьма сложной, так что «аппаратность» тут отходит на второй план. Программная имитация TWI в большинстве простых случаев удобнее, чем штатные средства. Она, кроме всего прочего, не привязана к модели МК, позволяет приме­ нять интерфейс в любых контроллерах, даже самых простых Tiny, и задействовать любые удобные выводы, а не только штатные SDA и SCL. К тому же они у разных, даже близких, моделях АVR привязаны к различным выводам портов, что при пе­ реносе может добавить немало проблем, вплоть до необходимости переделывать всю схему, - например, штатные выводы TWI у ATmega8535 (РСО и PC I ) будут мешать динамической индикации в конфигурации, показанной в главе 9. В реальности аппаратный способ для TWI все равно сложнее аналогичных про­ цедур для других портов и имеет лишь одно теоретическое преимущество перед программным - прерывание TWI может «будить» контроллер при нахождении в любом из режимов энергосбережения . Но в наших схемах контроллер всегда вы­ ступает в качестве «ведущего», и получается так, что будить его оказывается некому. Так что это преимущество все равно на практике оказывается невостребованным. ЗАМЕТКИ НА ПОЛЯХ В качестве примера: входящая в комплект Aгduiпo библиотека Wiгe задействует аппа­ ратный порт ТWI по всем правилам, включая использование прерываний . По идее это должно было бы разгружать к.онтроллер для выполнения других задач . Но в действи­ тельности этого не происходит - 1 6-мегагерцевый контроллер смиренно тормозит все операции , ожидая окончания обмена по ТWI со скоростью 1 00 кГц. Это иллюстра­ ция к тому утверждению, что программная имитация порта ТWI в большинстве случа­ ев ничуть не хуже официального способа.

RkJQdWJsaXNoZXIy MTExODQxMg==