---------------------------------------------------------------------------- -- | -- Module : STM32.PWR -- Copyright : (c) Marc Fontaine 2017 -- License : BSD3 -- -- Maintainer : Marc.Fontaine@gmx.de -- Stability : experimental -- Portability : GHC-only {-# LANGUAGE OverloadedStrings #-} module STM32.PWR where import Device import STM32.MachineInterface import STM32.Utils import qualified STM32.RCC as RCC data PVDLevel = U_2V2 | U_2V3 | U_2V4 | U_2V5 | U_2V6 | U_2V7 | U_2V8 | U_2V9 deriving (Show,Eq) instance RegisterField PVDLevel where toBits b = case b of U_2V2 -> "000" U_2V3 -> "001" U_2V4 -> "010" U_2V5 -> "011" U_2V6 -> "100" U_2V7 -> "101" U_2V8 -> "110" U_2V9 -> "111" toField = const CR_PLS data Flag = WU | SB | PVDO deriving (Show,Eq) deInit :: MI () deInit = RCC.peripheralResetToggle PWR backupAccessCmd :: Bool -> MI () backupAccessCmd = bitWrite PWR CR_DBP pvdCmd :: Bool -> MI () pvdCmd = bitWrite PWR CR_PVDE pvdLevelConfig :: PVDLevel -> MI () pvdLevelConfig = fieldWrite PWR wakeUpPinCmd :: Bool -> MI () wakeUpPinCmd = bitWrite PWR CSR_EWUP getFlagStatus :: Flag -> MI Bool getFlagStatus = error "todo" clearFlag :: Flag -> MI () clearFlag flag = bitSet PWR $ case flag of WU -> CR_CWUF SB -> CR_CSBF PVDO -> CR_PVDE