/
Simple.hs
39 lines (34 loc) · 1.02 KB
/
Simple.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Main where
import Ivory.Language
import Ivory.Tower
import Ivory.Tower.Compile
import Tower.Config
import Ivory.OS.FreeRTOS.Tower.STM32
-- Just using the PlatformClock constraint to make sure it works.
import Ivory.BSP.STM32.ClockConfig
test1_per :: (e -> ClockConfig) -> Tower e ()
test1_per _tocc = do
(c1in, c1out) <- channel
per <- period (Microseconds 1000)
monitor "m1" $ do
s <- state "last_m1_tick_message"
handler per "tick" $ do
e <- emitter c1in 1
callback $ \m -> do
refCopy s m
emit e m
monitor "m2" $ do
s <- state "last_m2_chan1_message"
handler c1out "chan1msg" $ do
callback $ \m ->
refCopy s m
main :: IO ()
main = towerCompile p (test1_per stm32config_clock)
where p topts = do
cfg <- getConfig topts stm32ConfigParser
return $ stm32FreeRTOS id cfg