C++程序  |  194行  |  7.81 KB

/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _HWR_H_
#define _HWR_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>
#include <stdbool.h>
#include <plat/inc/rtc.h>

/* busses */
#define PERIPH_BUS_AHB1               0
#define PERIPH_BUS_AHB2               1
#define PERIPH_BUS_AHB3               2
#define PERIPH_BUS_APB1               3
#define PERIPH_BUS_APB2               4


/* AHB 1 peripherals */
#define PERIPH_AHB1_GPIOA             0x00000001UL
#define PERIPH_AHB1_GPIOB             0x00000002UL
#define PERIPH_AHB1_GPIOC             0x00000004UL
#define PERIPH_AHB1_GPIOD             0x00000008UL
#define PERIPH_AHB1_GPIOE             0x00000010UL
#define PERIPH_AHB1_GPIOF             0x00000020UL
#define PERIPH_AHB1_GPIOG             0x00000040UL
#define PERIPH_AHB1_GPIOH             0x00000080UL
#define PERIPH_AHB1_GPIOI             0x00000100UL
#define PERIPH_AHB1_CRC               0x00001000UL
#define PERIPH_AHB1_FLITF             0x00008000UL
#define PERIPH_AHB1_SRAM1             0x00010000UL
#define PERIPH_AHB1_SRAM2             0x00020000UL
#define PERIPH_AHB1_BKPSRAM           0x00040000UL
#define PERIPH_AHB1_SRAM3             0x00080000UL
#define PERIPH_AHB1_CCMDATARAMEN      0x00100000UL
#define PERIPH_AHB1_DMA1              0x00200000UL
#define PERIPH_AHB1_DMA2              0x00400000UL
#define PERIPH_AHB1_ETH_MAC           0x02000000UL
#define PERIPH_AHB1_ETH_MAC_TX        0x04000000UL
#define PERIPH_AHB1_ETH_MAC_RX        0x08000000UL
#define PERIPH_AHB1_ETH_MAC_PTP       0x10000000UL
#define PERIPH_AHB1_OTG_HS            0x20000000UL
#define PERIPH_AHB1_OTG_HS_ULPI       0x40000000UL

/* AHB 2 peripherals */
#define PERIPH_AHB2_DCMI              0x00000001UL
#define PERIPH_AHB2_CRYP              0x00000010UL
#define PERIPH_AHB2_HASH              0x00000020UL
#define PERIPH_AHB2_RNG               0x00000040UL
#define PERIPH_AHB2_OTG_FS            0x00000080UL

/* AHB 3 peripherals */
#define PERIPH_AHB3_FSMC              0x00000001UL

/* APB 1 peripherals */
#define PERIPH_APB1_TIM2              0x00000001UL
#define PERIPH_APB1_TIM3              0x00000002UL
#define PERIPH_APB1_TIM4              0x00000004UL
#define PERIPH_APB1_TIM5              0x00000008UL
#define PERIPH_APB1_TIM6              0x00000010UL
#define PERIPH_APB1_TIM7              0x00000020UL
#define PERIPH_APB1_TIM12             0x00000040UL
#define PERIPH_APB1_TIM13             0x00000080UL
#define PERIPH_APB1_TIM14             0x00000100UL
#define PERIPH_APB1_WWDG              0x00000800UL
#define PERIPH_APB1_SPI2              0x00004000UL
#define PERIPH_APB1_SPI3              0x00008000UL
#define PERIPH_APB1_USART2            0x00020000UL
#define PERIPH_APB1_USART3            0x00040000UL
#define PERIPH_APB1_UART4             0x00080000UL
#define PERIPH_APB1_UART5             0x00100000UL
#define PERIPH_APB1_I2C1              0x00200000UL
#define PERIPH_APB1_I2C2              0x00400000UL
#define PERIPH_APB1_I2C3              0x00800000UL
#define PERIPH_APB1_CAN1              0x02000000UL
#define PERIPH_APB1_CAN2              0x04000000UL
#define PERIPH_APB1_PWR               0x10000000UL
#define PERIPH_APB1_DAC               0x20000000UL
#define PERIPH_APB1_UART7             0x40000000UL
#define PERIPH_APB1_UART8             0x80000000UL

