Чтение данных из регистра

Управление микроконтроллером осуществляет через операции записи и чтения значений регистров.

Для чтения значений примеряется процедура 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);