4. Общая информация для выполнения работ

4.1 Порты ввода/вывода

Контроллер STM32F100RB содержит три 16-разрядных порта ввода/вывода общего назначения, которые обозначены как GPIOx, где x может иметь значения A, B, C. Каждый порт GPIO имеет два 32-битных регистра конфигурации – CRL и CRH (в первом конфигурируются выводы от 0 до 7, во втором – от 8 до 15); два 32-битных регистра данных: входной регистр GPIOx_IDR (рис. 14) и выходной регистр GPIOx_ODR (рис. 15); 32-битный регистр для установки состояния определенных пинов GPIOx_BSSR; 16-битный регистр для сброса пина GPIOx_BRR; 32-битный регистр для установки блокировки пина GPIOx_LCKR.

Регистр входа (GPIOx_IDR). Биты регистра доступны только для чтения и содержат входные значения соответствующего порта ввода/вывода. Биты с 16 по 31 зарезервированы системой.

Адресное пространство: 0х08h

Значение сброса: 0х0000 XXXX

Рис. 14 Регистр входа

Регистр выхода (GPIOx_ODR). Биты регистра доступны для чтения и записи, значение битов этих регистров может быть изменено через регистры: GPIOx_BSRR и GPIOx_BRR. Биты с 16 по 31 зарезервированы системой.

Адресное пространство: 0х0C

Значение сброса: 0х0000 0000

Рис. 15 Регистр выхода

Режимы работы портов:

1. Input floating [GPIO_Mode_IN_FLOATING]. Высокоимпедансный вход (Hi-z);

2. Input pull-up [GPIO_Mode_IPU]. Вход с подтяжкой к питанию (между входом и питанием включен подтягивающий резистор);

3. Input-pull-down [GPIO_Mode_IPD]. Вход с подтяжкой к земле

4. Analog [GPIO_Mode_AIN]. Вывод может быть аналоговым входом или выходом;

5. Output open-drain [GPIO_Mode_Out_OD]. Выход с открытым коллектором;

6. Output push-pull [GPIO_Mode_Out_PP]. Двухтактный выход.

Во время и после сброса, альтернативные функции неактивны и порты ввода/вывода находятся в высокоимпедансном состоянии.

GPIO (General Purpose Input/Output ) - самый простой способ организации работы с внешними устройствами. Порты могут работать в двух режимах: вход (прием сигнала) и выход (передача сигнала). Работают они только с логическими уровнями 0 (Low) или 1 (Hight). Например, если подключить к порту в режиме выхода светодиод, то при подаче сигнала высокого уровня светодиод будет светиться, а при подаче низкого – потухнет. Если включить вывод в режим входа и подключить к нему кнопку, соединённую с землей, то с помощью микроконтроллера можно отслеживать ее состояние: нажатое или отжатое.

4.2 Система тактирования в микроконтроллере STM32F100RB

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

1. HSI oscillator clock (внутренний источник тактов);

2. HSE oscillator clock (внешний источник тактов);

3. PLL clock (внутренний блок умножения частоты).

Для снижения электропотребления микроконтроллера практически все
периферийные устройства после включения микроконтроллера – отключены. Включение периферийного устройства производится передачей тактового сигнала на его вход. Для того чтобы включить тактирование (микропроцессору будет указано, что ему нужно выделить некоторое количество времени в своей работе для периодического контроля состояния своего периферийного порта, в данном случае PC), нужно обратиться к двум datasheets: Reference Manual и Product Specification, которые расположены на st.com. В Reference Manual, находим раздел Reset and clock control for STM32F10xx, пункт RCC register map (рис. 16). RCC (reset and clock control) – система тактирования микроконтроллера, в ней находятся все регистры управления настройками генераторов, ФАПЧ и шин (фазовая автоподстройка частоты или phase-locked loop).

Рис. 16 Карта регистров RCC

4.3 Прерывания в микроконтроллерах

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

В документации на микроконтроллер рассматриваются interrupt и event. Interrupt – прерывание работы программы и переход к обработчику прерываний. Event – событие (аппаратное или программное). Событие может вызвать прерывание, запустить периферию, или другие возможности микроконтроллера. Каждое прерывание вызывается событием, но не каждое событие вызывает прерывание.

Стандартно в микроконтроллерах с ядром Cortex M3 присутствует NVIC – контроллер приоритетных векторных прерываний. Он производит обработку и управление прерываниями. Контроллер NVIC поддерживает вложенность прерываний и вектора. Каждому прерыванию при настройке контроллера присваивается приоритет. При возникновении высокоприоритетного прерывания во время обработки прерывания с низким приоритетом – обработка прерывается, и контроллер переключается на обработку высокоприоритетного.

Вектора прерываний – особые адреса местоположения программы обработки прерываний. Таблицу векторов прерываний можно посмотреть в Reference Manual либо в файле startup_stm32f10x_md_vl.s (рис. 17). Вначале записаны fault interrupt – прерывания ядра, которые имеют наивысший приоритет и не подчиняются команде общего запрета\разрешения прерываний.

Рис. 17 Таблица векторов прерываний в файле startup_stm32f10x_md_vl.s

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

1. Приостановка низкоприоритетного прерывания;

2. Непрерывная обработка прерываний;

3. Запаздывание высокприоритетного прерывания.

Рассмотрим подробнее данные ситуации.

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

Непрерывная обработка прерываний может возникнуть в двух случаях: если два прерывания имеют одинаковый приоритет и возникают одновременно или если низкоприоритетное прерывание возникает во время обработки высокоприоритетного. В этом случае промежуточные операции над стеком не производятся. Происходит только загрузка адреса обработчика низкоприоритетного прерывания и переход к его выполнению. Отказ от операций над стеком экономит 6 тактов. Переход к следующему прерыванию происходит не за 12 тактов, а за 6.

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

Для обработки внешних прерываний существует External interrupt/event controller (EXTI) – контроллер внешних прерываний/событий. Он имеет до 18 датчиков для генерации запросов прерывания/событий, специальный бит состояния для каждой линии прерывания, обнаружение внешнего сигнала с длительностью импульса меньше, чем период частоты APB2.

Регистр масок прерываний (EXTI_IMR). Все биты после сброса установлены в ноль. Единица в соответствующем бите разрешает прерывание для выбранной линии.

Адресное пространство: 0х00

Значение сброса: 0х0000 0000

Рис. 18 Регистр масок прерываний




Информация о работе «Изучение микроконтроллеров архитектуры ARM Cortex-M3 на базе отладочного модуля STM32VL Discovery»
Раздел: Радиоэлектроника
Количество знаков с пробелами: 35926
Количество таблиц: 0
Количество изображений: 22

0 комментариев


Наверх