F40-43a (1041604), страница 47
Текст из файла (страница 47)
В этомрежиме NSS функционирует как выход и может использоваться как сигнал выбора ведомого для одногоустройства SPI. Логический уровень сигнала на выходе NSS определяется битом NSSMD0 (SPI0CN.2). Другиеведомые устройства можно адресовать с помощью портов ввода/вывода общего назначения. На рис.20.4приведена схема соединений между одним ведущим и двумя ведомыми устройствами в 4-х проводном режиме.245Ред. 1.3C8051F040/1/2/3Рисунок 20.2.
Схема включения в режиме с несколькими ведущимиВедущееустройство 1NSSGPIOMISOMISOMOSIMOSISCKSCKGPIONSSВедущееустройство 2Рисунок 20.3. Схема соединения одного ведущего и одного ведомого сиспользованием 3-х проводной шины SPIВедущееустройствоMISOВедомоеустройствоMISOMOSIMOSISCKSCKРисунок 20.4. Схема соединения одного ведущего и нескольких ведомых сиспользованием 4-х проводной шины SPIВедущееустройствоGPIOMISOMISOMOSIMOSISCKSCKNSSNSSMISOMOSIВедомоеустройствоВедомоеустройствоSCKNSSРед. 1.3246C8051F040/1/2/320.3. Функционирование SPI0 в ведомом режимеКогда модуль SPI0 включен и не настроен как ведущий, он будет функционировать как ведомый SPI.Байты данных принимаются по линии MOSI от ведущего и передаются по линии MISO ведущему, при этомведущее устройство управляет сигналом на линии SCK.
Битовый счетчик логики модуля SPI0 подсчитываетфронты сигнала SCK. После того, как 8 бит данных приняты в сдвиговый регистр, устанавливается в 1 флагSPIF и байт данных копируется в буфер приемника. Данные считываются из буфера приемника путем чтениярегистра SPI0DAT. Ведомое устройство не может инициировать процесс обмена данными.
Данные, которыенеобходимо передать ведущему, предварительно загружаются в сдвиговый регистр путем записи регистраSPI0DAT. При записи регистра SPI0DAT данные сначала загружаются в буфер передатчика. Если сдвиговыйрегистр пуст, то содержимое буфера передатчика будет сразу же передано в сдвиговый регистр. В том случае,если сдвиговый регистр уже содержит данные, то SPI0 будет ждать окончания их передачи, и только послеэтого загрузит сдвиговый регистр содержимым буфера передатчика.Когда модуль SPI0 функционирует как ведомый, его можно настроить на работу в 3-х проводном или4-проводном режимах.
Активным по умолчанию является 4-проводный ведомый режим, когда NSSMD1(SPI0CN.3) = 0 и NSSMD0 (SPI0CN.2) = 1. В 4-проводном режиме сигнал NSS выведен на внешний выводпорта, который настроен как цифровой вход. SPI0 включен, когда NSS = 0, и отключен, когда NSS = 1. Битовыйсчетчик сбрасывается по заднему фронту сигнала NSS. Следует иметь ввиду, что сигнал NSS необходимосбросить в 0 как минимум за 2 системных тактовых цикла до первого активного фронта сигнала SCK длякаждого передаваемого байта. На рис.20.4 приведена схема соединений между одним ведущим и двумяведомыми устройствами в 4-х проводном режиме.3-проводный ведомый режим активен, когда NSSMD1 (SPI0CN.3) = 0 и NSSMD0 (SPI0CN.2) = 0.
NSSне используется и не разводится на внешний вывод порта с помощью матрицы. Т.к. в этом режиме нет способаоднозначной адресации устройства, то SPI0 должен быть единственным ведомым устройством,присутствующим на шине. Важно иметь ввиду, что в 3-х проводном ведомом режиме отсутствуют средства длясброса битового счетчика. Данный счетчик определяет момент окончания приема байта. Этот битовый счетчикможно сбросить лишь путем выключения и повторного включения модуля SPI0 с помощью бита SPIEN. Нарис.20.3 приведена схема соединений между ведущим и ведомым устройствами в 3-х проводном режиме.20.4. Источники прерываний модуля SPI0Если прерывания от модуля SPI0 разрешены, то следующие 4 флага будут генерировать прерыванияпри установке их в 1:Все приведенные ниже флаги сбрасываются программно.1.2.3.4.247Флаг прерывания от модуля SPI0 SPIF (SPI0CN.7) устанавливается в 1 по окончании передачикаждого байта.
Установка этого флага возможна во всех режимах работы модуля SPI0.Флаг конфликта записи WCOL (SPI0CN.6) устанавливается в 1, если запись в регистр SPI0DATпроисходит в тот момент, когда данные из буфера передатчика еще не переписаны в сдвиговыйрегистр. В этот случае запись в регистр SPI0DAT игнорируется и буфер передатчика непереписывается. Установка этого флага возможна во всех режимах работы модуля SPI0.Флаг ошибки режима MODF (SPI0CN.5) устанавливается в 1, если модуль SPI0 функционирует какведущий в режиме работы с несколькими ведущими и на входе NSS появляется сигнал с низкимлогическим уровнем. В этом случае будут сброшены в 0 биты MSTEN и SPIEN в регистре SPI0CN,в результате чего модуль SPI0 будет отключен.
Это позволит другому ведущему устройствуполучить доступ к шине.Флаг переполнения приемника RXOVRN (SPI0CN.4) устанавливается в 1, если при работе врежиме ведомого передача завершается, а буфер приемника все еще содержит непрочитанный байтот предыдущей передачи. Новый байт не переписывается в буфер приемника, что позволяетпрочитать ранее принятый байт данных. Байт данных, который вызва переполнение приемника,теряется.Ред. 1.3C8051F040/1/2/320.5. ТактированиеКак показано на рис.20.5, используя биты управления тактовой частотой регистра конфигурациимодуля SPI (SPI0CFG), можно выбрать четыре комбинации фазы и полярности импульсов тактированияпоследовательного интерфейса. Бит CKPHA (SPI0CFG.5) выбирает одну из двух фаз тактового сигнала (фронт,используемый для фиксации данных).
Бит CKPOL (SPI0CFG.4) задает активный уровень (высокий или низкий)тактового сигнала. Как ведущий, так и ведомые устройства должны быть настроены на использованиеодинаковых фазы и полярности тактовых импульсов. Примечание: при изменении фазы и полярности тактовыхимпульсов модуль SPI0 следует отключить сбросом в 0 бита SPIEN (SPI0CN.0).Следует иметь ввиду, что в ведущем режиме модуль SPI0 осуществляет считывание сигнала с линииMISO за один цикл системного тактового сигнала до неактивного фронта (т.е. фронта, при котором происходитизменение сигнала) сигнала SCK. Это позволяет обеспечить максимальное время установления сигнала дляведомого устройства.Регистр установки тактовой частоты модуля SPI0 (SPI0CKR), показанный на рис.20.8, управляетчастотой тактирования последовательного интерфейса при работе в ведущем режиме.
При работе в ведомомрежиме содержимое этого регистра игнорируется. Когда модуль SPI0 настроен как ведущий, максимальнаяскорость передачи данных равна половине системной тактовой частоты. Когда модуль SPI настроен какведомый, максимальная скорость передачи данных (бит/сек) для полнодуплексного режима работы равна 1/10системной тактовой частоты, при условии, что сигналы от ведущего SCK, NSS (в 4-х проводном ведомомрежиме) и последовательные входные данные синхронизированы с системной тактовой частотой. Если сигналыот ведущего SCK, NSS и последовательные входные данные асинхронны, то максимальная скорость передачиданных (бит/сек) должна быть меньше 1/10 системной тактовой частоты.
В особом случае, когда ведущемутребуется только передавать данные ведомому и не требуется принимать от него данные (т.е. полудуплексныйрежим работы), ведомый модуль SPI может принимать данные с максимальной скоростью (бит/сек), равной ¼системной тактовой частоты. Это справедливо при условии, что сигналы от ведущего SCK, NSS ипоследовательные входные данные синхронизированы с системной тактовой частотой.Рисунок 20.5. Временные диаграммы сигналов данных/тактированияSCK(CKPOL = 0, CKPHA = 0)SCK(CKPOL = 0, CKPHA = 1)SCK(CKPOL = 1, CKPHA = 0)SCK(CKPOL = 1, CKPHA = 1)MISO/MOSIСЗРБит 6Бит 5Бит 4Бит 3Бит 2Бит 1МЗРNSSРед. 1.3248C8051F040/1/2/320.6. Регистры специального назначения модуля SPIДля доступа к интерфейсу SPI и управления им используются четыре регистра специальногоназначения: регистр управления SPI0CN, регистр данных SPI0DAT, регистр конфигурации SPI0CFG и региструстановки тактовой частоты SPI0CKR.
Все эти регистры описаны в следующих разделах.Рисунок 20.6. SPI0CFG: Регистр конфигурации модуля SPI0RSPIBSYR/WMSTENR/WCKPHAR/WCKPOLRSLVSELRNSSINБит 7Бит 6Бит 5Бит 4Бит 3Бит 2RSRMTБит 1RRXBMTБит 0Значениепри сбросе:00000111SFR Адрес: 0x9ASFR страница: 0Бит 7: SPIBSY: Флаг занятости модуля SPI0.Этот бит устанавливается в 1 тогда, когда SPI0 находится в процессе передачи данных (ведущий иливедомый режим).Бит 6: MSTEN: Включение ведущего режима.0: Ведущий режим отключен. Модуль SPI0 работает в ведомом режиме.1: Ведущий режим включен.
Модуль SPI0 работает в ведущем режиме.Бит 5: CKPHA: Выбор активной фазы тактового сигнала модуля SPI0.Этот бит управляет фазой тактового сигнала модуля SPI0.0: Данные фиксируются по первому фронту периода сигнала SCK.1: Данные фиксируются по второму фронту периода сигнала SCK.Бит 4: CKPOL: Выбор полярности тактового сигнала модуля SPI0.Этот бит управляет полярностью тактового сигнала модуля SPI0.0: В состоянии простоя на линии SCK установлен сигнал низкого уровня.1: В состоянии простоя на линии SCK установлен сигнал высокого уровня.Бит 3: SLVSEL: Флаг выбора ведомого.Этот бит аппаратно устанавливается в 1 всякий раз, когда на линию NSS подан сигнал низкогоуровня, и показывает, что SPI0 является выбранным ведомым.
Этот бит отражает не мгновенноесостояние сигнала на выводе NSS, а скорее сглаженную (без паразитных выбросов) форму этогосигнала.Бит 2: NSSIN: Флаг мгновенного состояния сигнала на входном выводе NSS.Этот бит отражает мгновенное значение сигнала на входном выводе NSS в момент чтения этогорегистра.
Этот вход не является сглаженным.Бит 1: SRMT: Флаг опустошения сдвигового регистра (действителен в ведомом режиме).Этот бит будет устанавливаться в 1 тогда, когда все данные переданы в сдвиговый регистр или изсдвигового регистра, и нет данных для считывания из буфера передатчика или записи в буферприемника. Этот бит сбрасывается в 0, когда байт данных передается в сдвиговый регистр из буферапередатчика или при изменении сигнала SCK.Примечание: SRMT = 1 в ведущем режиме работы.Бит 0: RXBMT: Флаг опустошения буфера приемника (действителен в ведомом режиме).Этот бит будет устанавливаться в 1 тогда, когда буфер приемника прочитан и не содержит новыхданных.