Поиск по сайту: |
|
По базе: |
|
Главная страница > Компоненты > Микроконтроллеры > MSP430 > Архитектура MSP430x1xx |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Периферийный интерфейс USART, режим I2CУниверсальный синхронно/асинхронный приемопередающий (USART) периферийный интерфейс поддерживает связь по I2C в модулях USART0 устройств MSP430x15x и MSP430x16x. Этот раздел описывает режим I2C. 15.1 Введение в модуль I2C Модуль управления взаимообменом между интегральными схемами (I2C) обеспечивает интерфейс между MSP430 и I2C-совместимыми устройствами через последовательную двухпроводную шину I2C. Внешние компоненты, подключенные к шине I2C последовательно передают и принимают последовательные данные в/из USART через 2-х проводной I2C-интерфейс. Модуль I2C имеет следующие возможности:
На рис.15-1 показана блок-схема модуля I2C.
15.2 Функционирование модуля I2C Модуль I2C поддерживает любые ведущие и ведомые устройства, совместимые с I2C. На рис.15-2 показан пример шины I2C. Каждое устройство обладает уникальным адресом и может работать и как передатчик и как приемник. Устройство, подключенное к шине I2C, во время передачи данных может рассматриваться как ведущее или ведомое. Ведущий инициирует передачу данных и генерирует тактовый сигнал SCL. Любое устройство, адресованное ведущим, рассматривается как ведомое.
При обмене данными на I2C используется вывод последовательных данных (SDA) и вывод последовательного тактирования (SCK). Оба вывода SDA и SCL являются двунаправленными и должны подключаться к положительному источнику напряжения через нагрузочные («подтягивающие») резисторы.
15.2.1 Последовательные данные I2C При передаче каждого бита ведущим устройством генерируется один тактовый импульс. Модуль I2C работает с данными, организованными побайтно. Сначала перемещается старший значащий разряд, как показано на рис.15-3. Первый, после условия «СТАРТ», байт состоит из 7-разрядного адреса ведомого и бита R/nonW. Когда R/nonW=0, ведущий передает данные ведомому. Когда R/nonW=1, ведущее устройство принимает данные от ведомого. Бит ACK посылается приемником после каждого байта на 9-ом такте SCL.
Данные на SDA должны быть неизменны в течение периода высокого уровня SCL, как показано на рис.15-4. Высокий и низкий уровень SDA может изменяться, только когда SCL имеет низкий уровень, в противном случае будет сгенерировано условие «старт» или «стоп».
15.2.2 Условия «СТАРТ» и «СТОП» I2C Условия «СТАРТ» и «СТОП», показанные на рис.15-5, генерируются ведущим. Условие «СТАРТ» возникает при переходе с высокого уровня на низкий на линии SDA, когда SCL имеет высокий уровень. Условие «СТОП» появляется при переходе с низкого уровня на высокий на линии SDA при высоком уровне на SCL. Бит занятости I2CBB устанавливается после условия «СТАРТ» и сбрасывается после «СТОП».
15.2.3 Режимы адресации I2C Модуль I2C поддерживает 7-разрядный и 10-разрядный режимы адресации. 7-разрядная адресация В 7-разрядном формате адресации, показанном на рис.15-6, первый байт – это 7-разрядный адрес ведомого и бит R/nonW. Бит ACK посылается приемником после каждого байта.
10-разрядная адресация В 10-разрядном адресном формате, показанном на рис.15-7, первый байт содержит 11110b плюс два старших бита 10-разрядного адреса ведомого и бит R/nonW. Бит ACK посылается приемником после каждого байта. Следующий байт содержит оставшиеся 8 бит 10-разрядного адреса ведомого, завершающиеся битом ACK и 8-разрядными данными.
Повторные условия «СТАРТ» Направление потока данных на SDA может быть изменено ведущим без первоначального останова передачи, что приведет к повторению условия «СТАРТ». Это вызовет «РЕСТАРТ». После выполнения «РЕСТАРТА» адрес ведомого отправляется снова, но уже с новым направлением данных, заданным битом R/nonW. Условие «РЕСТАРТ» показано на рис.15-8.
15.2.4 Режимы работы модуля I2C Модуль I2C работает в режимах «ведущий передатчик», «ведущий приемник», «ведомый передатчик» или «ведомый приемник». Режим ведущего В режиме ведущего выполнение передачи и приема управляется с помощью битов I2CRM, I2CSTT и I2CSTP, как описано в таблице 15-1. Режим ведущего приемника вводится установкой I2CTRX=0 после передачи адресного байта ведомого и установленного бита R/nonW. Режимы ведущего передатчика и ведущего приемника показаны на рис.15-9 и рис.15-10. SCL удерживается в низком состоянии, когда необходимо вмешательство ЦПУ после передачи байта. Таблица 15-1. Функционирование ведущего
Диаграмма состояний I2C
Арбитраж Если два или более передатчиков одновременно начинают передачу на шине, запускается процедура арбитража. На рис.15-11 поясняется процедура арбитража между двумя устройствами. Процедура арбитража использует данные, представленные на SDA конкурирующими передатчиками. Первый ведущий передатчик, генерирующий логическую единицу, отвергается противостоящим ведущим, генерирующим логический сигнал низкого уровня. Процедура арбитража дает приоритет устройству, которое передает поток последовательных данных с наименьшим двоичным значением. Ведущий передатчик, потерявший арбитраж, переключается в режим ведомого приемника и устанавливает флаг потери арбитража ALIFG. Если два или более устройства посылают одинаковые первые байты, арбитраж продолжается на последующих байтах.
Если выполняется процедура арбитража, когда на SDA повторяются условия «СТАРТ» или «СТОП», ведущие передатчики, вовлеченные в арбитраж, должны послать повторные условия «СТАРТ» или «СТОП» в том же самом месте в формате фрэйма. Арбитраж не разрешается между:
Режим ведомого В режиме ведомого операции передачи и приема управляются автоматически модулем I2C. Режимы ведомого передатчика и ведомого приемника показаны на рис.15-12 и рис.15-13. В режиме ведомого приемника биты последовательных данных принимаются на SDA и сдвигаются по тактовым импульсам, генерируемым ведущим устройством. Ведомое устройство не генерирует тактовый сигнал, но может удерживать линию SCL в состоянии низкого уровня, если после приема байта необходимо вмешательство ЦПУ. В режим ведомого передатчика можно войти только из режима ведомого приемника. Вход в режим ведомого передатчика происходит, если байт адреса ведомого, переданный ведущим, является таким же адресом, как и его собственный и был послан установленный бит R/W, указывая на запрос отправки данных ведущему. Ведомый передатчик сдвигает последовательные данные из устройства на SDA по импульсам тактирования, генерируемым ведущим устройством. Ведомое устройство не генерирует тактовых сигналов, но может удерживать линию SCL в состоянии низкого уровня, если после передачи байта необходимо вмешательство ЦПУ.
15.2.5 Регистр данных I2CDR шины I2C Регистр I2CDR может быть доступен как 8-разрядный или 16-разрядный регистр, что определяется битом I2CWORD. Функции регистра I2CDR описаны в таблице 15-2. Таблица 15-2. Функции регистра I2CDR
Опустошение при передаче В режиме ведущего опустошение происходит, когда сдвиговый регистр передачи и буфер передачи пусты, а I2CNDAT > 0. В режиме ведомого опустошение происходит, когда сдвиговый регистр передачи и буфер передачи пусты, а внешний ведущий I2C все еще запрашивает данные. Когда происходит опустошение при передаче, устанавливается бит I2CTXUDF. Запись данных в регистр I2CDR или сброс бита I2CEN сбрасывает I2CTXUDF. I2CTXUDF используется только в режиме передачи. Переполнение при приеме Переполнение при приеме происходит, когда сдвиговый регистр приема и буфер приема заполнены. Когда происходит переполнение при приеме, устанавливается бит I2CRXOVR. Потери данных не происходит, поскольку в этом случае линия SCL удерживается в состоянии низкого уровня, которое приостанавливает дальнейшую активность на шине. Чтение регистра I2CDR или сброс бита I2CEN сбрасывает бит I2CRXOVR. Бит I2CRXOVR используется только в режиме приема. 15.2.6 Генерация тактовых сигналов I2C и синхронизация Модуль I2C работает с источником тактовой частоты, выбираемым битами I2CSSELx. Прескалер I2CPSC и регистры I2CSCLH и I2CSCLL определяют частоту и скважность тактового сигнала SCL для режима ведомого, как показано на рис.15-14. Источник тактовых импульсов для модуля I2C должен иметь частоту, по крайней мере в 10 раз больше частоты SCL в обоих режимах ведущего и ведомого.
Во время процедуры арбитража тактовые импульсы от различных ведущих должны быть синхронизированы. Устройство, первым генерирующее период низкого уровня на SCL берет верх над другими устройствами, вынуждая их запустить собственные периоды низкого уровня. Тогда SCL удерживается в состоянии низкого уровня устройством с самым долгим периодом низкого уровня. Другие устройства должны ожидать, пока линия SCL будет освобождена перед стартом своих периодов высокого уровня. Рис. 15-15 иллюстрирует тактовую синхронизацию. Медленный ведомый может установить на SCL низкий уровень, чтобы замедлить быстрого ведомого. Когда это происходит, все другие устройства должны войти в состояние ожидания. Это позволяет медленному ведомому замедлять быстрого ведущего.
15.2.7 Использование модуля I2C в режимах пониженного энергопотребления Модуль I2C может использоваться в MSP430 в режимах пониженного энергопотребления. Когда для модуля I2C задействован внутренний источник тактирования, модуль работает нормально независимо от режима работы MSP430. В режиме ведомого, а также когда внутренний источник тактирования не задействован, модуль I2C может автоматически обнаруживать стартовый бит для пробуждения ЦПУ. Для включения этой возможности необходимо установить биты STTIE и GIE, чтобы флаг STTIFG мог вызвать прерывание ЦПУ. Когда модуль I2C обнаруживает стартовое условие, устанавливается флаг STTIFG, а линия SCL удерживается модулем в состоянии низкого уровня, останавливая дальнейшую активность на шине. Процедура обработки прерывания должна включить внутренний источник тактирования для модуля I2C, чтобы освободить линию SCL и дать возможность продолжить нормальную работу на шине. 15.2.8 Использование модуля I2C с контроллером DMA Модуль I2C обеспечивает два источника запуска для контроллера DMA. Флаг RXRDYIFG может запустить DMA перенос, когда получены новые данные I2C, флаг TXRDYIFG может запустить DMA перенос, когда модуль I2C нуждается в очередной передаче данных. Биты TXDMAEN и RXDMAEN разрешают или запрещают использование контроллера DMA с модулем I2C. Когда RXDMAEN=1, контроллер DMA может использоваться для переноса данных из модуля I2C после приема данных модулем I2C. Когда RXDMAEN=1, RXDYIE автоматически очищается. Когда TXDMAEN=1, контроллер DMA может быть использован для переноса данных в модуль I2C для последующей передачи. Когда TXDMAEN=1, TXRDYIE автоматически очищается. См. раздел «Контроллер DMA» для выяснения подробностей функционирования контроллера DMA. 15.2.9 Конфигурирование USART для функционирования I2C Контроллер I2C является частью периферии USART. Определение индивидуального бита при использовании USART0 в режиме I2C отличается от режимов SPI или UART. По умолчанию в регистре U0CTL значения для режима UART и он содержит следующие биты: Для работы в режимах SPI или I2C необходимо установить бит SYNC. Установка бита SYNC при SWRST=1 выбирает режим SPI. Установка бита I2C, когда SYNC=1 приводит к выбору режима I2C. Биты SYNC и I2C могут быть установлены вместе в одной команде для выбора режима I2C в модуле USART0. После инициализации модуля, модуль I2C готов для выполнения операций передачи и приема. Очистка I2CEN прекращает работу модуля.
Сброс модуля I2C После PUC модуль USART сконфигурирован в режиме UART при SWRST=1. В режиме I2C установка I2CEN=0 приведет к следующему результату:
15.2.10 Прерывания I2C Модуль I2C имеет один вектор прерывания для восьми флагов прерывания. Каждый флаг прерывания имеет собственный бит разрешения прерывания. Когда прерывание разрешено и установлен бит GIE, флаг прерывания будет генерировать запрос прерывания. Следующие события вызывают I2C прерывание:
Генератор вектора прерывания I2CIV Флаги прерывания I2C разделены по приоритетам и объединены в источник одного вектора прерывания. Регистр вектора прерывания I2CIV используется для выяснения, какой флаг запросил прерывание. Разрешенное прерывание с наивысшим приоритетом генерирует число в регистре I2CIV. Это число может быть оценено или добавлено к программному счетчику для автоматического входа в соответствующую программную процедуру. Запрещенные I2C прерывания не воздействуют на содержимое I2CIV. При любом доступе (чтение или запись) к регистру I2CIV автоматически сбрасывается флаг ожидающего прерывания с наивысшим приоритетом. Если устанавливается другой флаг прерывания, после обработки начального прерывания немедленно генерируется другое прерывание. Пример программного обеспечения, использующего I2CIV Приведенный далее пример программного обеспечения показывает рекомендуемое использование I2CIV. Значение I2CIV добавляется к PC для автоматического перехода к соответствующей процедуре: I2C_ISR ADD &I2CIV, PC ; Добавление смещения к таблице переходов RETI ; Вектор 0: Нет прерывания JMP AL IFG_ISR ; Вектор 2: ALIFG JMP NACKIFG_ISR ; Вектор 4: NACKIFG JMP OAIFG_ISR ; Вектор 6: OAIFG JMP ARDYIFG_ISR ; Вектор 8: ARDYIFG JMP RXRDYIFG_ISR ; Вектор 10: RXRDYIFG JMP TXRDYIFG_ISR ; Вектор 12: TXRDYIFG JMP GCIFG_ISR ; Вектор 14: GCIFG STTIFG_ISR ; Вектор 16 ... ; Задача (программный модуль) начинается здесь RETI ; Возврат ALIFG_ISR ; Вектор 2 ... ; Задача начинается здесь RETI ; Возврат NACKIFG_ISR ; Вектор 4 ... ; Задача начинается здесь RETI ; Возврат OAIFG_ISR ; Вектор 6 ... ; Задача начинается здесь RETI ; Возврат ARDYIFG_ISR ; Вектор 8 ... ; Задача начинается здесь RETI ; Возврат RXRDYIFG_ISR ; Вектор 10 ... ; Задача начинается здесь RETI ; Возврат TXRDYIFG_ISR ; Вектор 12 ... ; Задача начинается здесь RETI ; Возврат GCIFG_ISR ; Вектор 14 ... ; Задача начинается здесь RETI ; Возврат
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|