F18-19 (1041602), страница 23
Текст из файла (страница 23)
Регистры специального назначения модуля SMBusДля доступа к интерфейсу SMBus и управления им используются пять регистров SFR: региструправления SMB0CN, регистр установки тактовой частоты SMB0CR, регистр адреса SMB0ADR, регистрданных SMB0DAT и регистр состояния SMB0STA. Все эти регистры описываются в следующих разделах.99Ред. 1.2C8051F018C8051F01914.6.1. Регистр управленияРегистр управления SMB0CN используется для управления модулем SMBus и его настройки.
Все битыэтого регистра могут быть прочитаны и записаны программно. Два управляющих бита также устанавливаютсяаппаратно. Флаг прерывания от последовательного порта (SI, SMB0CN.3) устанавливается в 1 аппаратно привозникновении прерывания от модуля SMBus. Он может быть сброшен только программно. Флаг STOP (STO,SMB0CN.4) сбрасывается в 0 аппаратно при обнаружении на шине бита STOP.Установка в 1 флага ENSMB включает модуль SMBus. Сброс в 0 флага ENSMB отключает модульSMBus и удаляет его с шины. Сброс флага ENSMB и затем повторная его установка в 1 приведут к сбросумодуля SMBus. Однако, флаг ENSMB не следует использовать для временного удаления устройства с шины,т.к. информация о состоянии шины будет потеряна.
Вместо этого для удаления устройства с шины следуетиспользовать флаг назначения подтверждения АА (описание флага АА приведено ниже).Установка в 1 флага запуска (STA, SMB0CN.5) переведет модуль SMBus в режим ведущего. Если шинасвободна, модуль SMBus сгенерирует бит START. Если шина занята, то модуль SMBus будет ожидать битаSTOP, свидетельствующего об освобождении шины, и затем сгенерирует бит START через 5мкс послезадержки, определяемой значением регистра SMB0CR. (В соответствии с протоколом SMBus, модуль SMBusтакже будет считать шину свободной, если шина простаивает в течение 50мкс и бит STOP не обнаружен). Еслибит STA устанавливается в 1 в то время, когда модуль SMBus находится в режиме ведущего и уже переданыодин или несколько байт, то будет сгенерировано событие «повторный START». Чтобы гарантироватьправильное функционирование, флаг STO следует явно сбросить до установки в 1 бита STA.Если флаг окончания передачи (STO, SMB0CN.4) устанавливается в 1 в то время, когда модуль SMBusнаходится в режиме ведущего, то модуль SMBus сгенерирует на шине бит STOP.
В режиме ведомого флаг STOможно использовать для восстановления из состояния сбоя. В это случае бит STOP не генерируется, но модульSMBusведет себя так, как будто бит STOP уже получен, и переходит в режим «не адресованного» ведомогоприемника. При обнаружении на шине бита STOP модуль SMBus автоматически сбрасывает в 0 флаг STO.Флаг прерываний от последовательного порта (SI, SMB0CN.3) устанавливается аппаратно в 1, еслиинтерфейс SMBus переходит к одному из 27 возможных состояний.
Если прерывания для модуля SMBusразрешены, то при установке в 1 флага SI генерируется запрос прерывания. Флаг SI должен быть сброшенпрограммно. Когда флаг SI установлен в 1, на линии SCL удерживается низкий уровень сигнала (тактовыйимпульс «растягивается») и передача последовательных данных по шине приостанавливается.Флаг назначения подтверждения АА (AA, SMB0CN.2) используется для задания уровня сигнала налинии SDA во время тактового импульса подтверждения на линии SCL. Установка в 1 флага АА приведет кпередаче бита подтверждения ACK (низкий уровень сигнала на линии SDA) во время тактового импульсаподтверждения на линии SCL, если устройство распознало свой адрес.
Сброс в 0 флага АА приведет к передачебита «нет подтверждения» NACK (высокий уровень сигнала на линии SDA) во время тактового импульсаподтверждения на линии SCL. После передачи байта в режиме ведомого ведомое устройство можно временноудалить с шины путем сброса в 0 флага АА. Собственный адрес ведомого и адрес общего вызова будутигнорироваться.
Для восстановления работы на шине необходимо установить в 1 флаг АА, чтобы разрешитьведомому распознавать свой адрес.Установка в 1 бита разрешения таймера освобождения шины SMBus (FTE, SMB0CN.1) включитфункцию таймаута освобождения шины SMBus. Если на линиях SDA и SCL удерживается высокий уровеньсигнала в течение таймаута освобождения шины SMBus, заданного в регистре установки тактовой частоты (см.рис.14.5), то шина будет считаться свободной и будет сгенерирован (при необходимости) бит START.
Периодосвобождения шины должен быть не менее 50мкс.Установка в 1 бита разрешения таймаута SMBus (TOE, SMB0CN.0) заставит Таймер 3 начать отсчет,если на линии SCL присутствует низкий уровень и Таймер 3 включен. Если Таймер 3 переполнится, будетсгенерировано прерывание от Таймера 3, которое предупредит процессорное ядро о том, что истек таймаутнизкого уровня на линии SCL шины SMBus.Ред. 1.2100C8051F018C8051F019Рисунок 14.4. SMB0CN: Регистр управления модуля SMBusЗначениепри сбросе:RBUSYR/WENSMBR/WSTAR/WSTOR/WSIR/WAAR/WFTER/WTOEБит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0SFR Адрес:(доступен в битовомрежиме адресации)0xC000000000Бит 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 следует явно сбросить до установки в 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 превышает предел, определяемыйТаймером 3 (если он включен), то происходит условие таймаута.101Ред.
1.2C8051F018C8051F01914.6.2. Регистр установки тактовой частоты модуля SMBusРисунок 14.5. SMB0CR: Регистр установки тактовой частоты модуля SMBusR/WR/WR/WR/WR/WR/WR/WR/WБит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Значениепри сбросе:00000000Бит 7SFR Адрес:0xCFБиты 7-0: SMB0CR.[7:0]: Установка тактовой частоты модуля SMBusРегистр установки тактовой частоты SMB0CR управляет частотой тактовых импульсов,выдаваемых на линию SCL в режиме ведущего.
8-разрядное слово, сохраненное в регистре SMB0CR,загружается в специальный 8-разрядный таймер. Этот таймер считает в прямом направлении и когда онпереполнится, состояние сигнала на линии SCL изменится на противоположное.Значение SMB0CR ограничивается следующим уравнением:SMB0CR < ((288 - 0.85 * SYSCLK) / 1.125 E6), гдеSMB0CR – 8-разрядное значение (без знака) регистра SMB0CR;SYSCLK – системная тактовая частота в [МГц].Длительность удержания низкого и высокого уровней тактового сигнала на линии SCL определяетсяследующими уравнениями:TLOW = (256 – SMB0CR) / SYSCLKTHIGH = (258 – SMB0CR) / SYSCLK + 625нсЗначение регистра SMB0CR определяет также таймаут освобождения шины в соответствии соследующим уравнением:TBFT = 10 * [(256 – SMB0CR) + 1] / SYSCLKРед. 1.2102C8051F018C8051F01914.6.3.