PlayStation Plus (PSN Plus) - 365 Дней
PlayStation Plus (PSN Plus) - 365 Дней


7 VISA VIRTUAL (RUS BANK)
7 VISA VIRTUAL (RUS BANK)


Разблокировка Alcatel OT-6036Y
Разблокировка Alcatel OT-6036Y


В начало

Состав процессорного ядра МК (Лекция)

 

Память программ (ПП)

 

В памяти программ хранится двоичный код, составляющий программу или программное обеспечение (software).

Основным элементом блока выборки является память программ. Программное обеспечение во встраиваемых системах фиксировано, поскольку после включения питания микроконтроллер должен сразу же приступить к выполнению своих задач, не тратя время на загрузку программы. Поэтому память программ, как правило, реализуется в виде ПЗУ какого-либо типа. В большинстве микроконтроллеров PIC используется многократно-программируемое ПЗУ; если в обозначении модели присутствует буква «F», то это FLASH-память. В памяти программ микроконтроллера PIC16F84 может храниться до 1024 команд, размер каждой из которых составляет 14 бит. В новых микроконтроллерах семейства среднего уровня размер памяти программ колеблется от 1024 (например, PIC16F627) до 8192 (PIC16F876/7) команд

 

1) Способ занесения записи по последовательному каналу с помощью двух линий по I2С, где имеется 2 счётчика: один считает синхросигнал, другой считает ячейки памяти. Этот способ называется ICSP - можно программировать непосредственно на плате, для этого на плате должен быть разъем для программирования.

 

2) Каждая позиция памяти программ может содержать одну команду, которая кодируется 14-битным словом . Из рис. Видно, что каждая из этих ячеек имеет свой адрес, выставляемый счетчикам команд на шину адреса памяти программ.

 


3) Объём памяти программ:     512 X 14 разрядов;  

                                         1024 X 14 разрядов;         Для микроконтроллеров нижнего                                                                               

                                         2048 X 14 разрядов;                                  уровня.                 

                                         4096 X 14 разрядов;

                                         8192 X 14 разрядов.

    Для микроконтроллеров высокого уровня 1 М слов X 16 разрядов.

 

Это внутренняя память

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

Для микроконтроллеров, имеющих более 512 слов памяти программ используется страничная адресация памяти (один управляющий бит в регистре STATUS).

 

 

                 

 

Счетчик команд

Счетчик команд (Program Counter — PC) используется для адресации, или указания, считываемой из памяти программ команды. Этот 13-битный регистр обычно инкрементируется после каждой выборки, функционируя как двоичный счетчик. Однако, как мы с вами увидим в следующей главе, существует ряд команд, таких как команда goto, выполнение которых вызывает переход к другому месту в памяти программ. Соответственно, нормальное функционирование счетчика команд нарушается. Кроме того, программист может напрямую обращаться к счетчику команд через память данных

Младший байт счетчика команд — адресуемый регистр специального назначения (PCL). Регистр PCL изменяют в случае реализации косвенных программных переходов. Однако старший байт счетчика команд умышленно сделан недоступным напрямую. Если необходимо изменить старший байт программною указателя, то его нужно записывать в промежуточный буфер памяти - регистр PCLATH. Регистр PCLATH копируется в старший байт счетчика команд только при доступе к регистpy PCL — будь то по команде перехода или по арифметической команде с аргументом PCL.

 

Для программного перехода по адресу ADRH:ADRL используют, как правило, команды CALL и GOTO, которым в качестве аргумента передается адрес.

Счетчик команд и регистр PCLATCH (защёлка) имеют разрядность 13 бит. Младший байт счетчика (PCL) доступен для чтения и записи и находится в регистре 02h. Старшие разряды счетчика команд не могут быть напрямую записаны или считаны и берутся из регистра   PCLATH (PC latch high), адрес которого 0Ah. Содержимое PCLATH передается в старшие разряды счетчика команд, когда он загружается новым значением.

 

Старшие биты счетчика команд загружаются из PCLATH разными способами:

 

·                    Если в счетчик команд загружается новое значение во время выполнения команд CALL, GOTO, то в два старших разряда счетчика команд <12:11> загружается содержимое двух разрядов <4: 3> регистра PCLATH.

 

 

·                    Если в младший байт счетчика команд (PCL) производится запись, то в пять старших  

разрядов счетчика команд <12:8> загружается содержимое пяти разрядов <4: 0> регистра PCLATH.

