F40-43a (1041604), страница 45
Текст из файла (страница 45)
Собственный адрес ведомого и адрес общего вызова будутигнорироваться. Для восстановления работы на шине необходимо установить в 1 флаг АА, чтобы разрешитьведомому распознавать свой адрес.Установка в 1 бита разрешения таймера освобождения шины SMBus (FTE, SMB0CN.1) включит таймеротсчета таймаута освобождения шины, который определяется значением регистра SMB0CR. Если на линии SCLудерживается высокий уровень сигнала, то таймер отсчитывает таймаут, определяемый регистром SMB0CR.Переполнение таймера означает истечение таймаута освобождения шины: если модуль SMBus0 ожидаетмомента для генерации бита START, то он сгенерирует его после истечения данного таймаута.
Периодосвобождения шины должен быть не более 50мкс (см. рис.19.9).Когда бит (TOE, SMB0CN.0) установлен в 1, Таймер 4 используется для отсчета таймаута низкогоуровня сигнала на линии SCL. Если Таймер 4 включен (см. раздел 23.2), то он будет перезагружаться, когда налинии SCL присутствует сигнал высокого уровня, и будет отсчитывать таймаут, когда на линии SCL235Ред. 1.3C8051F040/1/2/3присутствует сигнал низкого уровня. Если Таймер 4 включен и настроен на переполнение через 25мс (и битТОЕ установлен в 1), то переполнение Таймера 4 означает истечение таймаута низкого уровня сигнала налинии SCL; в этом случае для сброса модуля SMBus0 можно использовать процедуру обработки прерывания отТаймера 4.Рисунок 19.8. SMB0CN: Регистр управления модуля SMBus0RBUSYR/WENSMBR/WSTAR/WSTOR/WSIR/WAAR/WFTER/WTOEБит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Значениепри сбросе:00000000SFR Адрес: 0xC0(доступен в битовом SFR страница: 0режиме адресации)Бит 7: BUSY: Флаг занятости шины SMBus.0: Шина SMBus свободна1: Шина SMBus занятаБит 6: ENSMB: Включение модуля SMBus.Этот бит включает/отключает последовательный интерфейс SMBus0: SMBus отключен.1: SMBus включен.Бит 5: STA: Флаг запуска модуля SMBus.0: Бит START не передается.1: При работе в режиме ведущего бит START передается, если шина свободна.
(Если шина несвободна, то бит START передается после приема бита STOP.) Если бит STA устанавливаетсяпосле передачи или приема одного или нескольких байт и до приема бита STOP, то передаетсябит «повторный START». Бит STO следует явно сбросить в 0 до установки в 1 бита STA.Бит 4: STO: Флаг окончания передачи модуля SMBus.0: Бит STOP не передается.1: Установка в 1 бита STO приведет к передаче бита STOP.
При приеме бита STOPфлаг STO аппаратно сбрасывается в 0. Если оба флага STA и STO установлены в 1, то вслед забитом STOP передается бит START. В режиме ведомого установка флага STO заставит модульSMBus вести себя так, как будто получен бит STOP.Бит 3: SI: Флаг прерывания от последовательного порта SMBus.Этот бит устанавливается аппаратно при переходе модуля SMBus к одному из 27 возможныхсостояний. (Состояние с кодом 0xF8 не вызывает установку бита SI.) Если прерывание от SIразрешено, то установка этого бита приведет к переходу на процедуру обслуживания прерыванияот модуля SMBus. Этот бит автоматически аппаратно не сбрасывается и должен быть сброшенпрограммно.Бит 2: AA: Флаг назначения подтверждения .Этот бит определяет тип бита подтверждения, передаваемого во время тактового циклаподтверждения на линии SCL.0: Во время тактового цикла подтверждения передается бит «нет подтверждения» (высокийуровень сигнала на линии SDA).1: Во время тактового цикла подтверждения передается бит «подтверждение» (низкийуровень сигнала на линии SDA).Бит 1: FTE: Бит разрешения таймера освобождения шины SMBus0: Не используется таймаут высокого уровня на линии SCL1: Если время удержания высокого уровня на линии SCL превышает предел, определяемыйзначением регистра SMB0CR, то происходит условие таймаута.Бит 0: TOE: Бит разрешения таймаута SMBus0: Не используется таймаут низкого уровня на линии SCL.1: Если время удержания низкого уровня на линии SCL превышает предел, определяемыйТаймером 4 (если он включен), то происходит условие таймаута.Ред.
1.3236C8051F040/1/2/319.4.2. Регистр установки тактовой частоты модуля SMBusРисунок 19.9. SMB0CR: Регистр установки тактовой частоты модуля SMBus0R/WR/WR/WR/WR/WR/WR/WR/WЗначениепри сбросе:Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0SFR Адрес: 0xCFSFR страница: 000000000Бит 7Биты 7-0: SMB0CR.[7:0]: Установка тактовой частоты модуля SMBus0Регистр установки тактовой частоты SMB0CR управляет частотой тактовых импульсов,выдаваемых на линию SCL в режиме ведущего. 8-разрядное слово, сохраненное в регистре SMB0CR,загружается в специальный 8-разрядный таймер. Этот таймер считает в прямом направлении и когда онпереполнится (из состояния 0xFF в состояние 0х00), состояние сигнала на линии SCL изменится напротивоположное.Значение SMB0CR ограничивается следующим уравнением:SMB0CR < ((288 - 0.85 * SYSCLK) / 1.125 ), гдеSMB0CR – 8-разрядное значение (без знака) регистра SMB0CR;SYSCLK – системная тактовая частота в [Гц].Длительность удержания низкого и высокого уровней тактового сигнала на линии SCL определяетсяследующими уравнениями:TLOW = (256 – SMB0CR) / SYSCLKTHIGH = (258 – SMB0CR) / SYSCLK + 625нсЗначение регистра SMB0CR определяет также таймаут освобождения шины в соответствии соследующим уравнением:TBFT = 10 * [(256 – SMB0CR) + 1] / SYSCLK237Ред.
1.3C8051F040/1/2/319.4.3. Регистр данныхРегистр данных модуля SMBus0 SMB0DAT содержит байт последовательных данных, которыйнеобходимо передать, или байт последовательных данных, который только что принят. Программа можетпрочитать из регистра или записать в регистр данные, когда флаг SI установлен в 1; программа не должнапытаться обратиться к регистру SMB0DAT, когда модуль SMBus включен и флаг SI сброшен в 0, т.к. в этотмомент может осуществляться аппаратный сдвиг байта данных в регистр или из регистра.Данные всегда сдвигаются старшими разрядами вперед.
После приема байта первый бит принятыхданных занимает старший разряд регистра SMB0DAT. Когда данные выдвигаются из регистра, ониодновременно появляются на шине. Поэтому регистр SMB0DAT всегда содержит последний байт данных,присутствующий в настоящий момент на шине. Таким образом, в случае потери арбитража переход отведущего передатчика к ведомому приемнику осуществляется с корректными данными в регистре SMB0DAT.Рисунок 19.10. SMB0DAT: Регистр данных модуля SMBus0R/WR/WR/WR/WR/WR/WR/WR/WЗначениепри сбросе:Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0SFR Адрес: 0xC2SFR страница: 000000000Бит 7Биты 7-0: SMB0DAT: Данные модуля SMBus.Регистр SMB0DAT содержит байт данных, которые должны передаваться последовательномуинтерфейсу SMBus, или данные, только что принятые от последовательного интерфейса SMBus.
Читать изэтого регистра или записывать в этот регистр можно всегда, когда флаг прерывания от последовательногопорта SI (SMB0CN.3) установлен в 1. Когда флаг SI не установлен в 1, система может находится в процессесдвига данных в регистр (или из регистра) SMB0DAT и обращаться к этому регистру нельзя.19.4.4. Регистр адресаРегистр адреса SMB0ADR содержит адрес ведомого для интерфейса SMBus. В ведомом режиме семьстарших значащих битов образуют 7-битный адрес ведомого.
Младший значащий бит, бит 0, используется дляразрешения распознавания адреса общего вызова (0х00). Если бит 0 установлен в 1, адрес общего вызова будетраспознаваться. В противном случае, адрес общего вызова будет игнорироваться. Содержимое этого регистраигнорируется, если модуль SMBus работает в ведущем режиме.Рисунок 19.11. SMB0ADR: Регистр адреса модуля SMBusR/WSLV6R/WSLV5R/WSLV4R/WSLV3R/WSLV2R/WSLV1R/WSLV0R/WGCБит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Значениепри сбросе:00000000SFR Адрес: 0xC3SFR страница: 0Биты 7-1: SLV6-SLV0: Адрес ведомого SMBusЭти биты загружаются 7-разрядным адресом ведомого, на который будет отвечать модульSMBus при работе в качестве ведомого передатчика или ведомого приемника. SLV6 являетсястаршим значащим битом адреса и соответствует первому биту адресного байта,полученного по шине SMBus.Бит 0:GC: Разрешение адреса общего вызова.Этот бит используется для разрешения распознавания адреса общего вызова (0х00).0: Адрес общего вызова игнорируется.1: Адрес общего вызова распознается.Ред.
1.3238C8051F040/1/2/319.4.5. Регистр состоянияРегистр состояния SMB0STA содержит 8-битный код состояния, показывающий текущее состояниемодуля SMBus. Существует 28 возможных состояний модуля SMBus, каждому из которых соответствуетуникальный код состояния. Пять старших значащих битов кода состояния могут иметь различные значения, атри младших значащих бита для корректных кодов состояния всегда равны нулю, когда SI = 1. Поэтому всевозможные коды состояния кратны восьми. Это позволяет применять в программе код состояния в качествеиндекса, используемого для перехода на соответствующую процедуру обслуживания (используя 8 байт кодадля обслуживания состояния или для перехода на более сложную процедуру обслуживания).Для нужд программы пользователя содержимое регистра SMB0STA определено только тогда, когдафлаг SI установлен в 1.
Программа никогда не должна записывать данные в регистр SMB0STA. Это приведет кнеопределенному результату. В табл.19.1 приведены все 28 состояний модуля SMBus вместе ссоответствующими им кодами.Рисунок 19.12. SMB0STA: Регистр состояния модуля SMBus0R/WSTA7R/WSTA6R/WSTA5R/WSTA4R/WSTA3R/WSTA2R/WSTA1R/WSTA0Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Значениепри сбросе:11111000SFR Адрес: 0xC1SFR страница: 0Биты 7-3: STA7-STA3: Код состояния модуля SMBus.Эти биты содержат код состояния модуля SMBus. Существует 28 возможных кодовсостояния. Каждый код состояния соответствует единственному состоянию модуля SMBus.Корректный код состояния присутствует в регистре SMB0STA, когда флаг SI (SMB0CN.3)установлен в 1. Содержимое регистра SMB0STA не определено, когда флаг SI равен нулю.Запись в регистр SMB0STA в любое время даст неопределенный результат.Биты 2-0: STA2-STA0: Три младших значащих бита регистра SMB0STA всегда читаются как 0, когдафлаг SI установлен в 1239Ред.
1.3C8051F040/1/2/3Таблица 19.1. Коды состояния модуля SMBusКодсостояния(SMB0STA)Режим0x00Все режимы0x080x10Ведущийпередатчик/приемникВедущийпередатчик/приемникСостояние модуля SMBusОшибка шины (т.е. некорректныйSTART, некорректный STOP, …)Передан бит START.Передан бит «повторный START».Передан адрес ведомого + W. ПолученACK.Передан адрес ведомого + W. ПолученNACK.0x18Ведущий передатчик0x20Ведущий передатчик0x28Ведущий передатчикПередан байт данных. Получен ACK.0x30Ведущий передатчикПередан байт данных. Получен NACK.0x38Ведущий передатчикПотерян арбитраж.0x40Ведущий приемникПередан адрес ведомого + R.