Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     Пример для STM32L152C-DISCO
  3.  
  4.     Светодиоды мигают по прерыванию от системного таймера.
  5. *)
  6.  
  7. MODULE SysTick;
  8.  
  9. IMPORT SYSTEM;
  10.  
  11.  
  12. CONST
  13.  
  14.     GPIOB = 40020400H;
  15.         GPIOBMODER   = GPIOB;
  16.         GPIOBOTYPER  = GPIOB + 04H;
  17.         GPIOBOSPEEDR = GPIOB + 08H;
  18.         GPIOBPUPDR   = GPIOB + 0CH;
  19.         GPIOBIDR     = GPIOB + 10H;
  20.         GPIOBODR     = GPIOB + 14H;
  21.         GPIOBBSRR    = GPIOB + 18H;
  22.         GPIOBLCKR    = GPIOB + 1CH;
  23.         GPIOBAFRL    = GPIOB + 20H;
  24.         GPIOBAFRH    = GPIOB + 24H;
  25.         GPIOBBRR     = GPIOB + 28H;
  26.  
  27.  
  28.     RCC = 40023800H;
  29.         RCC_CR      = RCC;
  30.         RCC_AHBENR  = RCC + 1CH;
  31.         RCC_APB2ENR = RCC + 20H;
  32.         RCC_APB1ENR = RCC + 24H;
  33.  
  34.  
  35.     STK = 0E000E010H;
  36.         STK_CTRL = STK;
  37.             ENABLE    = {0};
  38.             TICKINT   = {1};
  39.             CLKSOURCE = {2};
  40.  
  41.         STK_LOAD  = STK + 04H;
  42.         STK_VAL   = STK + 08H;
  43.         STK_CALIB = STK + 0CH;
  44.  
  45.  
  46.     Blue  = 6;
  47.     Green = 7;
  48.  
  49.  
  50. VAR
  51.  
  52.     x: SET; state: BOOLEAN;
  53.  
  54.  
  55. (* обработчик прерываний от System tick timer *)
  56. PROCEDURE tick [15];
  57. BEGIN
  58.     state := ~state;
  59.     (* включить или выключить светодиоды *)
  60.     SYSTEM.PUT(GPIOBBSRR, {Blue + 16 * ORD(state)});
  61.     SYSTEM.PUT(GPIOBBSRR, {Green + 16 * ORD(state)})
  62. END tick;
  63.  
  64.  
  65. BEGIN
  66.     state := FALSE;
  67.  
  68.     (* подключить GPIOB *)
  69.     SYSTEM.GET(RCC_AHBENR, x);
  70.     SYSTEM.PUT(RCC_AHBENR, x + {1});
  71.  
  72.     (* настроить PB6 и PB7 на выход *)
  73.     SYSTEM.GET(GPIOBMODER, x);
  74.     SYSTEM.PUT(GPIOBMODER, x + {12, 14} - {13, 15});
  75.  
  76.     (* настроить и запустить SysTick *)
  77.     SYSTEM.PUT(STK_LOAD, 1048576);
  78.     SYSTEM.PUT(STK_CTRL, ENABLE + TICKINT + CLKSOURCE);
  79. END SysTick.