Управление микроконтроллером осуществляет через операции записи и чтения значений регистров.
Для записи значения примеряется процедура SYSTEM.PUT(adr, val)
.
Первый аргумент процедуры — адрес регистра, второй — значение равное машинному слову.
Машинное слово может быть переменной или константой типа целое (INTEGER
) или множество (SET
).
Тип SET позволяет записать машинное слово в формате множества бит.
Пример константы типа SET
, где 1-ый, 2-й и 30-й бит 32-битного машинного слова равны 1:
{0,2,30}
что соответствует машинному слову, записанному в двоичном виде (младший бит в конце):
0100 0000 0000 0000 0000 0000 0000 0101
Рассмотрим запись на примере регистра GPIOx_BSRR
. В этом фрагменте из документации к микроконтроллеру показано, что первые 16 бит регистра GPIOx_BSRR
управляют подачей напряжения на вывод, а оставшиеся 16 бит (от 16 до 31) выключают напряжение на выводах порта.
Адреса регистров хранятся в модулях подсистемы Micro
.
Для микроконтроллеров STM32F10xxD адреса хранятся в модуле MicroSTM32F10xxD
.
MODULE ExamplesPut; IMPORT SYSTEM, MCU := MicroSTM32F10xxD; PROCEDURE On13; BEGIN SYSTEM.PUT(MCU.GPIOCBSRR, {13}); (* поднять напряжение на PС13 *) END On13; PROCEDURE Off13; BEGIN SYSTEM.PUT(MCU.GPIOCBSRR, {13+16}); (* убрать напряжение на PС13 *) END Off13; PROCEDURE On (x: INTEGER); BEGIN SYSTEM.PUT(MCU.GPIOCBSRR, {x}); (* поднять напряжение на PСx *) END On; PROCEDURE Off (x: INTEGER); BEGIN SYSTEM.PUT(MCU.GPIOCBSRR, {x+16}); (* убрать напряжение на PСx *) END Off; еще бы добавить пример кода когда в цикле биты set / unset END ExamplesPut.
В процедуре On13
мы записываем константу {13}
типа SET
, которая означает то, что бит с номером 13 равен 1, а остальные биты машинного слова при этом равны 0.
В процедуре Off13
мы записываем константу {13+16}
типа SET
, которая означает то, что бит с номером 29 равен 1. Такая операция над регистром GPIOCBSRR
приводит к выключению напряжения на выводе PC13
.