При выполнении команды CALL или при выполнении прерывания весь 13-битный счетчик команд помещается в стек. При выполнении процедуры возврата из подпрограммы (команды RETLW, RETFIE или RETURN) содержимое счетчика команд восстанавливается из стека. Регистр PCLATCH при операциях со стеком не изменяется.

Третий и четвертый разряды регистра PCLATCH используются для обращения к страницам 1, 2 и 3 программной памяти. Так, например, если необходимо перейти с нулевой  страницы на первую, то нужно записать в третий разряд регистра PCLATCH единицу. При этом переключение происходит не сразу, а по команде CALL или по команде безусловного перехода.

 

Стек

Стек (англ. stack — стопка) — структура данных с методом доступа к элементам LIFO (англ. Last In — First Out, «последним пришел — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно взять верхнюю.

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

Стек – это память, в которую загружается содержимое счетчика команд при вызове/ возврате из подпрограмм или по прерыванию. Микроконтроллеры среднего уровня имеют восьмиуровневый аппаратный стек шириной 13 бит. Область стека не принадлежит ни к программной области, ни к области данных, а указатель стека пользователю недоступен.

Стек работает как циклический буфер. Следовательно, после того как стек был загружен 8 раз, девятая загрузка перепишет значение первой. Десятая загрузка перепишет вторую и т.д. Если стек был выгружен 9 раз, счетчик команд становится таким же, как после первой выгрузки.

            Запись в стек производится по команде CALL    “NAME” или по запросам прерывания (если они разрешены):

                                   (PC) → ((SP))                                     (SP) + 1→ (SP)          

Возврат обратно происходит по команде:

1)      возврата из подпрограммы:

      RETURN                                     ((SP)) → (PC)      

2)      возврата из подпрограммы c загрузкой константы в W:

   RETLW             L                            ((SP)) → (PC)              L → (W)

3)      возврата из прерывания:

                          RETFIE                                   ((SP)) → (PC)                                 1 → GIE

                                                                                                           (разрешение прерывания)

 

 

Организация памяти данных

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

2) Существует два способа адресации: 

·        прямая адресация;

·        косвенная адресация.

Прямая адресация

При прямой адресации адрес ячейки памяти указывается в команде. Номер банка определяется содержимым RP1 и RP0 <6:5> регистра состояния. Память данных разделена на четыре банка. Каждый банк содержит по 128 ячеек. Номер ячейки в банке определяется семью младшими разрядами адреса. Таким образом, когда производится прямая 9-битная адресация, младшие 7 бит берутся как прямой адрес из кода операции, а два бита указателя страниц (RP1, RP0) из регистра статуса (03h).

Одним из недостатков РIC – контроллеров является необходимость указания в них: к какому банку мы обращаемся, так как в этом случае нужно иметь перед собой карту памяти, определяющую где какие регистры находятся (особенно  управляющие).

Например, при переходе из 0 в 1 банк нужно установить бит в пятом разряде регистра STATUS:

   BCF                               STATUS, 5

В последние 3-4 года появилась ещё одна директива:

BANKSEL                имя регистра

Косвенная адресация.

Существует специальный регистр косвенной адресации FSR. В нём семь младших разрядов <6:0> указывают номер ячейки в банке. Номер банка определяется содержимым старшего разряда регистра STATUS <7> и старшего разряда регистра FSR <7>. Таким образом, при косвенной адресации необходимый 9 – битный адрес формируется объединением содержимого 8 – битного FSR регистра и бита IRP из регистра статуса.

Признаком косвенной адресации является обращение к регистру   INDF. Любая команда, которая использует INDF (адрес 00h) в качестве регистра фактически обращается к указателю, который хранится в FSR (адрес 04h). Чтение косвенным образом самого регистра  INDF даст результат 00h.

Пример: пусть мы находимся в нулевом банке и нам необходимо:

((FSR)) +1 → ((FSR)) 

 Тогда:                     MOVLW           .10      ;  запись десятичного числа в W

                                 MOVWF           FSR    ;  пересылка из W в регистр FSR

                                 INCF                  INDF, F     ; инкремент регистра и запись в тот же регистр

 

Два варианта распределения памяти у четырёх – банковых

микроконтроллеров среднего уровня.

 

1.)  На примере: PIC16F873.

 

 

Регистры общего назначения (POH) 0 и 2 банка, а также POH 1 и 3 банка имеют прямое отображение друг на друга (дублируются), то есть, несмотря на то, что у них разные адреса физически они одни и те же.

