F20-23 (1041603), страница 40
Текст из файла (страница 40)
Программа никогда не должна записывать данные в регистр SMB0STA. Это приведет кнеопределенному результату. В табл.18.1 приведены все 28 состояний модуля SMBus вместе ссоответствующими им кодами.Рисунок 18.12. SMB0STA: Регистр состояния модуля SMBus0R/WSTA7R/WSTA6R/WSTA5R/WSTA4R/WSTA3R/WSTA2R/WSTA1R/WSTA0Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Значениепри сбросе:00000000SFR Адрес:0xC1Биты 7-3: STA7-STA3: Код состояния модуля SMBus.Эти биты содержат код состояния модуля SMBus. Существует 28 возможных кодовсостояния.
Каждый код состояния соответствует единственному состоянию модуля SMBus.Корректный код состояния присутствует в регистре SMB0STA, когда флаг SI (SMB0CN.3)установлен в 1. Содержимое регистра SMB0STA не определено, когда флаг SI равен нулю.Запись в регистр SMB0STA в любое время даст неопределенный результат.Биты 2-0: STA2-STA0: Три младших значащих бита регистра SMB0STA всегда читаются как 0, когдафлаг SI установлен в 1Ред.
1.4194C8051F020/1/2/3Таблица 18.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.195Ред.
1.4Типичное действиеУстановка 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.C8051F020/1/2/3Кодсостояния(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)Простой (ожидание)Ред. 1.4Типичное действиеЧтение SMB0DAT. Ожиданиеследующего байта или STOP.Установка STO для сбросаSMBus.Никаких действий нетребуется.Загрузка SMB0DAT даннымидля передачи.Сохранить текущие данные дляповтора передачи, когда шинаосвободится.Загрузка SMB0DAT даннымидля передачи.Загрузка SMB0DAT даннымидля передачиОжидание бита STOP.Установка STO для сбросаSMBus.Установка STO для сбросаSMBus.Флаг SI не установлен.196C8051F020/1/2/319. МОДУЛЬ SPI (SPI0)Модуль SPI0 обеспечивает доступ к четырех проводной полнодуплексной последовательной шине.SPI0 может работать как в ведущем, так и в ведомом режимах, а также поддерживает работу несколькихведомых и ведущих устройств на одной шине. Вход выбора ведомого (NSS) используется для выбора модуляSPI0 в качестве ведомого устройства; дополнительный порт ввода/вывода общего назначения можноиспользовать в качестве выходов выбора ведомых, когда модуль SPI0 работает в ведущем режиме.
Имеетсясхема обнаружения конфликтов на случай, если два или более ведущих попытаются передать данныеодновременно. Модуль SPI может работать как в ведущем, так и в ведомом режимах. Когда модуль SPIнастроен как ведущий, максимальная скорость передачи данных (бит/сек) равна половине частоты системноготактового сигнала.Когда модуль SPI настроен как ведомый, максимальная скорость передачи данных (бит/сек) дляполнодуплексного режима передачи равна 1/10 системной тактовой частоты, при условии, что сигналы отведущего SCK, NSS и последовательные входные данные синхронизированы с системной тактовой частотой.Если сигналы от ведущего SCK, NSS и последовательные входные данные асинхронны, то максимальнаяскорость передачи данных (бит/сек) должна быть меньше 1/10 системной тактовой частоты. В особом случае,когда ведущему требуется только передавать данные ведомому и не требуется принимать от него данные (т.е.полудуплексный режим), ведомый модуль SPI может принимать данные с максимальной скоростью (бит/сек),равной ¼ системной тактовой частоты.
Это справедливо при условии, что сигналы от ведущего SCK, NSS ипоследовательные входные данные синхронизированы с системной тактовой частотой.Рисунок 19.1. Структурная схема модуля SPISFR шинаSPI0CKRSCR7SYSCLKSCR6SCR5SCR4SCR3SCR2SPI0CFGSCR1SCR0CKPHAC B B B FK C C C RP 2 1 0 SO2LSPI0CNFRS1FRS0SPIFWCOLMODFRXOVRNTXBSYSLVSELMSTENSPIENЛогикасчетчикабитовЛогика делителятактовой частотыЛОГИКА УПРАВЛЕНИЯ МОДУЛЯ SPIУправлениетрактом данныхТактирование шины SPI(Ведущий режим)Прерывание отмодуля SPIИнтерфейсуправлениявыводамиПередаваемыеданныеSPI0DATСдвиговый регистр7 6 5 4 3 2 1 0ПринимаемыеЛогикауправлениявыводамиNSSЧтениеSPI0DATSFR шина197MISOданныеРегистр принимаемых данныхЗапись вSPI0DATMOSIРед.
1.4МАТРИЦАSCKПортввода/выводаC8051F020/1/2/319.1. Описание сигналовНиже описаны четыре сигнала, используемые интерфейсом SPI (MOSI, MISO, SCK, NSS).19.1.1. Выход ведущего, вход ведомогоСигнал MOSI (master-out, slave-in - «выход ведущего, вход ведомого») является выходом данныхведущего устройства и входом данных ведомых устройств. Этот сигнал является выходом, если SPI0 работает введущем режиме, и входом, если SPI0 работает в ведомом режиме.
Он используется для последовательнойпередачи данных от ведущего к ведомому. Данные передаются старшими значащими разрядами вперед.19.1.2. Вход ведущего, выход ведомогоСигнал MISO (master-in, slave-out - «вход ведущего, выход ведомого») является выходом данныхведомого устройства и входом данных ведущего устройства. Он используется для последовательной передачиданных от ведомого к ведущему. Этот сигнал является входом, если SPI0 работает в ведущем режиме, ивыходом, если SPI0 работает в ведомом режиме.
Данные передаются старшими значащими разрядами вперед.Когда ведомое устройство не выбрано, его модуль SPI переводит вывод MISO в высокоимпедансное состояние.19.1.3. Тактовые импульсыСигнал SCK (serial clock – «импульсы тактирования последовательного интерфейса») является выходомведущего устройства и входом ведомых устройств. Он используется для синхронизации обмена даннымимежду ведущим и ведомым устройствами по линиям MOSI и MISO. SPI0 генерирует этот сигнал. когдаработает в ведущем режиме.19.1.4. Выбор ведомогоСигнал «Выбор ведомого» (NSS) является входом, используемым для выбора модуля SPI, работающегов ведомом режиме, или для отключения модуля SPI, работающего в ведущем режиме. В ведомом режиме онудерживается на низком уровне в течение всего сеанса обмена данными.
Сигнал NSS всегда является входомSPI0; если SPI0 работает в ведущем режиме, то сигналы выбора ведомых должны выдаваться через выводыпорта ввода/вывода общего назначения. Подключение к шине SPI показано на рис.19.2; информацияотносительно конфигурации порта общего назначения приведена в разделе 17.1.Сигнал NSS должен иметь низкий уровень для инициации обмена с модулем SPI0 как с ведомымустройством; SPI0 выйдет из ведомого режима, когда NSS = 1. Следует иметь ввиду, что принимаемые данныене фиксируются в буфере приемника, пока сигнал NSS не установится в 1. При обмене данными с передачейнескольких байт сигнал NSS должен устанавливаться в 1 (на, как минимум, 4 системных тактовых цикла) послекаждого байта, который принимается модулем SPI0 в ведомом режиме.Порт ввода/выводаПорт ввода/выводаПорт ввода/выводаРисунок 19.2. Подключение к шине SPINSSNSSNSSВедомоеустройствоВедомоеустройствоВедомоеустройствоVDDMISOMOSISCKВедущееустройствоРед. 1.4198C8051F020/1/2/319.2.