Регистры егаис. когда остатки в егаис должны быть равны фактическим? Перенос продукции на второй регистр Не полностью переводит во 2 регистр 1с


7.2 Передающие регистры

7.2.1Регистр событий, предупреждающих о нарушениях FIFO (FWEV)

бит 7
RXFIFO3
бит 6
RXFIFO2
бит 5
RXFIFO1
бит 4
-
бит 3
TXFIFO3
бит 2
TXFIFO2
бит 1
TXFIFO1
бит 0
-
RXWARN3-1 Зарезерв. TXWARN3-1 Зарезерв.
0 0 0 - 0 0 0 -
r - r -

TXWARN. Предупреждение о нарушении передачи. Установлен в "1", когда соответствующая передающая конечная точка FIFO превысила предел, определённый битом TFWL в регистре TXCx, а передача из соответствующей конечной точки разрешена. Этот бит очищается, когда очищено условие предупреждения о нарушении либо записью новых данных в FIFO, когда FIFO очищено, либо по завершению передачи, о чём говорит бит TX_DONE в регистре TXSx.

RXWARN. Предупреждение о нарушении приёма. Установлен в "1", когда соответствующая передающая конечная точка FIFO превысила предел, определённый битом RFWL в регистре EPCx. Этот бит очищается, когда очищено условие предупреждения о нарушении либо чтением данных из FIFO, либо когда FIFO очищено.

7.2.2 Регистр масок, предупреждающих о нарушениях FIFO (FWMSK)

Когда установлен соответствующий бит в регистре FWEV, устанавливается WARN в регистре MAEV. Когда очищается, соответствующий бит в регистре FWEV не приводит к установке WARN.

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
Такое же описание битов, что и в регистре FWEV
0 0 0 0 0 0 0 0
r/w

7.2.3 Регистр старшего разряда номера кадра (FNH)

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
MF UL RFC Зарезервировано FN10-8
1 1 0 - 0 0 0
r r w/r - r

FN. Номер кадра. Это текущий номер принятого кадра в последнем пакете SOF. Если не принят правильный номер кадра во время 12060 битов (максимальная длина кадра, FLMAX) предыдущего обмена, то номер кадра увеличивается искусственно. Если два последовательных кадра пропущены или неверны, то текущий FN "замораживается" и загружается номером кадра из пакета SOF.

Если младший байт номера кадра был прочитан аппаратнно-реализованным программным обеспечением перед чтением регистра FNH, то пользователь в действительности читает содержимое буферного регистра, который содержит значение трёх битов номера кадра этого регистра, когда младший байт был прочитан. Правильная последовательность для чтения номера кадра такова: FNL, FNH. Операции чтения для регистра FNH, без начального чтения регистра младшего байта номера кадра (FNL), читает действительное значение трёх младших битов в номера кадра. По сбросу, FN устанавливается в "0".

RFC. Сброс счётчика кадров. Установки этого бита сбрасывает номер кадра в 0x0000, после чего этот бит очищается сам. Этот бит всегда читается как "0".

UL. Флаг разблокировки. Этот бит показывает, что, по крайней мере, два кадра были приняты без ожидаемого номера кадра, или что не было получено правильного SOF за время прихода 12060 бит. Если этот бит установлен, то номер кадра из следующего действительного пакета загружается в FN. По сбросу этот флаг устанавливается в "1".

MF. Потеря флага SOF. Этот бит установлен, когда номер кадра в полученном пакете SOF не равен ожидаемому значению, или когда SOF не получен за время прихода 12060 бит. По сбросу этот флаг устанавливается в "1".

7.2.4 Регистр младшего байта номера кадра (FNL)

Этот регистр содержит младший байт номера кадра, как это описывалось выше. Для обеспечения последовательности, чтение этого младшего байта вызывает защёлкивание трёх битов номера кадра в регистре FNH, на время чтения этого регистра. Правильная последовательность чтения номера кадра такова: FNL, FNH. По сбросу FN устанавливается в "0".

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
FN7-0
0 0 0 0 0 0 0 0
r

7.2.5 Регистр функционального адреса (FAR)

Этот регистр устанавливает функциональный адрес устройства. Различные номера конечных точек устанавливаются индивидуально через регистр управления конечными точками.

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
AD_EN AD6-0
0 0 0 0 0 0 0 0
r/w r/w

AD. Адрес. Это поле содержит 7-разрядный функциональный адрес, используемый для передачи и приёма всех символов, адресованных устройству.

AD_EN. Разрешение адресации. Когда бит установлен в "1", биты AD6-0 используются в сравнении адреса (подробности см. в разделе 6.2). Когда очищен, устройство не отвечает на любой символ на шине.

Примечание: Если установлен бит DEF в регистре управления контрольной точкой 0, то конечная точка 0 отвечает по адресу, который берётся по умолчанию.

7.2.6 Регистр управления DMA (DMACNTRL)

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
DEN IGNRXTGL DTGL ADMA DMOD DSRC2-0
0 0 0 0 0 0 - 0
r/w r/w r/w r/w r/w r/w

DSRC. Источник DMA. Поле битов источника DMA содержит двоичное значение, которое определяет, какая из конечных точек, 1…6, доступна для поддержки DMA. Биты DSRC очищаются по сбросу. В таблице 7 приведены установки бита DSRC.

Таблица 7. Описание битов DSRC

DSRC Номер конечной точки
2 1 0
0 0 0 1
0 0 1 2
0 1 0 3
0 1 1 4
1 0 0 5
1 0 1 6
1 1 x Зарезервировано

DMOD. Режим DMA. Этот бит определяет, когда появляется запрос DMA. Если он сброшен, то запрос DMA появляется по завершению передачи. Для передающих конечных точек EP1, EP3 и EP5, данные полностью переданы, что показано битом TX_DONE (для заполнения FIFO новыми передаваемыми данными). Для принимающих конечных точек EP2, EP4 и EP6, это отражает бит RX_LAST. Когда установлен бит DMOD, запрос DMA возникает, когда установлен соответствующий бит предупреждения о нарушениях FIFO. Бит DMOD очищается по сбросу.

Запрос DMA от передающей конечной точки активируется, до тех пор, пока очистится состояние запроса. Если DMOD установлен в "0", то запросы DMA возникают либо до тех пор, пока аппаратно-реализованное программное обеспечение читает соответствующий регистр состояния передачи (TXSx), таким образом, сбрасывая бит TX_DONE, либо если бит TX_LAST в регистре команды передачи (TXCx) установлен аппаратно-реализованным программным обеспечением. Если бит DMOD установлен в "1", то запросы DMA возникают, до тех пор, пока очищаются состояния предупреждения о нарушениях FIFO, вызванные либо отправлением достаточного количества байтов в конечную точку, либо если из-за передачи установлен бит TX_DONE.

Запрос DMA от передающей конечной точки активируется, до тех пор, пока очистится состояние запроса. Если DMOD установлен в "0", то запросы DMA возникают либо до тех пор, пока аппаратно-реализованное программное обеспечение читает соответствующий регистр состояния приёма (RXSx), таким образом, сбрасывая бит RX_LAST, либо если FIFO становится пустой из-за достаточного количества циклов чтения. Если бит DMOD установлен в "1", то запросы DMA возникают, до тех пор, пока очистятся состояния предупреждения о нарушениях FIFO, либо если конечная точка FIFO становится пустой из-за достаточного количества циклов чтения.

Если DMOD установлен в "0" и разрешены конечная точка и DMA, то запрос DMA возникает до тех пор, пока аппаратно-реализованное программное обеспечение читает соответствующий регистр TXSx или RXSx, таким образом, сбрасывая бит TX_DONE/RX_LAST. Если бит DMOD установлен в "1" и разрешены конечная точка и DMA, то запрос DMA возникает до тех пор, пока состояния предупреждения о нарушениях FIFO.

