К EEPROM-памяти данных относятся следующие регистры (адреса указаны для модели PIC16F84):
∙ EEDATA (h’08’)
Этот регистр содержит данные адресованной ячейки EEPROM после операции чтения или же данные, которые будут записаны в EEPROM во время операции записи.
∙ EEADR (h’09’)
Этот регистр содержит адрес байта, к которому производится обращение, загружаемый перед началом операции чтения или записи.
∙ EECON1 (h’88’)
Этот регистр содержит следующие биты управления и состояния:
• Бит запуска операции чтения EEPROM.
• Бит разрешения операции записи.
• Бит запуска операции записи в EEPROM.
• Бит признака преждевременного завершения цикла записи.
• Бит признака нормального завершения цикла записи.
Более полную информацию можно получить из Рис. 15.2, приведенного на стр. 545.
∙ EECON2 (h’89’)
Этот управляющий регистр физически не существует, и при его чтении всегда возвращается нулевое значение. Указанный адрес используется для загрузки последовательности, разрешающей цикл записи. Последовательность состоит из двух чисел h’55’ и h’AA’, записываемых друг за другом.
Прерывания
Регистр управления прерываниями INTCON, расположенный по адресу h’0B’[79], содержит биты маски и статуса, управляющие реакцией микроконтроллера на прерывания. Использование этого регистра описывается в главе 7. Большинство периферийных устройств имеют собственные биты, относящиеся к прерываниям и расположенные в других управляющих регистрах (см., например, Рис. 7.5 на стр. 223).
Пример 4.1
Объясните, каким образом внедрение в схему блока выборки команд конвейера увеличивает производительность микроконтроллеров PIC. Предвидите ли вы какие-либо проблемы, связанные с поддержкой команд перехода (таких как goto), относительно структуры конвейера?
Решение
Наличие конвейера является обязательным условием для организации параллельной работы блока выборки и исполнительного блока. То есть для того, чтобы иметь возможность исполнять команду и одновременно с выборкой из памяти программ команды n + 1, требуется внутренний элемент с памятью, который передавал бы код команды в дешифратор команд. Поскольку все команды имеют одинаковый размер (14 бит), структуру регистров конвейера и управление ими можно значительно упростить. Большинство традиционных CISC-процессоров имеют команды, длина которых может быть различной. К примеру, размер команд микроконтроллера 68НС11 колеблется от 1 до 4 байт, т. е. длительность фазы выборки составляет от 1 до 4 транзакций на шине. Некоторые более развитые процессоры имеют многоступенчатый конвейер, каждый этап которого связан с определенной частью исполнительного блока. За счет этого можно реализовать несколько одновременных потоков исполняемых команд.
Проблема, связанная с конвейером, вытекает из предположения, что команды программы будут исполняться последовательно, т. е. так, как они расположены в памяти программ. При этом команды, не удовлетворяющие этому условию и изменяющие содержимое счетчика команд, требуют очистки конвейера, с тем чтобы код адресованной команды оказался на вершине конвейера. Например, если командой к является команда goto n, то к тому моменту, когда процессор узнает, что в действительности на следующем шаге необходимо будет выполнить команду n, команда k + 1 будет уже загружена в конвейер. Поэтому необходимо выполнить холостой цикл, во время которого код команды n будет напрямую загружен в конвейер (разумеется, команда k + 1, код которой находится на вершине конвейера, не выполняется). Иногда эту операцию называют очисткой конвейера. Соответственно, такие команды, как goto, выполняются за два машинных цикла. Команды условного пропуска (см. главу 5) выполняются за два цикла в случае пропуска и за один цикл в противном случае. Все остальные команды выполняются за один машинный цикл.
Пример 4.2
Можете ли вы определить, почему после операции вычитания или сложения с отрицательным числом значение флага С является дополнением к биту заема?