F60-67 (1041605), страница 44
Текст из файла (страница 44)
Модуль SMBus0 выходит из режима ведомогоприемника после приема бита STOP от ведущего.239Ред. 1.2C8051F060/1/2/3/4/5/6/7Рисунок 20.7. Прием данных в режиме ведомогоПрерываниеSSLAWAБайт данныхПрерываниеAБайт данныхПрерываниеПолученные интерфейсомSMBusAPПрерываниеS = STARTP = STOPA = ACKR = READ (ЧТЕНИЕ)Переданные интерфейсомSMBusSLA = Адрес ведомогоРед. 1.2240C8051F060/1/2/3/4/5/6/720.4. Регистры специального назначения модуля SMBusДля доступа к интерфейсу SMBus и управления им используются пять регистров SFR: региструправления SMB0CN, регистр установки тактовой частоты SMB0CR, регистр адреса SMB0ADR, регистрданных SMB0DAT и регистр состояния SMB0STA. Все эти регистры описываются в следующих разделах.20.4.1.
Регистр управленияРегистр управления SMB0CN используется для управления модулем SMBus и его настройки. Все битыэтого регистра можно читать и записывать программно. Два из управляющих битов также устанавливаютсямодулем SMBus0 аппаратно. Флаг прерывания от последовательного порта (SI, SMB0CN.3) устанавливается в 1аппаратно при возникновении прерывания от модуля SMBus.
Он может быть сброшен только программно.Флаг STOP (STO, SMB0CN.4) устанавливается в 1 программно. Этот флаг сбрасывается в 0 аппаратно приобнаружении на шине бита STOP.Установка в 1 флага ENSMB включает модуль SMBus0. Сброс в 0 флага ENSMB отключает модульSMBus0 и удаляет его с шины. Сброс флага ENSMB и затем повторная его установка в 1 приведут к сбросумодуля SMBus0. Однако, флаг ENSMB не следует использовать для временного удаления устройства с шины,т.к.
информация о состоянии шины будет потеряна. Вместо этого для временного удаления устройства с шиныследует использовать флаг назначения подтверждения АА (описание флага АА приведено ниже).Установка в 1 флага запуска (STA, SMB0CN.5) переведет модуль SMBus0 в режим ведущего. Еслишина свободна, модуль SMBus0 сгенерирует бит START. Если шина занята, то модуль SMBus0 будет ожидатьбита STOP, свидетельствующего об освобождении шины, и затем сгенерирует бит START через 5мкс послезадержки, определяемой значением регистра SMB0CR. (В соответствии с протоколом SMBus, модуль SMBus0также будет считать шину свободной, если шина простаивает в течение 50мкс и бит STOP не обнаружен).
Еслибит STA устанавливается в 1 в то время, когда модуль SMBus находится в режиме ведущего и уже переданыодин или несколько байт, то будет сгенерировано событие «повторный START».Если флаг окончания передачи (STO, SMB0CN.4) устанавливается в 1 в то время, когда модульSMBus0 находится в режиме ведущего, то модуль SMBus0 сгенерирует на шине бит STOP. В режиме ведомогофлаг STO можно использовать для восстановления из состояния сбоя.
В этом случае бит STOP не генерируется,но модуль SMBus0 ведет себя так, как будто бит STOP уже получен, и переходит в режим «не адресованного»ведомого приемника. Следует иметь ввиду, что этот условный бит STOP не вызовет освобождения шины. Шинабудет оставаться занятой до тех пор, пока на ней не появится бит STOP или пока не произойдет условиетаймаута освобождения шины. При обнаружении на шине бита STOP модуль SMBus0 автоматическисбрасывает в 0 флаг STO.Флаг прерываний от последовательного порта (SI, SMB0CN.3) устанавливается аппаратно в 1, еслиинтерфейс SMBus переходит к одному из 27 возможных состояний.
Если прерывания от модуля SMBus0разрешены, то при установке в 1 флага SI генерируется запрос прерывания. Флаг SI должен быть сброшенпрограммно.Важное примечание: Если флаг SI установлен в 1 в то время, когда на линии SCL удерживаетсянизкий уровень сигнала, то период тактового импульса будет «растягиваться» (на участке с низким уровнемсигнала) и передача последовательных данных по шине приостановится до тех пор, пока не будет сброшен в 0флаг SI.
На длительность высокого уровня сигнала на линии SCL установка флага SI не влияет.Флаг назначения подтверждения АА (AA, SMB0CN.2) используется для задания уровня сигнала налинии SDA во время тактового импульса подтверждения на линии SCL. Установка в 1 флага АА приведет кпередаче бита подтверждения ACK (низкий уровень сигнала на линии SDA) во время тактового импульсаподтверждения на линии SCL, если устройство распознало свой адрес. Сброс в 0 флага АА приведет к передачебита «нет подтверждения» NACK (высокий уровень сигнала на линии SDA) во время тактового импульсаподтверждения на линии SCL. После передачи байта в режиме ведомого ведомое устройство можно временноудалить с шины путем сброса в 0 флага АА.
Собственный адрес ведомого и адрес общего вызова будутигнорироваться. Для восстановления работы на шине необходимо установить в 1 флаг АА, чтобы разрешитьведомому распознавать свой адрес.Установка в 1 бита разрешения таймера освобождения шины SMBus (FTE, SMB0CN.1) включит таймеротсчета таймаута освобождения шины, который определяется значением регистра SMB0CR. Если на линии SCLудерживается высокий уровень сигнала, то таймер отсчитывает таймаут, определяемый регистром SMB0CR.Переполнение таймера означает истечение таймаута освобождения шины: если модуль SMBus0 ожидаетмомента для генерации бита START, то он сгенерирует его после истечения данного таймаута.
Периодосвобождения шины должен быть не более 50мкс (см. рис.20.9).Когда бит (TOE, SMB0CN.0) установлен в 1, Таймер 4 используется для отсчета таймаута низкогоуровня сигнала на линии SCL. Если Таймер 4 включен (см. раздел 24.2), то он будет перезагружаться, когда налинии SCL присутствует сигнал высокого уровня, и будет отсчитывать таймаут, когда на линии SCLприсутствует сигнал низкого уровня.
Если Таймер 4 включен и настроен на переполнение через 25мс (и бит241Ред. 1.2C8051F060/1/2/3/4/5/6/7ТОЕ установлен в 1), то переполнение Таймера 4 означает истечение таймаута низкого уровня сигнала налинии SCL; в этом случае для сброса модуля SMBus0 можно использовать процедуру обработки прерывания отТаймера 4.Ред. 1.2242C8051F060/1/2/3/4/5/6/7Рисунок 20.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: Включение модуля SMBus0.Этот бит включает/отключает последовательный интерфейс SMBus0.0: SMBus0 отключен.1: SMBus0 включен.Бит 5: STA: Флаг запуска модуля SMBus0.0: Бит START не передается.1: При работе в режиме ведущего бит START передается, если шина свободна.
(Если шина несвободна, то бит START передается после приема бита STOP.) Если бит STA устанавливаетсяпосле передачи или приема одного или нескольких байт и до приема бита STOP, то передаетсябит «повторный START».Бит 4: STO: Флаг окончания передачи модуля SMBus0.0: Бит STOP не передается.1: Установка в 1 бита STO приведет к передаче бита STOP. При приеме бита STOPфлаг STO аппаратно сбрасывается в 0. Если оба флага STA и STO установлены в 1, то вслед забитом STOP передается бит START. В режиме ведомого установка флага STO заставит модульSMBus0 вести себя так, как будто получен бит STOP.Бит 3: SI: Флаг прерывания от последовательного порта SMBus.Этот бит устанавливается аппаратно при переходе модуля SMBus к одному из 27 возможныхсостояний.
(Состояние с кодом 0xF8 не вызывает установку бита SI.) Если прерывание от SIразрешено, то установка этого бита приведет к переходу на процедуру обслуживания прерыванияот модуля SMBus. Этот бит автоматически аппаратно не сбрасывается и должен быть сброшенпрограммно.Бит 2: AA: Флаг назначения подтверждения .Этот бит определяет тип бита подтверждения, передаваемого во время тактового циклаподтверждения на линии SCL.0: Во время тактового цикла подтверждения передается бит «нет подтверждения» (высокийуровень сигнала на линии SDA).1: Во время тактового цикла подтверждения передается бит «подтверждение» (низкийуровень сигнала на линии SDA).Бит 1: FTE: Бит разрешения таймера освобождения шины SMBus.0: Не используется таймаут высокого уровня на линии SCL1: Если время удержания высокого уровня на линии SCL превышает предел, определяемыйзначением регистра SMB0CR, то происходит условие таймаута.Бит 0: TOE: Бит разрешения таймаута SMBus.0: Не используется таймаут низкого уровня на линии SCL.1: Если время удержания низкого уровня на линии SCL превышает предел, определяемыйТаймером 4 (если он включен), то происходит условие таймаута.243Ред.
1.2C8051F060/1/2/3/4/5/6/720.4.2. Регистр установки тактовой частоты модуля SMBusРисунок 20.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 * 106) ), гдеSMB0CR – 8-разрядное значение (без знака) регистра SMB0CR;SYSCLK – системная тактовая частота в [Гц].Длительность удержания низкого и высокого уровней тактового сигнала на линии SCL определяетсяследующими уравнениями:TLOW = (256 – SMB0CR) / SYSCLKTHIGH = (258 – SMB0CR) / SYSCLK + 625нсЗначение регистра SMB0CR определяет также таймаут освобождения шины в соответствии соследующим уравнением:TBFT = 10 * [(256 – SMB0CR) + 1] / SYSCLKРед.