Исходя из этого,  POH занимает: 96 * 2 = 192 байта.

2.)  На примере: PIC16F877.

Банк 3

 

16 ячеек доступа (POH) 0, 1, 2 и 3 банков зеркально отображаются друг на друга, то есть к ним можно обращаться без обращения к банкам.

Исходя из этого,  POH занимает: (80 * 4)  + (3 * 16)  = 368 байта, а

    PCH занимает: 512 - 368 = 144 байта.

 

 

Система запуска (сброса)

 

Она должна обеспечивать:

 

1)  задержку на время нарастания питающего напряжения до номинальной величины.

 

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

 

3) запись в счетчик команд нулевого значения. После этого микроконтроллер должен начать работать, то есть из нулевой ячейки адреса команд микроконтроллер должен достать команду, дешифроваться и т.д.

Это происходит следующим образом:

После того, как подано напряжение питания, оно должно нарастать.

После того, как напряжение питания пересекло уровень 1,5 Вольт, таймер запуска начинает счет выдержки времени. По истечении выдержки около 72 – 96 мс считается, что напряжение достигло номинала и запускается другой таймер выдержки на стабилизацию кварцевого генератора. Программируемый бит конфигурации позволяет разрешать или запрещать выдержку от встроенного таймера запуска. Если питание батарейное выдержка от встроенного таймера запуска не нужна. Таймер на стабилизацию генератора отчитывает 1024 импульса от начавшего работу генератора. Считается, что кварцевый генератор за это время вышел на режим. При использовании RC генераторов – выдержка на стабилизацию не производится. Затем в счетчике команд устанавливается нулевое значение и начинается работа настоящего тактового генератора.

 

Сброс

Сброс можно осуществить подачей на специальный вход MCLR отрицательного импульса.

Также сброс может происходить от сторожевого таймера.

 

Сторожевой таймер (Watch Dog)

Сторожевой таймер – это устройство, предназначенное для двух целей:

·        для выхода из порочного круга (зависания);

·        для выхода из спящего режима.

Сторожевой таймер работает от полностью автономного внутреннего RC-генератора. Это позволяет сторожевому таймеру продолжать работать в режиме SLEEP, когда внутренний тактовый генератор процессора остановлен, и периодически выводить контроллер в нормальный режим.

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

Номинальный период срабатывания сторожевого таймера составляет 18 миллисекунд.

Для реализации больших задержек необходим предделитель. Он может иметь такие коэффициенты деления: 1 : 1; 1 : 2; 1 : 4; ... 1 : 128.

Применяя предделитель с коэффициентом деления до 1:128 можно реализовать интервал величиной до 2,3 сек, который зависит от температуры и напряжения питания. В исключительных ситуациях, когда присутствует минимально возможное питающее напряжение и высокая температура, период срабатывания сторожевого таймера с предделителем может достигать трех и более секунд.

Команда CLRWDT обнуляет сторожевой таймер и предделитель, если он подключен к WDT. Это запускает выдержку времени сначала и предотвращает на некоторое время выработку сигнала сброс. Команда SLEEP также очищает сторожевой таймер и предделитель, если он подключен к WDT, что позволяет достичь максимального пребывания в режиме SLEEP до момента пробуждения по сбросу от WDT.

Когда происходит переполнение счетчика сторожевого таймера, он генерирует либо сигнал сброса, либо сигнал сброса для выхода из режима SLEEP. Одновременно с сигналом сброса от WDT обнуляется 4 бит «TO» в регистре STATUS.

 

Считается, что если произошло внутреннее зацикливание, то через 18 мс программа начнет выполняться снова. Команд со сторожевым таймером должно быть по минимуму (при правильной организации только одна команда).

 

 

Регистр конфигурации.

Регистры конфигурации, в которых содержатся конфигурационные слова, предназначены для задания самых общих параметров работы PIC-микроконтроллеров. Они позволяют указать:

Режим работы генераторов,

Режим защиты памяти программ,

Параметры системы перезапуска микроконтроллера,

Запуск сторожевого таймера,

Режим отладки микроконтроллеров

 

 

 

Регистр конфигурации определяет некоторые возможности в  микроконтроллерах. Он доступен только при программировании. Его адрес лежит за адресом программ.

 

_  _  _  PWRTE _ ON& _ WDTE _ OFF& _ XT_OSC& _ CP _ OFF& _ BODEN _ OFF

