| Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
ob:o7:example:get [2022/03/11 14:08] iadenisov |
ob:o7:example:get [2026/04/03 08:10] (текущий) iadenisov |
| Машинное слово может быть переменной или константой типа целое (''INTEGER'') или множество (''SET''). | Машинное слово может быть переменной или константой типа целое (''INTEGER'') или множество (''SET''). |
| |
| Рассмотрим сначала чтение на примере регистра ''GPIOx_IDR''. В следующем фрагменте из [[https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf|документации к микроконтроллеру]] показано, что первые 16 бит регистра ''GPIOx_IDR'' содержат информацию о напряжении на выводах порта ''x''. | Рассмотрим сначала чтение на примере регистра ''GPIOx_IDR''. В приведенном ниже фрагменте из [[https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf|документации к микроконтроллеру]] показано, что первые 16 бит регистра ''GPIOx_IDR'' содержат информацию о напряжении на выводах порта ''x''. |
| |
| {{ :ob:o7:example:idr.png?800 }} | {{ :ob:o7:example:idr.png?800 }} |
| |
| Адреса регистров хранятся в модулях подсистемы ''Micro''. Напримр для микроконтроллеров семейства **STM32F10xxD** адреса хранятся в модуле ''MicroSTM32F10xxD''. Для настройки выводов контроллеров STM32F10* используется модуль ''MicroSTM32F10xPinCfg''. | Адреса регистров хранятся в модулях подсистемы ''Micro''. Например для микроконтроллеров семейства **STM32F10xxD** адреса хранятся в модуле ''MicroSTM32F10xxD''. Для настройки выводов контроллеров STM32F10* используется модуль ''MicroSTM32F10xPinCfg''. |
| |
| |
| PROCEDURE InitButton*; | PROCEDURE InitButton*; |
| BEGIN | BEGIN |
| PinCfg.Configure(PinCfg.C, 13, PinCfg.inputPullDown); | PinCfg.Configure(PinCfg.C, pin, PinCfg.inputPullDown); |
| END InitButton; | END InitButton; |
| |
| PROCEDURE CheckButton*(): BOOLEAN; | PROCEDURE CheckButton*(): BOOLEAN; |
| VAR x: SET; | VAR x: SET; |
| BEGIN | BEGIN |
| SYSTEM.GET(MCU.GPIOAIDR, x); | SYSTEM.GET(MCU.GPIOAIDR, x); |
| RETURN pin IN x (из 32 битного х маской pin получаем булевое true/false ??) | RETURN pin IN x (* проверяем, есть ли искомый пин в множестве бит регистра *) |
| END CheckButton; | END CheckButton; |
| |
| </code> | </code> |
| |
| Этот пример реализует процедуру, которая проверяет уровень сигнала на ножке ''pin''. Кнопка должна быть подключена к питанию через резистор номиналом от 200 Ом, чтобы обеспечить ток менее 50 мА. | Этот пример реализует процедуру, которая проверяет уровень сигнала на ножке ''pin''. Кнопка должна быть подключена к питанию через резистор номиналом от 100 Ом, чтобы обеспечить ток менее 50 мА. |
| |
| Подробнее про [[https://oberoncore.ru/library/wirth_sets|применение типа SET для управления регистрами]]. | Подробнее про [[https://oberoncore.ru/library/wirth_sets|применение типа SET для управления регистрами]]. |
| SYSTEM.GET(MCU.ADC1DR, value); | SYSTEM.GET(MCU.ADC1DR, value); |
| </code> | </code> |
| | |
| | Однако, чтобы данные появились в этом регистре требуется специальная настройка АЦП, что выходит за рамки настоящей заметки (смотрите модули ''STM32F1ADC1'', ''STM32F4ADC1''). |
| | |
| | Следующая заметка: [[ob:o7:example:put|Запись значения в регистр (SYSTEM.PUT)]] |
| | |
| |