ADMA. Автоматический DMA. Установка этого бита автоматически разрешает выбранную конечную точку приёма или передачи. Перед разрешением режима ADMA, необходимо очистить бит DEN в регистре управления DMA (DMACNTRL). Режим ADMA функционирует до тех пор, пока установлен любой бит, кроме NTGL, в регистре события DMA (DMAEV). Для инициализации режима ADMA, должны быть очищены все биты, кроме NTGL, в регистре DMAEV.

Для операций приёма, приёмник включается автоматически; когда принимается пакет, он передаётся через DMA в память.

Для операций передачи, пакет данных посылает через DMA из памяти; передатчик включается автоматически.

Когда устройство входит в режим ADMA, любое существующее состояние конечной точки может быть потеряно. Если уже есть данные в FIFO, то они сбрасываются. Текущее состояние RX_EN и TX_EN также может измениться.

Очистка ADMA выводит устройство из режима ADMA. DEN может очистится в то же самое время или позже. Если в то же самое время, то все операции DMA немедленно прекращаются и аппаратно-реализованное программное обеспечение должно отправить любые оставшиеся данные. Если позже, то устройство завершит любую текущую операцию DMA перед выходом из режима ADMA (см. описание бита DSHL в регистре DMAEV).

DTGL. Переключатель DMA. Этот бит используется для определения состояния операций ADMA при инициализации. При инициализации аппаратно-реализованное программное обеспечение устанавливает этот бит в "1", если начинает с операции DATA1, и в "0", если начинает с операции DATA0.

Запись этого бита также обновляет бит NTGL в регистре DMAEV.

IGNRXTGL. Игнорирование переключения RX. Если этот бит установлен, то игнорируется сравнение между битом NTGL в регистре DMAEV и битом TOGGLE в соответствующем регистре RXSx во время операций приёма. В этом случае, несовпадение обоих битов во время операции приёма не остановит операцию ADMA. Если этот бит не установлен, то ADMA останавливается в случае несовпадения битов. После сброса это бит устанавлен в "0".

7.2.7 Регистр событий DMA (DMAEV)

Биты этого регистра используются в режиме ADMA. Биты 0…3 могут вызвать прерывание, если они не очищены, даже если устройство не установило режим ADMA. До тех пор, пока все эти биты не будут очищены, режим ADMA не может быть инициализирован. Режим ADMA автоматически заканчивается, когда устанавливается любой из этих битов.

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
Зарезервировано NTGL Зарезерв. DSIZ DCNT DERR DSHLT
- 0 - 0 0 - 0
- r - CoW CoW CoW CoW

