(* Пример для STM32L152C-DISCO Светодиоды мигают по прерыванию от системного таймера. *) MODULE SysTick; IMPORT SYSTEM; CONST GPIOB = 40020400H; GPIOBMODER = GPIOB; GPIOBOTYPER = GPIOB + 04H; GPIOBOSPEEDR = GPIOB + 08H; GPIOBPUPDR = GPIOB + 0CH; GPIOBIDR = GPIOB + 10H; GPIOBODR = GPIOB + 14H; GPIOBBSRR = GPIOB + 18H; GPIOBLCKR = GPIOB + 1CH; GPIOBAFRL = GPIOB + 20H; GPIOBAFRH = GPIOB + 24H; GPIOBBRR = GPIOB + 28H; RCC = 40023800H; RCC_CR = RCC; RCC_AHBENR = RCC + 1CH; RCC_APB2ENR = RCC + 20H; RCC_APB1ENR = RCC + 24H; STK = 0E000E010H; STK_CTRL = STK; ENABLE = {0}; TICKINT = {1}; CLKSOURCE = {2}; STK_LOAD = STK + 04H; STK_VAL = STK + 08H; STK_CALIB = STK + 0CH; Blue = 6; Green = 7; VAR x: SET; state: BOOLEAN; (* обработчик прерываний от System tick timer *) PROCEDURE tick [15]; BEGIN state := ~state; (* включить или выключить светодиоды *) SYSTEM.PUT(GPIOBBSRR, {Blue + 16 * ORD(state)}); SYSTEM.PUT(GPIOBBSRR, {Green + 16 * ORD(state)}) END tick; BEGIN state := FALSE; (* подключить GPIOB *) SYSTEM.GET(RCC_AHBENR, x); SYSTEM.PUT(RCC_AHBENR, x + {1}); (* настроить PB6 и PB7 на выход *) SYSTEM.GET(GPIOBMODER, x); SYSTEM.PUT(GPIOBMODER, x + {12, 14} - {13, 15}); (* настроить и запустить SysTick *) SYSTEM.PUT(STK_LOAD, 1048576); SYSTEM.PUT(STK_CTRL, ENABLE + TICKINT + CLKSOURCE); END SysTick.