Файл: Семейство микроконтроллеров MSP430X1XX, руководство пользователя (2004).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.06.2025
Просмотров: 2789
Скачиваний: 1
Раздел XV. |
Периферийный интерфейс USART, режим I2C |
|||
Линия шины |
||||
SCL |
||||
Устройство № 1 потеряло арбитраж |
||||
Данные |
n |
и выключилось |
||
от устройства № 1 |
||||
1 |
||||
Данные |
0 |
0 |
0 |
|
от устройства № 2 |
||||
1 |
1 |
1 |
||
Линия шины |
0 |
0 |
0 |
|
SDA |
||||
1 |
1 |
1 |
||
Рис. 15-10. Процедура арбитража между двумя ведущими передатчиками
Автоматический подсчет байтов данных
Автоматический подсчет байтов данных поддерживается в режиме ведущего с помощью регистра I2CNDAT. Когда I2CRM=0, число принятых или отправленных байтов записывается в I2CNDAT. Условие «СТОП» автоматически генерируется после того, как было передано количество байт, содержащееся в I2CNDAT.
Примечание: Регистр I2CNDAT
Не следует изменять содержимое регистра I2CNDAT, когда I2CBB=1 и I2CRM=0. В противном случае возможен непредсказуемый результат.
Режим ведомого
Врежиме ведомого операции передачи и приема автоматически управляются модулем I2C. Режимы ведомого передатчика и ведомого приемника показаны на рис. 15-11 и рис. 15-12.
Врежиме ведомого приемника биты последовательных данных принимаются на SDA и сдвигаются по тактовым импульсам, генерируемым ведущим устройством. Ведомое устройство не генерирует тактовый сигнал, но может удерживать линию SCL в состоянии низкого уровня, если после приема байта необходимо вмешательство ЦПУ.
Вход в режим ведомого передатчика происходит, когда байт адреса ведомого, переданный ведущим, совпадает с собственным адресом, и был послан установленный бит R/W, указывающий на запрос отправки данных ведущему. Ведомый передатчик сдвигает последовательные данные наружу на SDA по импульсам тактирования, генерируемым ведущим устройством. Ведомое устройство не
Библиотека Компэла |
277 |
|
MSP430x1xxFamily
Ожидание
Нет
2 |
Установка OAIFG |
|||||||
если не РЕСТАРТ |
||||||||
Обнаружен СТАРТ? |
||||||||
Да |
I2CDR пуст |
|||||||
STTIFG установлен |
I2CDR загружен? |
|||||||
I2CBUSY установлен |
||||||||
4 x I2CPSC |
||||||||
I2CBB установлен |
Да |
Нет |
||||||
8 x SCL |
||||||||
XA = 1 |
XA = 0 |
|||||||
Отправка младшего |
||||||||
8 x SCL |
8 x SCL |
|||||||
байта данных |
||||||||
Прием битов 9•8 |
Прием битов 6•0 |
|||||||
ведущему |
||||||||
адреса ведомого |
адреса ведомого |
|||||||
с R/W = 0 |
с R/W = 1 |
Ack |
Нет Ack |
|||||
Не |
Не |
8 x SCL |
||||||
совпало |
совпало |
Отправка старшего |
||||||
2 |
байта данных |
|||||||
ведущему |
||||||||
I2COA совпало |
I2COA совпало |
Ack |
Нет Ack |
1 |
||||
1 x SCL |
1 x SCL |
|||||||
Ack и |
||||||||
Отправка |
Отправка |
I2CWORD=0 |
||||||
подтверждения |
подтверждения |
|||||||
Обнаружен СТОП? |
Нет |
|||||||
8 x SCL |
||||||||
Прием битов 7•0 |
Не |
2 |
||||||
адреса ведомого |
совпало |
|||||||
I2COA совпало |
Обнаружен |
|||||||
Да |
РЕСТАРТ? |
|||||||
1 x SCL |
||||||||
Отправка |
1 x SCL |
4 x I2CPSC |
||||||
Да |
||||||||
подтверждения |
Отправка |
I2CBB очищен |
||||||
подтверждения |
||||||||
1 |
||||||||
Установка OAIFG |
8 x SCL |
13 x I2CPSC |
||||||
I2CBUSY |
||||||||
если нет РЕСТАРТ |
||||||||
Прием битов 9•8 |
||||||||
очищен |
||||||||
адреса ведомого |
NACKIFG установлен |
|||||||
с R/W = 1 |
||||||||
Обнаружен |
Да |
STTIFG установлен |
||||||
второй СТАРТ? |
||||||||
Ожидание |
||||||||
Нет |
Данные |
Да |
Вход в режим ведомого |
|||||
на SDA? |
приемника на "1" |
|||||||
Нет
Рис. 15-11. Ведомый передатчик
278 |
Библиотека Компэла |
|
MSP430x1xxFamily
генерирует тактовых сигналов, но может удерживать линию SCL в состоянии низкого уровня, если после передачи байта необходимо вмешательство ЦПУ.
Примечание: Бит I2CTRX в режиме ведомого
Бит I2CTRX должен быть очищен для нормальной работы в режиме ведо-
мого
15.2.5. Регистр данных I2CDR модуля I2C
Регистр I2CDR может быть доступен как 8-ми или 16-разрядный регистр, что определяется битом I2CWORD. Функции регистра I2CDR описаны в таблице 15-2. Когда I2CWORD=1, любая попытка изменить регистр с помощью однобайтной команды будет неуспешной и регистр не будет модифицирован.
Таблица 15-2. Функции регистра I2CDR
I2CWORD |
I2CTRX |
Функция I2CDR |
Режим передачи байта: Используется только младший байт. Байт дважды буферизируется. Если новый байт записан до передачи
01 предыдущего байта, новый байт ожидает во временном буфере до момента защелкивания в младшем байте регистра I2CDR. Когда I2CDR доступен, устанавливается бит TXRDYIFG.
Режим приема байта: Используется только младший байт. Байт дважды буферизируется. Если новый байт принят до прочтения
00 предыдущего байта, новый байт ожидает во временном буфере до момента защелкивания в младшем байте регистра I2CDR. Когда I2CDR готов для чтения, устанавливается бит RXRDYIFG.
Режим передачи слова: Первым передается младший байт слова, затем старший байт. Регистр дважды буферизируется. Если новое
11 слово записано до передачи предыдущего слова, новое слово ожидает во временном буфере до момента защелкивания в регистре I2CDR. Когда I2CDR доступен, устанавливается бит TXRDYIFG.
Режим приема слова: Первым принимается младший байт слова, |
|||
затем старший байт. Регистр дважды буферизируется. Если |
|||
1 |
0 |
новое слово принято до прочтения предыдущего слова, новое |
|
слово ожидает во временном буфере до момента защелкивания в |
|||
регистре I2CDR. Когда I2CDR готов к доступу, устанавливается бит |
|||
RXRDYIFG. |
Опустошение при передаче
В режиме ведущего опустошение происходит, когда сдвиговый регистр передачи и буфер передачи пусты. В режиме ведомого опустошение происходит, когда сдвиговый регистр передачи и буфер передачи пусты, а внешний ведущий I2C все еще запрашивает данные. Когда происходит опустошение при передаче, устанавливается бит I2CTXUDF. Запись данных в регистр I2CDR или
280 |
Библиотека Компэла |
|