DSHLT. Программная остановка DMA. Это бит устанавливается, когда операции ADMA остановлены аппаратно-реализованным программным обеспечением. Этот бит устанавливается только после того, как механизм DMA завершит все необходимые операции очистки и вернётся в состояние простоя. Выполняется при следующих условиях:

  • Если бит ADMA очищен (а DEN остаётся установленным). В этом случае, текущая операция завершается. Это значит, что любые данные в FIFO переданы в память через DMA. Бит DSHLT устанавливается только после этого. Заметьте, что DEN остаётся установленным, позже может потребоваться его очистка.
  • Если DEN очищен (ADMA может остаться либо установленным, либо может быть очищен в то же самое время). Это останавливает все DMA операции и немедленно устанавливает бит DSHLT. Если эти данные в FIFO, то они сохраняются, но не передаются.
  • Если аппаратно-реализованное программное обеспечение пытается прочитать записать соответствующие регистры EPCx, TXCx, RXCx, TXCx или RXSx (когда DEN и ADMA в регистре DMACNTRL оба установлены). Это останавливает все DMA операции и немедленно усатнавливает бит DSHLT. Операция чтения или записи не оказывают эффекта.

    DERR. Ошибка DMA. Это бит устанавливается, чтобы показать то, что пакет был принят или отправлен не правильно. Он также устанавливается, если бит TOGGLE в регистре RXSx/TXSx не равен биту NTGL в регистре DMAEV, после отправки/приёма пакета. (Заметьте, что это сравнение осуществляется перед изменением состояния бита NTGL из-за передачи пакета).

    Для приёма, DERR эквивалентен RX_ERR. Для передачи, он эквивалентен TX_DONE (установлен) и ACK_STAT (не установлен). Если установлен бит AEH в регистре счётчика ошибок DMA (DMAERR), то DERR не установится до тех пор, пока DMAERRCNT в регистре DMAERR очищен, а обнаружена другая ошибка. Ошибки обрабатываются так, как это определено в регистре DMAERR.

    DCNT. Счётчик DMA. Этот бит устанавливается, когда регистр счётчика DMA (DMACNT) "0" (см. регистр DMACNT).

    DSIZ. Размер DMA. Это бит имеет значение только для операций приёма DMA. Он показывает, что полученный пакет меньше чем полная длина FIFO. Он обычно показывает окончание много пакетной передачи.

    NTGL. Следующее переключение. Этот бит определяет состояние переключения при отправке следующего пакета данных (если идёт отправление), или состояние переключения при ожидании следующего пакета данных (если идёт приём). Этот бит инициализируется записью бита DTGL в регистре DMACNTRL. Затем он изменяет состояние с каждой отправкой пакета или приёма на конечной точке сейчас же выбранной с помощью DSRC2-0. Если операция записи DTGL возникает одновременно с операцией обновления бита, то операция записи имеет более высокий приоритет.

    Если передача идёт во время операций ADMA, то бит DTGL перезаписывает соответствующий бит TOGGLE в регистре TXCx. Это обеспечивает правильность переключающихся данных на USB.

    Заметьте, что нет соответствующих битов маски для этих событий, потому что они не используются для генерирования прерывания.

    7.2.8 Регистр масок DMA (DMAMSK)

    Любой бит установленный в "1" в этом регистре автоматически устанавливает бит DMA в регистре ALTEV, когда возникает соответствующее событие в регистре DMAEV. Иначе, установка бита DMA отключена. Описание битов 0…3, см. в регистре DMAEV.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    DSIZ DCNT DERR DSHLT
    - 0 0 - 0
    - r/w r/w r/w r/w

    7.2.9 Регистр зеркало (MIR)

    Этот регистр только для чтения. Простое его чтение не изменяет состояние регистра TXSx или RXSx, аппаратно-реализованное программное обеспечение может свободно проверить состояние канала.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    STAT
    -
    r
  • STAT. Состояние. Это поле отражает биты состояния передатчика или приёмника выбранного в поле DSRC2-0 в регистре DMACNTRL (DMA не обязательно должен быть активен или включен). Он соответствует TXSx или RXSx.

    7.2.10 Регистр счётчика DMA (DMACNT)

    Этот регистр определяет максимальное число определённое для операций ADMA.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    AEH DMAERRCNT
    0 0 0 0 0 0 - 0
    r/w r/w

    DCOUNT. Счётчик DMA. Это поле декрементируется по выполнению операции DMA до тех пор, пока не станет равным 0. Затем устанавливается бит DCNT в регистре события DMA, только когда успешно завершена следующая операция DMA. Это регистр не теряет значимости.

    Для операций приёма, этот счётчик декрементируется, когда пакет успешно принят, а затем передан в память через DMA.

    Для операций передачи, этот счётчик декрементируется, когда пакет передан из памяти через DMA, а затем успешно отправлен.

    DCOUNT должен быть установлен следующим образом: DCOUNT = (№ пакета для передачи) -1

    Если операция записи DMACNT возникает одновременно с операцией декрементирования, то операция записи имеет более высокий приоритет.

    7.2.11 Регистр ошибок DMA (DMAERR)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    FHT HOS WKMODE Зарезерв. ENUC ENUSB PNDUC PNDUSB
    0 0 0 - 1 1 1 1
    w/r0 w/r w/r - w/r w/r CoW CoW

    DMAERRCNT. Счётчик ошибок DMA. В конъюнкции со способностью обработки арифметических ошибок, этот счётчик определяет максимальное число последовательных ошибок шины перед остановкой режима ADMA. Аппаратно-реализованное программное обеспечение может установить 7-разрядный счётчик в предварительно установленное значение. После начала работы ADMA, счётчик декрементируется на 1из предварительно установленного значения каждый раз при обнаружении ошибки на шине. Каждый успешный переход сбрасывает счётчик обратно в предварительно установленное значение. Когда режим ADMA остановлен, счётчик также устанавливается обратно в предварительно установленное значение.

    Если счётчик доходит до 0 и обнаружен другой ошибочный пакет, то устанавливается бит DERR в регистре событий DMA. Подробности в разделе 7.2.7. Это регистр не теряет значимости.

    DMAERRCNT должен быть установлен следующим образом: DMAERRCNT = 3D (Максимальное число предпринятых попыток отправки) - 1

    Доступ для записи в этот регистр возможен только, когда ADMA неактивен. Иначе, он игнорируется. Чтение из этого регистра, пока ADMA активен, возвращает текущее значение счётчика. Чтение из регистра, когда ADMA неактивен, возвращает предварительно установленное значение. Счётчик декрементируется только, если установлен AEH (активизирована автоматическая обработка ошибок).

    Автоматическая обработка ошибок. Этот бит имеет два различных значения, зависящих от текущего режима перехода:

  • Неизохронный режим

    Этот режим используется для передачи больших массивов, прерываний и управления. Установка AEH в этом режиме включает автоматическую обработку пакетов, содержащих CRC или ошибки согласования разрядов.

    Если этот бит установлен во время операций передачи, то устройство автоматически перезагружает FIFO и переупорядочивает очередь пакета, для которого главный контроллер не вернул ACK. Если этот бит очищен, то автоматическая обработка ошибок выключена.

    Если этот бит установлен во время операций приёма, то пакет принятый с ошибкой (как определено в описании бита DERR в регистре DMAEV) автоматически очищен из FIFO, чтобы повторно получить этот пакет. Если этот бит очищен, то автоматическая обработка ошибок выключена.

  • Изохронный режим

    Установка этого бита позволяет устройству игнорировать пакеты, принятые с ошибками (как определено в описании бита DERR в регистре DMAEV).

    Если этот бит установлен во время операций приёма, то устройство автоматически очищает и сбрасывает FIFO, для получения следующего пакета. Ошибочный пакет игнорируется и не передаётся через DMA. Если этот бит очищен, то автоматическая обработка ошибок выключена.

    7.2.12 Регистр включения (WKUP)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    STALL DEF Зарезервировано EP3-0
    0 0 - 0 0 0 0 0
    r/w r/w - r; аппаратно в «0»

    PNDUSB. Ожидаемое включение USB. Это бит показывает, что это устройство будет включено по USB активности. Он также посылает сигнал запроса прерывания ожидания включения. Бит PNDUSB должен быть очищен главным контроллером записью "0". Аппаратный сброс устанавливает это бит.

    PNDUC. Ожидание включения микроконтроллера. Этот бит показывает, что устройство будет включено по обращению микроконтроллера. Он также посылает сигнал запроса прерывания ожидания включения. Бит PNDUC должен быть очищен главным контроллером записью "0". Аппаратный сброс устанавливает это бит.

    ENUSB. Разрешение USB. Когда установлен в "1", этот бит разрешает включение устройства, по обнаружению USB активности.

    ENUC. Разрешение микроконтроллера. Когда установлен в "1", этот бит разрешает включение устройства, когда микроконтроллер обращается к устройству.

    WKMODE. Режим включения. Этот бит выбирает интервал, после которого устройство генерирует прерывание включения (если разрешено), когда появляется событие включения, как показано ниже:

    0 - Генерирует немедленное прерывание включения

    1 - Генерирует прерывание включения после задержки включения

    HOS. Останов по приостановке. Когда этот бит установлен, устройство входит в режим Halt, как только оно попадает в состояние приостановки. Запись "1" в состоянии приостановки не оказывает влияния.

    FHT. Принудительный останов. Когда узел не присоединён (NAT в регистре MCNTRL установлен в "0"), установка этого бита переводит узел в режим Halt. Когда узел подключён (NAT в "1"), запись "1" игнорируется.

    7.2.13 Регистр управления конечной точкой 0 (EPC0)

    Этот регистр управляет конечной точкой 0.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    Зарезерв. ACK_STAT TX_DONE TCOUNT4-0
    - 0 0 0 0 0 0 0
    - CoR CoR r

    EP. Конечная точка. Это поле содержит 4-разрядный адрес конечной точки. Для конечной точки 0, эти биты аппаратно установлены в 0000b.

    DEF. Адрес по умолчанию. Когда бит установлен, устройство отвечает по адресу, берущемуся по умолчанию, независимо от содержимого полей FAR6-0/EP03-0.Когда для конечной точки передаётся символ IN, бит DEF автоматически очищается.

    Этот бит помогает в переходе от адреса по умолчанию к назначенному адресу. Переход от адреса по умолчанию 00000000000b к адресу указанному во время нумерации шины, может не получится в середине управляющей последовательности SET_ADDRESS. Это необходимо для завершения управляющей последовательности. Однако адрес должен изменится немедленно после окончания этой последовательности для того, чтобы избежать ошибок, когда другая управляющая последовательность незамедлительно последует за командой SET_ADRESS.

    По сбросу USB, аппаратно-реализованное программное обеспечение имеет 10 мс для установки, и должно записать 0x80 в регистр FAR и 0x00 в регистр EPC0. По получению команды SET_ADRESS, аппаратно-реализованное программное обеспечение должно записать 0x40 в регистр EPC0 и 0x80 в регистр FAR.

    STALL.

    1. - Передающее FIFO разрешено и получен символ IN.

    2. - Принимающее FIFO разрешено и получен символ OUT.

    Примечание:

    По передаче подтверждения сигнала STALL, устанавливаются биты RX_LAST и TX_DONE в соответствующих регистрах состояния передачи/приёма.

    7.2.14 Регистр состояния передачи 0 (TXS0)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    Зарезервировано IGN_IN FLUSH TOGGLE Зарезерв. TX_EN
    - 0 0 0 0 0 - 0
    - r/w r/w HW r/w - r/w HW

    TCOUNT. Счётчик передачи. Этот бит показывает количество пустых байтов доступных в FIFO. Это поле никогда не превышает 8 для конечной точки 0.

    TX_DONE. Передача завершена. Когда бит установлен, он показывает, что пакет передан полностью. Он очищается, когда читается этот регистр.

    ACK_STAT. Состояние подтверждения приёма. Этот бит показывает состояние, полученное от главного контроллера, подтверждения приёма ранее отправленного пакета. Этот бит интерпретируется, когда TX_DONE установлен в "1". Он устанавливается, когда получено подтверждение приёма; иначе, он остаётся очищенным. Этот бит также очищается, когда этот регистр читается.

    7.2.15 Регистр команды передачи 0 (TXC0)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    Зарезервировано IGN_IN FLUSH TOGGLE Зарезерв. TX_EN
    - 0 0 0 0 0 - 0
    - r/w r/w HW r/w - r/w HW

    TX_EN. Разрешение передачи. Этот бит разрешает передачу данных из FIFO. Он очищается чипом после передачи одиночного пакета, или подтверждения приёма STALL, в ответ на символ IN. Он должен быть установлен аппаратно-реализованным программным обеспечением для начала передачи пакета. Бит RX_EN в регистре команды приёма 0 (RXC0) имеет приоритет над этим битом; т.к. если установлен RX_EN, то бит TX_EN игнорируется до тех пор, пока RX_EN сброшен.

    Пакеты нулевой длины показываются при установке этого бита без записи любых данных FIFO.

    TOGGLE.

    FLUSH. Запись 1 в этот бит очищает все данные из управляющей контрольной точки FIFO, сбрасывает конечную точку в состояние Idle, очищает указатели чтения и записи FIFO, и затем очищается сам. Если конечная точка использует в данный момент FIFO0 для передачи данных на USB, то очистка задерживается до тех пор, пока не закончится передача. Этот бит очищается по сбросу. Он эквивалентен биту FLUSH в регистре RXC0.

    IGN_IN. Игнорирование символа IN. Когда этот бит установлен, конечная точка будет игнорировать любой символ IN направленный по его сконфигурированному адресу.

    7.2.16 Регистр данных передачи 0 (TXD0)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    TXFD
    -
    r/w

    TXFD. Передача байта данных FIFO. Описание обработки данных см. "Двунаправленные операции управляющей конечной точки FIFO0" в разделе 6.2.2.

    Аппаратно-реализованное программное обеспечение ожидает запись только полезного пакета данных. PID и CRC16 формируются автоматически.

    7.2.17 Регистр состояния приёма 0 (RXS0)

    Это регистр состояния приёма для двунаправленной управляющей конечной точки 0. Для приёма пакета SETUP после приёма пакета OUT/SETUP нулевой длины, существует две аппаратных копии этого регистра. Одна содержит состояние приёма пакета нулевой длины, а другая состояние следующего пакета SETUP с данными. Если пакет нулевой длины следует за пакетом SETUP, то первое чтение этого регистра показывает состояние пакета нулевой длины (с установкой в "1" RX_LAST и RCOUNT в "0"), а второе показывает состояние пакета SETUP.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    Зарезерв. SETUP TOGGLE RX_LAST RCOUNT3-0
    - 0 0 0 0 0 0 0
    - CoR CoR CoR r

    RCOUNT. Счётчик приёма. Этот бит показывает количество байтов присутствующих в RX FIFO. Это поле никогда не превышает 8 для конечной точки 0.

    RX_LAST.

    TOGGLE. Этот бит определяет использования PID при передаче пакета. Значение "0" приводит к генерации DATA0 PID, а значение "1" генерирует DATA1 PID. Это бит не изменяется аппаратно.

    SETUP. Этот бит показывает, что получен установочный пакет. Этот бит не изменяется, для пакета нулевой длины. Этот бит очищается, когда этот регистр читается.

    7.2.18 Регистр команды приёма 0 (RXC0)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    Зарезервировано FLUSH IGN_SETUP IGN_OUT RX_EN
    - 0 0 0 0
    - r/w r/w r/w r/w HW

    RX_EN. Разрешение приёма. Приём символа OUT отключается после каждого приёма пакета данных, или когда возвращается подтверждение приёма STALL в ответ на символ OUT. Пакеты нулевой длины показываются при установке этого бита без записи любых данных FIFO. "1" должна быть записана в этот бит для переразрешения приёма данных. Приём пакета SETUP всегда разрешён. В случае пакетов SETUP туда-и-обратно (для данной конечной точки), где действительный пакет SETUP принимается с другими не SETUP символами, контроллер конечной точки отбрасывает новый пакет SETUP и возвращает подтверждение приёма ACK. Это обеспечивает восстановление из состояния, где ACK первого символа SETUP был потерян главным контроллером.

    FLUSH. Запись 1 в этот бит очищает все данные из управляющей контрольной точки FIFO, сбрасывает конечную точку в состояние Idle, очищает указатели чтения и записи FIFO, и затем очищается сам. Если конечная точка использует в данный момент FIFO0 для передачи данных на USB, то очистка задерживается до тех пор, пока не закончится передача. Этот бит очищается по сбросу. Он эквивалентен биту FLUSH в регистре TXC0.

    IGN_OUT. Игнорирование символа OUT. Когда этот бит установлен, конечная точка будет игнорировать любой символ OUT направленный по его сконфигурированному адресу.

    IGN_SETUP.

    7.2.19 Регистр данных передачи 0 (RXD0)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    RXFD
    -
    r/w

    RXFD. Приём байта данных FIFO. Описание обработки данных см. "Двунаправленные операции управляющей конечной точки FIFO0" в разделе 6.2.2.

    Аппаратно-реализованное программное обеспечение ожидает чтение только полезного пакета данных. PID и CRC16 удаляются из приходящего потока данных автоматически.

    7.2.20 Регистр управления конечной точкой 0 (EPC1…EPC6)

    Каждая однонаправленная конечная точка имеет регистр EPCx с битами описанными ниже.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    STALL Зарезерв ISO EP_EN EP3-0
    0 - 0 0 0 0 0 0
    r/w - r/w r/w r/w

    EP. Конечная точка. Это поле содержит 4-разрядный адрес конечной точки.

    EP_EN. Разрешение конечной точки. Когда это бит установлен, поле EP3-0 используется для сравнения адреса, совместно с полем AD6-0 в регистре FAR. Описание в разделе 6.2. Когда очищен, конечная точка не отвечает на любой символ на шине USB.

    Примечание: AD_EN в регистре FAR разрешение сравнения глобального адреса устройства. Если он очищен, устройство не отвечает на любой адрес, не зависимо от состояния EP_EN.

    ISO. Изохронный. Когда этот бит установлен в "1", конечная точка изохронна. Это предполагает, что NAK послан, если конечная точка не готова, но разрешена; т.к. если символ IN принят, а нет данных доступных в FIFO для передачи, или если принят символ OUT, а FIFO заполнено, то не существует подтверждения связи USB для изохронной передачи.

    STALL. Установка этого бита приводит к тому, что чип генерирует подтверждения сигнала STALL при следующих условиях:

    3. Передающее FIFO разрешено и получен символ IN.

    4. Принимающее FIFO разрешено и получен символ OUT.
    Примечание: Символ SETUP не вызывает генерацию подтверждения сигнала STALL, когда это бит установлен.

    7.2.21 Регистр состояния передачи X (TXS1, TXS2, TXS3)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    TX_URUN ACK_STAT TX_DONE TCOUNT4-0
    0 0 0 0 0 0 0 0
    CoR CoR CoR r

    TCOUNT. Счётчик передачи. Этот бит показывает количество пустых байтов доступных в FIFO. Если это число больше 31, то рапортуется значение 31.

    TX_DONE. Передача завершена. Когда бит установлен, он показывает, что конечная точка ответила на USB пакет. Три условий могут вызвать установку бита:

    1. Пакет данных полностью передан в ответ на символ IN с не-ISO операцией.

    2. Конечная точка отправила подтверждение приёма в ответ на символ IN.

    3. Установленная очерёдность обслуживания ISO кадра была отправлена или отброшена.
    Этот бит очищается, когда читается этот регистр.

    ACK_STAT. Состояние подтверждения приёма. Этот бит интерпретируется, когда TX_DONE установлен.

    Для не-ISO операций, этот бит показывает статус подтверждения приёма (от главного контроллера) ACK для ранее отправленного пакета. Этот бит сам устанавливается при получении ACK; иначе, он очищается.

    Для ISO операций, этот бит устанавливается, если имеет место сравнение младшего байта номера кадра (см. "IGN_ISOMSK" в разделе 7.2.22), и данные были оправлены в ответ на символ IN. Иначе, этот бит сбрасывается, FIFO очищается и устанавливается TX_DONE.

    Этот бит также очищается, когда читается этот регистр.

    TX_URUN. Ранняя остановка передающего FIFO. Этот бит устанавливается, если передающее FIFO становится пустым во время передачи, и нет новых данных записанных в FIFO. Если так, то контроллер уровня сетевой архитектуры (MAC) выдает ошибку согласования разрядов следующую за EOP. Этот бит сбрасывается, когда читается этот регистр.

    7.2.22 Регистр команды передачи X (TXC1, TXC2, TXC3)

    Каждая передающая конечная точка (1,3 и 5) имеет регистр команды передачи с битами описанными ниже.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    IGN_ISOMSK TFWL1-0 RFF FLUSH TOGGLE LAST TX_EN
    0 0 0 0 0 0 0 0
    r/w r/w r/w HW r/w HW r/w r/w HW r/w HW

    TX_EN. Разрешение передачи. Этот бит разрешает передачу данных из FIFO. Он очищается чипом после передачи одиночного пакета, или подтверждения приёма STALL, в ответ на символ IN. Он должен быть установлен аппаратно-реализованным программным обеспечением для начала передачи пакета.

    LAST. Установка этого бита показывает, что входной пакет был записан в FIFO. Это используется для ввода потока данных в FIFO, пока идёт действительная передача. Если бит LAST не установлен и передающее FIFO становится пустым во время передачи, то за EOP следует ошибка согласования разрядов на шине. Пакеты нулевой длины показываются, установкой этого бита, без записи данных в FIFO.

    TOGGLE. Функционирование этого бита различается в зависимости от того, используется ли ISO или не-ISO операции.

    Для не-ISO операций, он определяет использование PID при передаче пакета. Значение "0" приводит к генерации DATA0 PID, а значение "1" генерирует DATA1 PID. Это бит не изменяется аппаратно.

    Для ISO операций, этот бит и младшие биты счётчика кадров (FNL0) действуют, как макса для бита TX_EN для применения предопределения очередности пакета для специальных номеров кадров; т.к. передача возможна только, если бит 0 в регистре FNL установлен в TOGGLE. Если символ IN не получен во время справедливости этого условия, то содержимое FIFO очищается со следующим SOF. Если конечная точка установлена в ISO, то данные всегда передаются с DATA0 PID.

    Это бит не изменяется аппаратно.

    FLUSH. Запись 1 в этот бит очищает все данные из соответствующей передающей FIFO, сбрасывает конечную точку в состояние Idle, очищает указатели чтения и записи FIFO. Если контроллер уровня сетевой архитектуры (MAC) использует в данный момент FIFO0 для передачи данных, то данные очищаются после завершения передачи. После очистки данных, этот бит сбрасывается аппаратно.

    RFF. Перезаполнение FIFO. Установка бита LAST автоматически сохраняет в буфере указатель чтения передачи (TXRP). Когда установлен бит RFF, буферизованный TXRP перезагружается в TXRP. Это позволяет пользователю повторить последний переход, ели не был принят ACK из главного контроллера. Если контроллер уровня сетевой архитектуры (MAC) используется в настоящее время передачу FIFO, TXRP перезагружается только после завершения передачи. После перезагрузки, этот бит сбрасывается аппаратно.

    TFWL. Предел предупреждения о нарушениях передающего FIFO. Эти биты определяют, как много байтов может быть передано из соответствующего FIFO перед появлением состояния преждевременной остановки. Если число байтов остающихся в FIFO равно или меньше чем выбранный предел, при котором возникает предупреждение о нарушении, то установлен бит TXWARN в регистре FWEV. Чтобы избежать прерываний, вызванных установкой этого бита, (во время заполнения FIFO перед началом передачи), бит TXWARN устанавливается только тогда, когда разрешена передача из конечной точки (установлен TX_ENx в регистре TXCx). См. таблицу 8.

    Таблица 8. Установка предела предупреждения о нарушениях передающего FIFO

    IGN_ISOMSK. Игнорировать маску ISO. Этот бит эффективен, только если конечная точка установлена быть изохронной. Если бит установлен, то он отключает блокировку определённых номеров кадров с функцией чередования бита TOGGLE.Таким образом, данные передаются по приёму следующего символа IN. Если бит сброшен, то данные передаются, когда FNL0 равен TOGGLE. Этот бит очищается по сбросу.

    7.2.23 Регистр данных передачи X (TXD1, TXD2, TXD3)

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    TXFD
    -
    w

    TXFD. Передача байтов данных FIFO. Описание обработки данных конечной точки FIFO см. в "Операции передающей конечной точки (TXFIFO1, TXFIFO2, TXFIFO3)" в разделе 6.2.2. Аппаратно-реализованное программное обеспечение ожидает запись только полезного пакета данных. PID и CRC16 вставляются в приходящий поток данных автоматически.

    7.2.24 Регистр состояния приёма X (RXS1, RXS2, RXS3)

    Каждый канал принимающей конечной точки (2, 4 и 6) имеет один регистр состояния приёма с битами определёнными ниже. Для приёма пакета SETUP после приёма пакета OUT нулевой длины, существует две аппаратных копии этого регистра. Одна содержит состояние приёма пакета нулевой длины, а другая состояние следующего пакета SETUP с данными. Если пакет нулевой длины следует за пакетом SETUP, то первое чтение этого регистра показывает состояние пакета нулевой длины, а второе показывает состояние пакета SETUP.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    RE_ERR SETUP TOGGLE RX_LAST RCOUNT3-0
    0 0 0 0 0 0 0 0
    CoR CoR CoR HW CoR r

    RCOUNT. Счётчик приёма. Этот бит показывает количество байтов присутствующих в конечной точке принимающего FIFO. Это поле никогда не превышает значение 15, для конечной точки 0.

    RX_LAST. Приняты последние байты. Показывает, что по завершению успешной операции приёма был послан ACK. Он очищается, когда читается этот регистр.

    TOGGLE. Функционирование этого бита различается в зависимости от того, используется ли ISO или не-ISO операция.

    Для не-ISO операций, значение "0" показывает, что успешно принят пакет имеющий DATA0 PID, а значение "1", что этот пакет имеет DATA1 PID.

    Для ISO операций, этот бит показывают младшие биты счётчика кадров (FNL0) после успешного приёма для этой конечной точки.

    Это бит сбрасывается в "0" при чтении регистра RXSx.

    SETUP. Этот бит показывает, что получен установочный пакет. Этот бит очищается, когда этот регистр читается.

    RX_ERR. Ошибка приёма. Когда бит установлен, он показывает ошибку сетевого уровня, такую как ошибка согласования разрядов или CRC. Если этот бит установлен, то аппаратно-реализованное программное обеспечение должно очищать соответствующее FIFO.

    7.2.25 Регистр команды приёма X (RXC1, RXC2, RXC3)


    Каждая из принимающих конечных точек (2,4 и 6) имеет один регистр команды приёма с битами описанными ниже.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    Зарезерв. RFWL Зарезерв. FLUSH IGN_SETUP Зарезерв. RX_EN
    - 0 0 - 0 0 - 0
    - r/w - r/w r/w - r/w

    RX_EN. Разрешение приёма. Приём символа OUT отключается после каждого приёма пакета данных, или когда возвращается подтверждение приёма STALL в ответ на символ OUT. "1" должна быть записана в этот бит для переразрешения приёма данных. Приём пакета SETUP всегда разрешён. В случае пакетов SETUP туда-и-обратно (для данной конечной точки), где действительный пакет SETUP принимается с другими не SETUP символами, принимающая конечная точка отбрасывает новый пакет SETUP и возвращает подтверждение приёма ACK. Если, в любом другом случае, принимающая машина состояний не может принять пакет SETUP, то не может быть сгенерирован HANDSHAKE.

    IGN_SETUP. Игнорирование символа SETUP. Когда этот бит установлен, конечная точка будет игнорировать любой символ SETUP направленный по его сконфигурированному адресу.

    FLUSH. Запись 1 в этот бит очищает все данные из управляющей контрольной точки FIFO, сбрасывает конечную точку в состояние Idle, очищает указатели чтения и записи FIFO. Если контроллер уровня сетевой архитектуры (MAC) использует в данный момент FIFO0 для приёма данных, то очистка задерживается до тех пор, пока не закончится приём.

    RFWL1-0. Предел предупреждения о нарушениях принимающего FIFO. Эти биты определяют, как много байтов может быть принято из соответствующего FIFO перед появлением состояния преждевременной остановки. Если число пустых байтов остающихся в FIFO равно или меньше чем выбранный предел, при котором возникает предупреждение о нарушении, то установлен бит RXWARN в регистре FWEV.

    Таблица 9. Установка предела предупреждения о нарушениях принимающего FIFO

    7.2.26 Регистр данных передачи X (RXD1, RXD2, RXD3)

    Каждая из трёх принимающих конечных точек FIFO имеет один регистр данных приёма с битами описанными ниже.

    бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
    RXFD
    -
    r/w

    RXFD. Приём байта данных FIFO. Описание обработки данных конечной точки FIFO см. "Операции приёма конечной точки (RXFIFO1, RXFIFO2, RXFIFO3)" в разделе 6.2.2.

    Аппаратно-реализованное программное обеспечение ожидает чтение только полезного пакета данных. PID и CRC16 прерываются принимающей машиной состояний.

    7.3 Размещение регистров

    Таблица 10 содержит перечень всех регистров устройства, их адреса и их аббревиатуру.

    Таблица 10. Карта памяти USBN9603/4

    Адрес Мнемоника регистра Наименование регистра
    0x00 MCNTRL Главное управление
    0x01 CCONF Конфигурация генератора тактовой частоты
    0x02 Зарезервировано
    0x03 RID Идентификатор модификации
    0x04 FAR Функциональный адрес
    0x05 NFSR Функциональное состояние узла
    0x06 MAEV Главное событие
    0x07 MAMSK Главная маска
    0x08 ALTEV Событие чередования
    0x09 ALTMSK Маска чередования
    0x0A TXEV Событие передачи
    0x0B TXMSK Маска передачи
    0x0C RXEV Событие приёма
    0x0D RXMSK Маска приёма
    0x0E NAKEV Событие NAK
    0x0F NAKMSK Маска NAK
    0x10 FWEV Событие, предупреждающее о нарушениях FIFO
    0x11 FWMSK Маска, предупреждающая о нарушениях FIFO
    0x12 FNH Старший байт номера кадра
    0x13 FNL Младший бай номера кадра
    0x14 DMACNTRL Управление DMA
    0x15 DMAEV Событие DMA
    0x16 DMAMSK Маска DMA
    0x17 MIR Зеркало
    0x18 DMACNT Счётчик DMA
    0x19 DMAERR Счётчик ошибок DMA
    0x1A Зарезервировано
    0x1B WKUP Включение
    0x1C - 0x1F Зарезервировано
    0x20 EPC0 Управление конечной точкой 0
    0x21 TXD0 Передача данных 0
    0x22 TXS0 Состояние передачи 0
    0x23 TXC0 Команда передачи 0
    0x24 Зарезервировано
    0x25 RXD0 Приём данных 0
    0x26 RXS0 Состояние приёма 0
    0x27 RXC0 Команда приёма 0
    0x28 EPC1 Управление конечной точкой 1
    0x29 TXD1 Передача данных 1
    0x2A TXS1 Состояние передачи 1
    0x2B TXC1 Команда передачи 1
    0x2C EPC2 Управление конечной точкой 2
    0x2D RXD1 Приём данных 1
    0x2E RXS1 Состояние приёма 1
    0x2F RXC1 Команда приёма 1
    0x30 EPC3 Управление конечной точкой 3
    0x31 TXD2 Передача данных 2
    0x32 TXS2 Состояние передачи 2
    0x33 TXC2 Команда передачи 2
    0x34 EPC4 Управление конечной точкой 4
    0x35 RXD2 Приём данных 2
    0x36 RXS2 Состояние приёма 2
    0x37 RXC2 Команда приёма 2
    0x38 EPC5 Управление конечной точкой 5
    0x39 TXD3 Передача данных 3
    0x3A TXS3 Состояние передачи 3
    0x3B TXC3 Команда передачи 3
    0x3C EPC6 Управление конечной точкой 6
  • Область регистров специальных функций SFR (Special Function Regis­ter) базового МК 8051 обширна и содержит 21 регистр, назначение которых приведено в табл. 2.3. Здесь же даны их оригинальные английские названия, на основании которых были заданы их мнемонические имена.

    Регистры специальных функций с указанием адресов и начальных значений регистров представлены в табл. 2.4. Все регистры имеют байтовые адреса, но 16 из них помимо байтовой адресации допускают и адресацию отдельных разрядов. Эти регистры выделены в таблице жирным шрифтом, и для них указаны абсолютные адреса отдельных битов и их мнемонические обозначения. Отметим также, что эти регистры имеют адрес, заканчивающийся на цифры 0 и 8.

    Таблица 2.3

    Регистр

    Наименование

    Аккумулятор (Accumulator)

    Регистр расширитель аккумулятора

    16-разрядный указатель данных DPTR (Data Pointer)

    Младший байт указателя данных DPTR (Data Pointer Low)

    Старший байт указателя данных DPTR (Data Pointer High)

    Слово состояния программы (Program Status Word)

    Регистр указатель стека (Stack Pointer)

    Регистр-защелка порта P0

    Регистр-защелка порта P1

    Регистр-защелка порта P2

    Регистр-защелка порта P3

    Младший байт счетного регистра таймера/счетчика 0

    Старший байт счетного регистра таймера/счетчика 0

    Младший байт счетного регистра таймера/счетчика 1

    Старший байт счетного регистра таймера/счетчика 1

    Регистр задания режимов таймеров счетчиков (Timer/counter Mode)

    Регистр управления таймеров (Timer/counter Control)

    Буфер данных UART (Serial Buffer)

    Регистр управления UART (Serial Control)

    Регистр задания приоритетов (Interrupt Priority)

    Регистр разрешения прерываний (Interrupt Enable)

    Регистр управления мощностью (Power Control)

    Адрес прямо адресуемых битов может быть записан либо в виде выражения <Регистр>.<Разряд>, либо в виде абсолютного битового адреса. Например, запись TCON.2 означает адрес второго разряда регистра TCON. Кроме того, многие биты управляющих регистров имеют собственные названия ­– так, например, данный бит имеет название IT1.

    Таблица 2.4

    Регистр

    Адрес

    Адреса и мнемоника битов

    Значение

    при сбросе

    Окончание табл . 2.4

    Регистр

    Адрес

    Адреса и мнемоника битов

    Значение

    при сбросе

    На рис. 2.13 представлено все пространство регистров специальных функций с отображением их местоположения. Как видно из рисунка разработчики заложили в архитектуру микроконтроллера весьма значительный резерв для создания новых моделей с расширенной периферией и функциональными возможностями.

    Рассмотрим назначение регистров специальных функций более подробно.

    Рис. 2.13. Пространство регистров специальных функций

    Аккумулятор A и расширитель аккумулятора B . Микроконтроллеры семейства 8051 имеют аккумуляторно-ориентированную архитектуру. Аккумулятор A представляет собой 8-разрядный регистр, который является источником операнда и местом фиксации результата при выполнении арифметических и логических операций и ряда операций передачи данных. В аккумуляторе могут выполняться логические операции; в него же поступают результаты ряда логических операций и специальных команд перемещения. Некоторые функции выполняются только с аккумулятором: сдвиг, проверка содержимого на нуль и др. Специальный 8-разрядный регистр-расширитель аккумулятора В используется в сочетании с аккумулятором при выполнении операций умножения и деления для хранения второго входного операнда и помещения возвращаемых восьми бит результата. Во всех других операциях регистр В может использоваться как обычный рабочий регистр.

    Несмотря на то, что архитектура МК семейства 8051 является аккумуляторно-ориентированной, имеется возможность выполнения ряда операций, минуя аккумулятор. Данные могут быть перемещены из любой ячейки на кристалле в любой регистр по адресу или косвенному адресу; любой регистр может быть загружен константой, минуя аккумулятор.

    Регистр-указатель данных DPTR . Этот регистр предназначен для хранения 16-разрядного адреса при выполнении команд перемещения переменных во всем адресном пространстве ВПД вплоть до 64 Кбайт. Состоит из двух программно доступных 8-разрядных регистров DPH (старший байт) и DPL (младший байт), которые при необходимости могут использоваться и в качестве независимых регистров общего назначения. Кроме того, DPTR служит базовым регистром при косвенной адресации в командах пересылки.

    Регистр слова состояния программы PSW . При выполнении многих команд в АЛУ формируется ряд признаков, которые фиксируются в регистре PSW. В отдельные разряды этого регистра, именуемые флагами, после выполнения очередной команды может заноситься некоторая информация о результате ее выполнения. Помимо этого, PSW содержит флаги выбора текущего банка регистров общего назначения и флаг, программируемый пользователем.

    Регистр-указатель стека SP . Стеком называется определяемая пользователем область памяти данных, запись и чтение в которую осуществляется по принципу «последним вошел – первым вышел». Восьмиразрядный регистр-указатель стека SP содержит адрес последнего байта, записанного в стек. Стек используется для передачи параметров между подпрограммами, для временного хранения переменных, хранения слова состояния во время выполнения программ обслуживания прерываний.

    Содержимое указателя стека автоматически уменьшается или увеличивается при каждой записи или извлечении данных из стека, а также при вызовах и возвратах из подпрограмм. Теоретически стек может иметь глубину 128 байт. Указатель стека при сбросе принимает значение 07H, поэтому начальный адрес содержимого стека – ячейка 08H. Путем программного изменения содержимого указателя стека можно переместить стек в любую область резидентного ОЗУ.

    При использовании стека необходимо учитывать, что глубина стека аппаратными средст­вами не контролируется, и при ее чрезмерном увеличении могут быть заняты не предназначенные для стека ячейки памяти с потерей инфор­мации в них. Аппаратно стек используется для сохранения адреса воз­врата при обслуживании прерывания.

    Регистры-защелки параллельных портов ввода-вывода . Порты P0…P3 являются двунаправленными портами ввода-вывода и предназначены для обеспечения обмена информацией МК с внешними устройствами, образуя 32 линии ввода-вывода. Регистры-защелки этих портов представляют собой буферные регистры, в которые заносится информация при вводе и выводе. Назначение и особенности работы с портами рассмотрены далее в отдельном разделе.

    Регистры таймеров/счетчиков . Регистры TMOD, TCON и регистровые пары с символическими именами TH0, TL0 и TH1, TL1 служат для обеспечения работы двух 16-разрядных программно управляемых таймеров/счетчиков. Подробное назначение этих регистров будет рассмотрено при описании таймеров/счетчиков.

    Регистры последовательного порта . Регистры с символическими именами SBUF и SCON предназначены для задания режимов и управления работой универсального асинхронного приемопередатчика. Их описание приводится в разделе, посвященном рассмотрению работы UART.

    Регистры системы прерываний . Регистры IP и IE используются для программного разрешения прерываний от отдельных источников прерываний и изменения приоритетов этих источников. Как и в предыдущем случае, эти регистры будут рассмотрены при описании системы прерываний.

    Регистр управления мощностью PCON . С помощью разрядов этого регистра устанавливаются энергосберегающие режимы холостого хода и отключенного питания. Один из разрядов служит как бит удвоения скорости передачи UART.

    Заканчивая раздел, следует отметить, что при дальнейшем развитии семейства в область регистров специальных функций добавляются регистры для расширенных ресурсов новых моделей микроконтроллеров. Например, в современные МК введены модули дополнительных таймеров, матриц программируемых счетчиков PCA (Programmable Counter Array), сторожевого таймера WDT (Watchdog Timer), прямого доступа к памяти DMA (Direct Memory Access), аналого-цифрового преобразователя ADC (Analog Digital Converter) и др.

    Когда кассир реализует бутылку крепкого алкоголя, в ЕГАИС она отнимается с баланса второго регистра. Такое правило действует с 1 октября 2016 года. В результате при нулевом количестве продукции на втором регистре его баланс уходит в минус, то есть в конце рабочего дня кассир имеет на втором регистре отрицательный остаток. Чтобы этого не было, нужно перенести продукцию с первого регистра на второй.

    Как перенести товар

    В разделе «Мои товары» следует выбрать «Перенос на 2 регистр», затем «Перенести товары». Если баланс давно не обновлялся, сервис сделает это автоматически. В результате пользователь увидит список товаров, по которым на регистре №2 числится отрицательный баланс.

    При осуществлении переноса будут указаны накладные, по которым товар поступил. Система автоматически выбирает наиболее ранние документы, ведь товар из них, вероятнее всего, уже реализован.

    Пользователю следует проверить список и нажать кнопку «Перенести». ЕГАИС обработает данные и подтвердит перенос - отрицательный остаток на втором регистре закроется.

    Пока сервис позволяет перенести ровно столько товара, сколько необходимо для покрытия отрицательного баланса. Позже разработчики планируют добавить возможность переносить произвольное количество товара.

    Регистры ЕГАИС предназначены для хранения информации об остатках алкогольной продукции. Ведь госсистема отслеживает не только реализацию спиртного, но и данные о его остатках.

    Что такое регистры ЕГАИС

    Регистр № 1 - это виртуальный склад. Здесь собрана информация о продукции и ее производителе, в том числе идентификаторы справок А и Б. На регистре № 1 фиксируется поступление алкогольной продукции, перемещение между точками, возврат, а также списание и постановка на баланс ЕГАИС.

    Регистр № 2 представляет собой виртуальный торговый зал. На этом регистре фиксируется продажа спиртного в розницу, списание и постановка на баланс ЕГАИС.

    Продукция с разными справками А и Б, но с одинаковым алкокодами группируется на втором регистре под одним названием . Поясним на примере.

    В торговую точку поступило 3 партии товара одинакового наименования и объема от разных поставщиков. На регистре № 1 каждая партия будет фигурировать отдельно :

    • Водка «Талка» 0,5 л. 3 шт. FB-000000000000001
    • Водка «Талка» 0,5 л. 5 шт. FB-000000000000002
    • Водка «Талка» 0,5 л. 4 шт. FB-000000000000003

    Когда продукция будет перенесена на 2-й регистр, эти товары будут объединены в одну группу . Пользователь увидит не код продукции, по которому она будет объединена, а ее название: Водка «Талка» 0,5 л. 12 шт.

    Когда продукция перенесена на второй регистр, вернуть ее обратно поставщику уже нельзя, равно как и переместить в другую торговую точку. При переносе продукция списывается с баланса ЕГАИС на основе краткой информации. Тогда как для возврата или перемещения нужна справка Б, а она на втором регистре не учитывается.

    Регистры в учете алкоголя

    Рассмотрим все пути, которые бутылка алкогольной продукции может пройти в магазине.

    Поступление на склад

    Обычно продукция прибывает от поставщика. Составляется товарно-транспортная накладная, товар помещается на первый регистр.

    Другой вариант поступления - выявлена неучтенная ранее продукция . Если все документы по ней в наличии, то ее можно записать на первый регистр. Если же нет, то на регистр № 2.

    Списание продукции

    Списывается продукция по нескольким основаниям.

    Реализация крепкого алкоголя. Товар реализуется через кассу, она формирует чек и отправляет его в электронном виде в ЕГАИС. Происходит автоматическое списание с регистра № 2.

    Продажа пива, сидра, медовухи и прочих аналогичных напитков на разлив. Списывать продукцию нужно не позже следующего дня после того, как вскрыта тара. Действовать следует в таком порядке:

    • после вскрытия тары с пивом и реализации из нее какого-то объема в журнале учета продаж фиксируется вся тара;
    • затем составляется акт списания целиком на всю тару.

    Если товар поступил по накладным через Контур.Маркет (ЕГАИС), то списывать его нужно с того регистра, на котором он числится.

    Возврат или перемещение. Такие операции оформляются расходной товарно-транспортной накладной. Как в случае с перемещением, так и в случае с возвратом, расходная ТТН отправляется с регистра № 1. Второй регистр в этих операциях не задействован.

    Прочее списание - бой, утеря, кража. Акт списания составляется вручную с обязательным указанием причин.

    Для отдельных продавцов есть преференции - они могут не фиксировать в ЕГАИС алкоголь, если он продан через кассу. Это распространяется:

    1. На заведения общепита, где алкоголь продается порциями. В день вскрытия бутылки нужно составить акт списания и отправить его в РАР.
    2. На сельские магазины, где нет постоянного доступа в интернет. Акт списания можно отправить не позднее следующего дня с даты продажи.

    Следует помнить, что при реализации крепкого алкоголя и пивных напитков нужно печатать в чеке наименование товаров . Не распространяется правило только на предпринимателей, применяющих спецрежимы. У них есть отсрочка до 1 февраля 2021 года.

    Обратите внимание! Существуют регистров 1 и 2 ЕГАИС.

    В прошлый раз был рассмотрен вариант увеличения выходов микроконтроллера при помощи микросхемы – дешифратора , сегодня рассмотрим более продвинутый вариант на сдвиговом регистре 74HC595. Использовав всего одну микросхему можно заиметь в свое распоряжение дополнительно 8 выходов, использовав всего 3 ноги микроконтроллера. А благодаря возможности расширения, добавив вторую микросхему, количество выходов можно увеличить до 16. Если мало, можно добавить третью и получить в пользование уже 24 выхода и такой трюк можно повторять сколько угодно раз. При этом количество занимаемых ног микроконтроллера так и останется 3, красота!

    Итак, рассмотрим более подробно назначение выводов микросхемы и научимся управлять сдвиговым регистром 74hc595 в Bascom-AVR.

    Для начала ознакомимся с выводами микросхемы, а точнее с их функциональностью. Ниже представлена вырезка из даташита на 74hc595 с обозначением выводов микросхемы:


    • Q0…Q7 – выходы которыми будем управлять. Могут находится в трёх состояниях: логическая единица, логический ноль и высокоомное Hi-Z состояние
    • GND – земля
    • Q7′ – выход предназначенный для последовательного соединения регистров.
    • MR – сброс регистра.
    • SH_CP – вход для тактовых импульсов
    • ST_CP – вход «защёлкивающий» данные
    • OE – вход переводящий выходы из HI-Z в рабочее состояние
    • DS – вход данных
    • VCC – питание 5 вольт

    Логика работы с регистром

    Когда на тактовом входе SH_CP появляется логическая единица, бит находящийся на входе данных DS считывается и записывается в сдвиговый регистр. Этот бит записывается в самый младший разряд. При поступлении на тактовый вход следующего импульса высокого уровня, в сдвиговый регистр записывается следующий бит со входа данных. А тот бит который был записан ранее сдвигается на один разряд влево, а его место занимает вновь пришедший бит. Следующий тактовый импульс запишет третий бит, а два предыдущих сдвинутся дальше. Когда все восемь бит заполнились и приходит девятый тактовый импульс то регистр снова начинает заполнятся с младшего разряда и всё повторятся вновь. Что бы данные появились на выходах Q0…Q7 нужно их «защёлкнуть». Для этого необходимо подать логическую единицу на вход ST_CP .

    - MR осуществляет сброс регистра, устанавливая все выходы Q0…Q7 в состояние логического нуля. Для осуществления сброса нужно подать логический ноль на этот вход и подать положительный импульс на вход ST_CP . Очень полезная функция, так как при подаче питания на микросхему на выходе появляется некое произвольное значение. При работе с регистром на этом выводе должна находится логическая единица.

    - OE (output enable) если подать сюда логическую 1, то выходы будут находится в высокоомном HI-Z состоянии. Когда подаем на этот вход логический 0, выходы будут находится в рабочем состоянии.

    - Q7′ предназначен для последовательного соединения сдвиговых регистров.

    Но лучше один раз увидеть, чем два раза прочитать =) поэтому смотрим на анимацию:


    Работа с регистром в лоб

    Осваивая работу с незнакомой микросхемой часто бывает полезна работа в лоб, тоесть прямое дергание ногами управления, это позволяет лучше понять принципы работы с подопытным. Итак следуя логике работы, написал программу которая должна будет вывести на выход регистра бинарное число 10010010

    $regfile = "attiny2313.dat"
    $crystal = 1000000

    Config Portb = Output

    Sh_cp Alias Portb . 3 "нога для тактовых импульсов
    Ds Alias Portb . 2 "нога для вывода данных
    St_cp Alias Portb . 0 "нога для "защелкивания" данных в регистр хранения


    "вывод через регистр числа 146 (в бинарном представлении 10010010)

    St_cp = 0 "выставляем ногу в режим записи данных

    Ds = 1 "выставляем первый бит
    Sh_cp = 0 "даем импульс на тактовый выход
    Sh_cp = 1

    Ds = 0 "выставляем второй бит
    Sh_cp = 0
    Sh_cp = 1

    Ds = 0 "выставляем третий бит
    Sh_cp = 0
    Sh_cp = 1

    Ds = 1 "выставляем четвертый бит
    Sh_cp = 0
    Sh_cp = 1

    Ds = 0 "выставляем пятый бит
    Sh_cp = 0
    Sh_cp = 1

    Ds = 0 "выставляем шестой бит
    Sh_cp = 0
    Sh_cp = 1

    Ds = 1 "выставляем седьмой бит
    Sh_cp = 0
    Sh_cp = 1

    Ds = 0 "выставляем восьмой бит
    Sh_cp = 0
    Sh_cp = 1

    St_cp = 1 "защелкиваем введенные данные

    End


    компилируем, зашиваем в микроконтроллер или смотрим в симулятор и видим на выходе нашу комбинацию.


    Работает, на выходе регистра появилось отправленное число!

    Работа с регистром таким образом хоть и возможна но слишком громоздка и занимает много программной памяти. Но зато наглядно демонстрирует всю методику работы с данной микросхемой. Рассмотрим более подходящий метод.

    Управление регистром 74HC595 в Bascom через команду ShiftOut

    В Bascom-AVR для работы со всевозможными последовательными интерфейсами есть замечательная команда SHIFTOUT
    Эта команда сама разложит число на битовые составляющие и последовательно выведет их на любой пин микроконтроллера, заодно она может выдавать тактовые импульсы. Для работы со сдвиговыми регистрами самое то! Синтаксис команды:

    SHIFTOUT Datapin , Clockpin , var , option


    Datapin – порт микроконтроллера для вывода данных

    Clockpin – порт микроконтроллера для вывода тактовых импульсов

    Var – данные которые хотим отправить в регистр

    Option – число от 0 до 3, этим параметром выбирается в каком порядке будут вводиться данные в регистр и активный уровень на линии Clock при котором происходит запись бита:
    option=0 – старший бит идет первым, Clock активный уровень низкий
    option=1 –
    старший бит идет первым , Clock активный уровень высокий
    option=2 –
    младший бит идет первым , Clock активный уровень низкий
    option=3 –
    младший бит идет первым , Clock активный уровень высокий

    В нашем случае для работы с регистром 74HC595 параметр option нужно ставить 1 или 3.

    Для того чтобы защелкнуть данные в регистре, применим команду PulseOut . Эта команда выводит импульс на ногу микроконтроллера с заданной длительностью. Конфигурация команды выглядит следующим образом:

    Теперь давайте выведем число 10010001 (145 в десятичной системе) на выход регистра, подключенному к микроконтроллеру по вышеприведенной схеме:

    $regfile = "attiny2313.dat"
    $crystal = 1000000

    Dim A As Byte
    Config Portb = Output

    A = 145

    Gosub Hc595 "уходим на подпрограмму отправки данных

    End

    Hc595 : "подпрограмма отправки данных

    Shiftout Portb . 2 , Portb . 3 , A , 1 "отправляем данные в регистр
    Pulseout Portb , 0 , 5 "защелкиваем данные
    Return

    Прошив микроконтроллер можно увидеть аналогичную картину, на выходе сдвигового регистра выставлена отправленная комбинация битов.


    Как видно управление сдвиговым регистром 74HC595 в Bascom состоит всего из двух строк кода, и не представляет никаких сложностей.

    Увеличение разрядности