Задержка на  включение питания

 
 

 


                 

 

 

 

 

 

 

Энергосберегающий режим (спящий режим)

Микроконтроллер переводится в спящий режим специальной командой SLEEP. Если сторожевой таймер включен, то он обнуляется и начинает отсчет задержки заново. В регистре STATUS сбрасывается бит PJJ и устанавливается 4 бит ТО. Внутренний тактовый генератор отключается. Выводы портов сохраняют состояние, которое было непосредственно перед исполнением команды SLEEP.

Достоинство спящего режима: ток потребления в 1000 раз меньше. Это особенно важно, когда батарейное питание.

I потр. в норм. режиме  = 2 ÷ 15 мА

 

I потр. в  режиме SLEEP  = 5 ÷ 30 мкА

Выход из энергосберегающего режима может быть осуществлен тремя способами:

1)      По отрицательному импульсу на входе MCLR.

2)      По переполнению сторожевого таймера WDT (самое удобное).

3)      По внешним прерываниям.

При первом способе происходит сброс всего устройства. Два других способа предполагают продолжение выполнения программы.

Имеется два источника внешних прерываний:

1) Прерывания со специального входа RBO/INT.                                                                             После поступления сигнала на прерывание, в зависимости от состояния бита общего разрешения/запрещения прерывания GIE (INTCON <7>), произойдет: либо прерывание, либо переход на команду.

2) Прерывания по изменению состояний входов порта RB4 - RB7.                                                    Если четыре линии порта B (RB<7:4>) настроены на ввод, то они опрашиваются и защелкиваются в цикле чтения Q1. Новая величина входного сигнала сравнивается со старой в каждом командном цикле. При несовпадении значения сигнала на ножке и в защелке, генерируется прерывание RBIF (запоминаемое в INTCON<0>). Любая линия, настроенная как вывод, не участвует в этом сравнении. Прерывание может вывести кристалл из режима SLEEP.

Тактовый генератор

Встроенный тактовый генератор имеет четыре режима возбуждения, которые выбираются пользователем:

1)      RS генератор. Здесь ко входам подключается RS цепь, которая косвенно  задаёт   частоту. При этом используется частота меньше 30 кГц.                                                Снижая частоту, мы меньше потребляем мощности.

2)       LP – низкочастотный генератор (30 – 200 кГц).

3)      XT - среднечастотный генератор (100 кГц – 4МГц).

4)      HS - высокочастотный генератор (4 МГц – 20 МГц).

Примечание: В слове конфигурации обязательно нужно правильно указать тип генератора. В противном случае - генератор может не заработать.

 

Система прерывания

Имеется одноуровневая (без приоритетов) система прерываний с количеством источников от одного до четырнадцати и с одним и тем же вектором прерывания, адрес которого 0004h. При этом все источники прерываний должны иметь программно установленное разрешение. Каждое прерывание в отдельности может быть разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON. Кроме этого, есть ещё бит общего разрешения/запрещения прерывания GIE (INTCON<7>), который разрешает (если = 1) все индивидуально незамаскированные прерывания или запрещает (если = 0) их. Система прерывания содержит пять управляющих регистров:

1)      INTCON

2)      PIE1

3)      PIE2             регистры разрешения прерывания

4)      PIR1         

5)      PIR2             регистры флагов прерыва

Регистр INTCON:

7

6

5

4

3

2

1

0

GIE

PEIE

TMROIE

INTIE

RBIE

TMROIF

INTIF

RBIF

7 и 6 разряды регистра INTCON – это разряды разрешения прерывания. Бит PEIE  дает разрешение прерывания от некоторых периферийных устройств.

В управляющем регистре прерываний INTCON соответствующим битом записывается: от какого именно источника поступил запрос прерывания. Такое прерывание может быть замаскировано индивидуально или общим битом.

Когда начинает обрабатываться прерывание, бит GIE обнуляется (чтобы запретить дальнейшие прерывания), адрес возврата посылается в стек, а в счетчик команд загружается адрес 0004h.

Схема «И» для одиннадцати прерываний.

При возникновении условий прерывания, флаг прерывания (запрос) устанавливается аппаратно, независимо от того: есть разрешение на прерывание или нет.

Запрос прерывания фиксируется. Отсюда возникает возможность программного опроса флагов прерывания. После обслуживания прерывания, флаг прерывания должен быть сброшен программно.