- •Конспект лекций оглавление
- •Общие с ведения о микроконтроллерах
- •Обобщенная структурная схема микроконтроллера
- •Система прерываний
- •Работа системы прерываний
- •Стек данных
- •Микроконтроллеры Intel, Motorola и Microchip
- •Краткое описание особенностей микроконтроллеров
- •Работа сср в режиме шим
- •Примеры контроллеров 18еххх, 16еххх. Характеристики 16 и 18 серии.
- •Периферийные модули
- •Основные характеристики микроконтроллеров
- •Рекомендации по схематическому решению для портов (16 серия)
- •Структура памяти
- •Банк памяти быстрого доступа
- •Регистр выбора банка памяти данных bsr (18 серия)
- •Косвенная адресация, регистра indf и fsr
- •Операция косвенной адресации
- •Механизм косвенной адресации
- •Работа с памятью рiс16fххх
- •Чтение из еерrом-памяти
- •Запись еерrом данных
- •Управление прерываниями Серия рiс16ххх
- •Система прерывании рiс18fхх2
- •Обработка прерываний
- •Контроллеры pic16f87x
- •Карта памяти микроконтроллеров:
- •Структурная схема микроконтроллеров pic16f87x:
- •Служебные регистр:
- •Контроллеры 18 серии
- •Карта памяти микроконтроллеров рiс18f242/442:
- •Регистры конфигурации контроллера:
- •Аппаратный умножитель 8х8
- •Модуль ацп
- •Конфигурация выводов модуля ацп (рiс16f873/76)
- •Источник опорного напряжения
- •Параллельные порты ввода/вывода
- •Последовательный синхронный порт (мssр)
- •Временные диаграммы работы mssp
- •Пример соединения двух мк через spi
- •Режим i2c последовательного порта mssp.
- •Асинхронно-синхронный последовательный порт (usart)
- •Временные диаграммы работы usart в асинхронном режиме
- •Ведомый параллельный порт (psp)
- •Временные диаграммы порта psp
- •Способы кодирования данных
- •Универсальная последовательная шина (usb) Краткий обзор шины
- •Протоколы передачи
- •Питание
- •Оконечные точки
- •Нумерация устройств
- •Описатели
- •Классы устройств / Драйверы класса
- •Микроконтроллеры с модулем usb
- •Приемопередатчик
- •Регистры управления и состояния модуля usb
- •Регистр флагов прерываний модуля usb (uir)
- •Регистр разрешения прерываний модуля usb (uie)
- •Регистр флагов ошибок модуля usb (ueir)
- •Регистр разрешения прерывания по ошибкам модуля usb (ueie)
- •Регистр состояния модуля usb (ustat)
- •Регистр управления модулем usb (uctrl)
- •Регистр адреса usb (uaddr)
- •Регистр состояния программного обеспечения usb
- •Регистры управления оконечными точками (uepn)
- •Буферы оконечных точек
- •Программирование модуля usb
- •Программное обеспечение usb
- •Основные функции и подпрограммы
- •Ресурсы процессора
- •Уровни стека
- •Память программ
- •Память данных
- •Буферные регистры
- •Выбор страниц/Выбор банков
- •Интегрирование подпрограмм usb в программу
Банк памяти быстрого доступа
Банк памяти быстрого доступа - архитектурное решение, которое является особенно полезно для оптимизации кода при написании программ на языке С. Методы, используемые компилятором С, могут быть также полезны для программ, написанных на ассемблере.
Эта область памяти может использоваться для:
• хранения промежуточных значений вычислений
• хранения отдельных служебных переменных
• быстрого доступа к отдельным переменным
• хранения обычных переменных
• быстрого доступа к регистрам специального назначения
Банк памяти быстрого доступа содержит старших 128 байт банка 15 (регистры специального назначения) и нижних 128 байт банка 0 памяти данных.
Две секции в банке памяти быстрого доступа называются нижняя и верхняя область банка.
В слове команды определяется, как должна выполняться адресация к памяти данных – банк выбирается с учетом регистра ВSR или обращение к банку быстрого доступа. Бит, определяющий правило доступа к памяти, обозначается как 'а'.
Когда необходимо выполнить обращение к банку прямого доступа, бит а=0. Обращение к регистрам специального назначения можно выполнять без изменения текущего банка памяти данных, что очень удобно при проверке флагов и изменении управляющих битов.
Регистр выбора банка памяти данных bsr (18 серия)
Потребность в большем объеме памяти данных определяет наличие разделения ОЗУ на банки памяти. Вся память данных разделена на 16 банков.
При использовании непосредственной адресации необходимо настроить регистр ВSR для обращения к нужному банку.
ВSR<3:0> содержит 4 старших бита 12-разрядного адреса регистра в памяти данных.
ВSR<7:4> всегда читаются как '0', а запись не будет иметь никакого эффекта.
С помощью команды МОVLВ можно выбрать необходимый банк памяти данных. Если выбранный банк не реализован, то чтение будет давать результат '0', а любая запись игнорируется. Биты регистра STATUS будут изменяться в соответствии с выполняемой командой.
Каждый банк памяти данных имеет внутренние адреса от ООh до FFh (256 байт). Вся память данных реализована как статическое ОЗУ.
Команда МОVFF игнорирует содержимое регистра ВSR, т.к. значение 12-разрядных адресов содержится в коде команды.
Метод косвенной адресации позволяет линейно адресовать всю область памяти данных.
Косвенная адресация, регистра indf и fsr
Косвенная адресация - режим адресации памяти данных, когда адрес регистра не включается в код команды.
Регистр FSR, используется как указатель ячейки в памяти программ, которая должна быть прочитана или в которую должно быть записано новое значение.
Указатель размещается в памяти данных, поэтому может быть изменен программным способом.
Этот метод адресации может быть полезен для операции с таблицами, размешенными в памяти данных.
Косвенная адресация возможна при использовании одного из регистров INDF. Любая команда, использующая регистр INDF фактически обращается к регистру, указанному в FSR. Косвенное чтение регистра INDF будет давать результат 00h. Косвенная запись в регистр INDF не вызовет никаких действий. Регистр FSR содержит 12-разрядный адрес ячейки в памяти данных. Регистр INDFn - не физический регистр. Обращение к регистру INDFn фактически вызовет действие с регистром, адрес которого указан в FSRN (принцип косвенной адресации).
В микроконтроллерах РIС18FХХ2 реализовано три 12-разрядных регистра косвенной адресации, для обращения ко всей области памяти данных (4096 байт):
• FSR0 состоит из FSR0Н: FSR0L
• FSR1 состоит из FSR1Н: FSR1L
• FSR2 состоит из FSR2Н: FSR2L
Дополнительно есть регистры INDFO, INDF1 и INDF2, которые физически не реализованы.
Обращение к этим регистрам фактически вызовет действие с регистром, адрес которого указан в FSR.
Если команда выполняет запись в регистр INDFO, то данные будут записаны в регистр, адрес которого указан в FSR0Н: FSR0L.
Чтение регистра INDF1 возвратит значение регистра, адрес которого указан в FSR1Н: FSR1L.
Регистры INDFn могут использоваться как операнды команд.
Если INDFO, INDF1, INDF2 читаются косвенно через FSR, то чтение будет давать результат '0'.
Операция косвенной записи в регистры INDFO, INDF1, INDF2 будет эквивалентна команде NOP, и на биты регистра STATUS влияния не окажет.