/* APB 2 peripherals */
#define PERIPH_APB2_TIM1              0x00000001UL
#define PERIPH_APB2_TIM8              0x00000002UL
#define PERIPH_APB2_USART1            0x00000010UL
#define PERIPH_APB2_USART6            0x00000020UL
#define PERIPH_APB2_ADC               0x00000100UL
#define PERIPH_APB2_ADC1              0x00000100UL
#define PERIPH_APB2_ADC2              0x00000200UL
#define PERIPH_APB2_ADC3              0x00000400UL
#define PERIPH_APB2_SDIO              0x00000800UL
#define PERIPH_APB2_SPI1              0x00001000UL
#define PERIPH_APB2_SPI4              0x00002000UL
#define PERIPH_APB2_SYSCFG            0x00004000UL
#define PERIPH_APB2_TIM9              0x00010000UL
#define PERIPH_APB2_TIM10             0x00020000UL
#define PERIPH_APB2_TIM11             0x00040000UL
#define PERIPH_APB2_SPI5              0x00100000UL
#define PERIPH_APB2_SPI6              0x00200000UL




/* base addrs */
#define UDID_BASE                     0x1FFF7A10UL
#define TIM2_BASE                     0x40000000UL
#define TIM3_BASE                     0x40000400UL
#define TIM4_BASE                     0x40000800UL
#define TIM5_BASE                     0x40000C00UL
#define RTC_BASE                      0x40002800UL
#define SPI2_BASE                     0x40003800UL
#define SPI3_BASE                     0x40003C00UL
#define USART2_BASE                   0x40004400UL
#define USART3_BASE                   0x40004800UL
#define UART4_BASE                    0x40004C00UL
#define UART5_BASE                    0x40005000UL
#define I2C1_BASE                     0x40005400UL
#define I2C2_BASE                     0x40005800UL
#define I2C3_BASE                     0x40005C00UL
#define PWR_BASE                      0x40007000UL
#define TIM1_BASE                     0x40010000UL
#define USART1_BASE                   0x40011000UL
#define USART6_BASE                   0x40011400UL
#define SPI1_BASE                     0x40013000UL
#define SPI4_BASE                     0x40013400UL
#define SYSCFG_BASE                   0x40013800UL
#define EXTI_BASE                     0x40013C00UL
#define TIM9_BASE                     0x40014000UL
#define TIM10_BASE                    0x40014400UL
#define TIM11_BASE                    0x40014800UL
#define SPI5_BASE                     0x40015000UL
#define SPI6_BASE                     0x40015400UL
#define GPIOA_BASE                    0x40020000UL
#define GPIOB_BASE                    0x40020400UL
#define GPIOC_BASE                    0x40020800UL
#define GPIOD_BASE                    0x40020C00UL
#define GPIOE_BASE                    0x40021000UL
#define GPIOF_BASE                    0x40021400UL
#define GPIOG_BASE                    0x40021800UL
#define GPIOH_BASE                    0x40021C00UL
#define GPIOI_BASE                    0x40022000UL
#define CRC_BASE                      0x40023000UL
#define RCC_BASE                      0x40023800UL
#define FLASH_BASE                    0x40023C00UL
#define DMA1_BASE                     0x40026000UL
#define DMA2_BASE                     0x40026400UL
#define DBG_BASE                      0xE0042000UL


enum Stm32F4xxSleepType {       //current       power          wkup way       wkup speed   (typ/max)
    stm32f411SleepModeSleep,    //2.7-5.9mA     all-core       interrupt      1 cy
    stm32f144SleepModeStopMR,   //111uA         RTC,flash,reg  EXTI           13.5/14.5us
    stm32f144SleepModeStopMRFPD,// 73uA         RTC,reg        EXTI           105/111us
    stm32f411SleepModeStopLPFD, // 42uA         RTC,lpreg      EXTI           113/130us
    stm32f411SleepModeStopLPLV, // 10uA         RTC            EXTT           314/407us (actually lower, but not quoted)
};

/* funcs */
void pwrSystemInit(void);
uint32_t pwrResetReason(void);
void pwrUnitClock(uint32_t bus, uint32_t unit, bool on);
void pwrUnitReset(uint32_t bus, uint32_t unit, bool on);
uint32_t pwrGetBusSpeed(uint32_t bus);
void pwrEnableAndClockRtc(enum RtcClock);
void pwrEnableWriteBackupDomainRegs(void);


/* internal to platform */
void pwrSetSleepType(enum Stm32F4xxSleepType sleepType);

#ifdef __cplusplus
}
#endif

#endif