Управление микроконтроллером осуществляет через операции записи и чтения значений регистров.
Для чтения значений примеряется процедура SYSTEM.GET
.
Первый аргумент — адрес регистра, второй — машинное слово.
Машинное слово может быть переменной или константой типа целое (INTEGER
) или множество (SET
).
Рассмотрим сначала чтение на примере регистра GPIOx_IDR
. В следующем фрагменте из документации к микроконтроллеру показано, что первые 16 бит регистра GPIOx_IDR
содержат информацию о напряжении на выводах порта x
.
Адреса регистров хранятся в модулях подсистемы Micro
. Напримр для микроконтроллеров семейства STM32F10xxD адреса хранятся в модуле MicroSTM32F10xxD
. Для настройки выводов контроллеров STM32F10* используется модуль MicroSTM32F10xPinCfg
.
MODULE ExamplesGet; IMPORT SYSTEM, MCU := MicroSTM32F10xxD, PinCfg := MicroSTM32F10xPinCfg; CONST pin = 7; PROCEDURE InitButton*; BEGIN PinCfg.Configure(PinCfg.C, 13, PinCfg.inputPullDown); END InitButton; PROCEDURE CheckButton*(): BOOLEAN; VAR x: SET; BEGIN SYSTEM.GET(MCU.GPIOAIDR, x); RETURN pin IN x (* проверяем, есть ли искомый пин в множестве бит регистра *) END CheckButton; END ExamplesGet.
Этот пример реализует процедуру, которая проверяет уровень сигнала на ножке pin
. Кнопка должна быть подключена к питанию через резистор номиналом от 100 Ом, чтобы обеспечить ток менее 50 мА.
Подробнее про применение типа SET для управления регистрами.
Второй пример реализует чтение данных в целое число из регистра чтения данных АЦП:
VAR value: INTEGER; BEGIN SYSTEM.GET(MCU.ADC1DR, value);