forked from KolibriOS/kolibrios
79 lines
1.8 KiB
Plaintext
79 lines
1.8 KiB
Plaintext
|
(*
|
||
|
Пример для 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.
|