F60-67 (1041605), страница 45
Текст из файла (страница 45)
1.2244C8051F060/1/2/3/4/5/6/720.4.3. Регистр данныхРегистр данных модуля SMBus0 SMB0DAT содержит байт последовательных данных, которыйнеобходимо передать, или байт последовательных данных, который только что принят. Программа можетпрочитать из регистра или записать в регистр данные, когда флаг SI установлен в 1; программа не должнапытаться обратиться к регистру SMB0DAT, когда модуль SMBus включен и флаг SI сброшен в 0, т.к.
в этотмомент может осуществляться аппаратный сдвиг байта данных в регистр или из регистра.Данные всегда сдвигаются старшими разрядами вперед. После приема байта первый бит принятыхданных занимает старший разряд регистра SMB0DAT. Когда данные выдвигаются из регистра, ониодновременно появляются на шине. Поэтому регистр SMB0DAT всегда содержит последний байт данных,присутствующий в настоящий момент на шине.
Таким образом, в случае потери арбитража переход отведущего передатчика к ведомому приемнику осуществляется с корректными данными в регистре SMB0DAT.Рисунок 20.10. SMB0DAT: Регистр данных модуля SMBus0R/WR/WR/WR/WR/WR/WR/WR/WЗначениепри сбросе:Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0SFR Адрес: 0xC2SFR страница: 000000000Бит 7Биты 7-0: SMB0DAT: Данные модуля SMBus0.Регистр SMB0DAT содержит байт данных, которые должны передаваться последовательномуинтерфейсу SMBus, или данные, только что принятые от последовательного интерфейса SMBus. Читать изэтого регистра или записывать в этот регистр можно всегда, когда флаг прерывания от последовательногопорта SI (SMB0CN.3) установлен в 1. Когда флаг SI не установлен в 1, система может находится в процессесдвига данных в регистр (или из регистра) SMB0DAT и обращаться к этому регистру нельзя.20.4.4. Регистр адресаРегистр адреса SMB0ADR содержит адрес ведомого для интерфейса SMBus0.
В ведомом режиме семьстарших значащих битов образуют 7-битный адрес ведомого. Младший значащий бит, бит 0, используется дляразрешения распознавания адреса общего вызова (0х00). Если бит 0 установлен в 1, адрес общего вызова будетраспознаваться. В противном случае, адрес общего вызова будет игнорироваться. Содержимое этого регистраигнорируется, если модуль SMBus0 работает в ведущем режиме.245Ред.
1.2C8051F060/1/2/3/4/5/6/7Рисунок 20.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: Адрес общего вызова распознается.20.4.5.
Регистр состоянияРегистр состояния SMB0STA содержит 8-битный код состояния, показывающий текущее состояниемодуля SMBus0. Существует 28 возможных состояний модуля SMBus, каждому из которых соответствуетуникальный код состояния. Пять старших значащих битов кода состояния могут иметь различные значения, атри младших значащих бита для корректных кодов состояния всегда равны нулю, когда SI = 1. Поэтому всевозможные коды состояния кратны восьми. Это позволяет применять в программе код состояния в качествеиндекса, используемого для перехода на соответствующую процедуру обслуживания (используя 8 байт кодадля обслуживания состояния или для перехода на более сложную процедуру обслуживания).Для нужд программы пользователя содержимое регистра SMB0STA определено только тогда, когдафлаг SI установлен в 1.
Программа никогда не должна записывать данные в регистр SMB0STA. Это приведет кнеопределенному результату. В табл.20.1 приведены все 28 состояний модуля SMBus вместе ссоответствующими им кодами.Ред. 1.2246C8051F060/1/2/3/4/5/6/7Рисунок 20.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: Код состояния модуля SMBus0.Эти биты содержат код состояния модуля SMBus0.
Существует 28 возможных кодовсостояния. Каждый код состояния соответствует единственному состоянию модуля SMBus0.Корректный код состояния присутствует в регистре SMB0STA, когда флаг SI (SMB0CN.3)установлен в 1. Содержимое регистра SMB0STA не определено, когда флаг SI равен нулю.Запись в регистр SMB0STA в любое время даст неопределенный результат.Биты 2-0: STA2-STA0: Три младших значащих бита регистра SMB0STA всегда читаются как 0, когдафлаг SI установлен в 1247Ред. 1.2C8051F060/1/2/3/4/5/6/7Таблица 20.1.
Коды состояния модуля SMBusКодсостояния(SMB0STA)Режим0x00Все режимы0x080x10Ведущийпередатчик/приемникВедущийпередатчик/приемникСостояние модуля SMBusОшибка шины (т.е. некорректныйSTART, некорректный STOP, …)Передан бит START.Передан бит «повторный START».Передан адрес ведомого + W. ПолученACK.Передан адрес ведомого + W. ПолученNACK.0x18Ведущий передатчик0x20Ведущий передатчик0x28Ведущий передатчикПередан байт данных. Получен ACK.0x30Ведущий передатчикПередан байт данных. Получен NACK.0x38Ведущий передатчикПотерян арбитраж.0x40Ведущий приемникПередан адрес ведомого + R. ПолученACK.0x48Ведущий приемникПередан адрес ведомого + R.
ПолученNACK.0x50Ведущий приемникПолучен байт данных. Передан ACK.0x58Ведущий приемник0x60Ведомый приемник0x68Ведомый приемник0x70Ведомый приемник0x78Ведомый приемник0x80Ведомый приемник0x88Ведомый приемникПолучен байт данных. Передан NACK.Получен собственный адрес ведомого+ W. Передан ACK.При передаче в ведущем режимеадреса ведомого + R/W потерянарбитраж.Получен собственный адрес ведомого+ W.
Передан ACK.Получен адрес общего вызова (0x00).Передан ACK.При передаче в ведущем режимеадреса ведомого + R/W потерянарбитраж.Получен адрес общего вызова (0x00).Передан ACK.Получен собственный адрес ведомого+ W. Получен байт данных.Передан ACK.Получен собственный адрес ведомого+ W.
Получен байт данных.Передан NACK.Ред. 1.2Типичное действиеУстановка STO для сбросаSMBusЗагрузка SMB0DAT адресомведомого + R/W. Сброс STA.Загрузка SMB0DAT адресомведомого + R/W. Сброс STA.Загрузка SMB0DAT даннымидля передачиПовтор опроса подтверждения.Установка STO + STA.1) Загрузка SMB0DATследующим байтом, или2) Установка STO, или3) Сброс STO, а затемустановка STA для передачибита «повторный START»1) Повтор передачи, или2) Установка STOСохранение текущих данныхЕсли необходимо принятьтолько один байт, то сброс АА(передача NACK после приемабайта).
Ожиданиепринимаемых данныхПовтор опроса подтверждения.Установка STO + STA.Чтение SMB0DAT. Ожиданиеследующего байта. Еслиследующий байт являетсяпоследним, то сброс АА.Установка STO.Ожидание данных.Сохранить текущие данные дляповтора передачи, когда шинаосвободится.Ожидание данных.Ожидание данных.Сохранить текущие данные дляповтора передачи, когда шинаосвободится.Чтение SMB0DAT. Ожиданиеследующего байта или STOP.Установка STO для сбросаSMBus.248C8051F060/1/2/3/4/5/6/7Кодсостояния(SMB0STA)0x90РежимСостояние модуля SMBusВедомый приемник0x98Ведомый приемник0xA0Ведомый приемник0xA8Ведомый передатчик0xB0Ведомый передатчикПолучен адрес общего вызова (0x00).Получен байт данных.Передан ACK.Получен адрес общего вызова (0x00).Получен байт данных.Передан NACK.Получен бит STOP или «повторныйSTART», когда устройство адресуетсяв качестве ведомого.Получен собственный адрес ведомого+ R.
Передан ACK.При передаче в ведущем режимеадреса ведомого + R/W потерянарбитраж.Получен собственный адрес ведомого+ R. Передан ACK.0xB8Ведомый передатчикПередан байт данных. Получен ACK.0xC0Ведомый передатчик0xC8Ведомый передатчик0xD0Ведомыйпередатчик/приемник0xF8Все режимыПередан байт данных. Получен NACK.Передан последний байт данных(AA=0). Получен ACK.Истек таймаут высокого уровня налинии SCL, определяемый значениемрегистра SMB0CR (при FTE=1)Простой (ожидание)249Ред.
1.2Типичное действиеЧтение SMB0DAT. Ожиданиеследующего байта или STOP.Установка STO для сбросаSMBus.Никаких действий нетребуется.Загрузка SMB0DAT даннымидля передачи.Сохранить текущие данные дляповтора передачи, когда шинаосвободится.Загрузка SMB0DAT даннымидля передачи.Загрузка SMB0DAT даннымидля передачиОжидание бита STOP.Установка STO для сбросаSMBus.Установка STO для сбросаSMBus.Флаг SI не установлен.C8051F060/1/2/3/4/5/6/7ПРИМЕЧАНИЯРед. 1.2250C8051F060/1/2/3/4/5/6/721.
МОДУЛЬ SPI (SPI0)Модуль SPI0 обеспечивает доступ к гибкой полнодуплексной синхронной последовательной шине.SPI0 может выполнять функции ведущего или ведомого устройства в 3-х проводном или 4-х проводномрежимах, а также поддерживает работу нескольких ведомых и ведущих устройств на одной шине. Сигналвыбора ведомого (NSS) можно настроить как вход выбора SPI0 в ведомом режиме или как вход отключенияфункций ведущего при работе на шине с несколькими ведущими, что позволяет предотвратить конфликты нашине в том случае, если два или более ведущих попытаются передать данные одновременно. Кроме этого NSSможно настроить как выход выбора кристалла в ведущем режиме или отключить при работе в 3-х проводномрежиме.
Дополнительный порт ввода/вывода общего назначения можно использовать в ведущем режиме длявыбора нескольких ведомых устройств.Рисунок 21.1. Структурная схема модуля SPISYSCLKSPI0CKRSPI0CFGSPI0CNSCR7SCR6SCR5SCR4SCR3SCR2SCR1SCR0SPIBSYMSTENCKPHACKPOLSLVSELNSSINSRMTRXBMTSPIFWCOLMODFRXOVRNNSSMD1NSSMD0TXBMTSPIENSFR шинаСхема делителятактовой частотыСХЕМА УПРАВЛЕНИЯ МОДУЛЯ SPIУправлениевыводамиПередаваемыеданныеSPI0DATБуфер передаваемых данныхПринимаемыеСдвиговый регистрЧтениеSPI0DATSFR шина251СхемауправлениявыводамиSCKMISOданныеБуфер принимаемых данныхЗапись вSPI0DATMOSIРед. 1.2NSSМАТРИЦАУправлениетрактом данных7 6 5 4 3 2 1 0Прерывание отмодуля SPIПортввода/выводаC8051F060/1/2/3/4/5/6/721.1.
Описание сигналовНиже описаны четыре сигнала, используемые интерфейсом SPI (MOSI, MISO, SCK, NSS).21.1.1. Выход ведущего, вход ведомогоСигнал MOSI (master-out, slave-in - «выход ведущего, вход ведомого») является выходом данныхведущего устройства и входом данных ведомых устройств. Он используется для последовательной передачиданных от ведущего к ведомому. Этот сигнал является выходом, если SPI0 работает в ведущем режиме, ивходом, если SPI0 работает в ведомом режиме. Данные передаются старшими значащими разрядами вперед.При работе в ведущем режиме состояние сигнала MOSI определяется старшим значащим разрядом сдвиговогорегистра как в 3-х проводном, так и в 4-х проводном режимах.21.1.2.