pinebuds/platform/hal/best2300p/hal_psc_best2300p.c

105 lines
4.3 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#include "cmsis.h"
#include "hal_location.h"
#include "hal_psc.h"
#include "hal_timer.h"
#include "plat_addr_map.h"
#include CHIP_SPECIFIC_HDR(reg_psc)
#define PSC_WRITE_ENABLE 0xCAFE0000
static struct AONPSC_T *const psc = (struct AONPSC_T *)AON_PSC_BASE;
void BOOT_TEXT_FLASH_LOC hal_psc_init(void) {
// Setup wakeup mask
psc->REG_080 = 0xFFFFFFFF;
psc->REG_084 = 0xFFFFFFFF;
}
void SRAM_TEXT_LOC hal_psc_core_auto_power_down(void) {
psc->REG_018 = PSC_WRITE_ENABLE | 0;
psc->REG_000 = PSC_WRITE_ENABLE | PSC_AON_MCU_PG_AUTO_EN;
psc->REG_010 = PSC_WRITE_ENABLE | PSC_AON_MCU_POWERDN_START;
}
void SRAM_TEXT_LOC hal_psc_mcu_auto_power_up(void) {
psc->REG_014 = PSC_WRITE_ENABLE | PSC_AON_MCU_POWERUP_START;
}
void BOOT_TEXT_FLASH_LOC hal_psc_codec_enable(void) {
psc->REG_078 = PSC_WRITE_ENABLE | PSC_AON_CODEC_PSW_EN_DR |
PSC_AON_CODEC_RESETN_ASSERT_DR |
PSC_AON_CODEC_RESETN_ASSERT_REG | PSC_AON_CODEC_ISO_EN_DR |
PSC_AON_CODEC_ISO_EN_REG | PSC_AON_CODEC_CLK_STOP_DR |
PSC_AON_CODEC_CLK_STOP_REG;
hal_sys_timer_delay(MS_TO_TICKS(1));
psc->REG_078 = PSC_WRITE_ENABLE | PSC_AON_CODEC_PSW_EN_DR |
PSC_AON_CODEC_RESETN_ASSERT_DR | PSC_AON_CODEC_ISO_EN_DR |
PSC_AON_CODEC_ISO_EN_REG | PSC_AON_CODEC_CLK_STOP_DR |
PSC_AON_CODEC_CLK_STOP_REG;
psc->REG_078 = PSC_WRITE_ENABLE | PSC_AON_CODEC_PSW_EN_DR |
PSC_AON_CODEC_RESETN_ASSERT_DR | PSC_AON_CODEC_ISO_EN_DR |
PSC_AON_CODEC_CLK_STOP_DR | PSC_AON_CODEC_CLK_STOP_REG;
psc->REG_078 = PSC_WRITE_ENABLE | PSC_AON_CODEC_PSW_EN_DR |
PSC_AON_CODEC_RESETN_ASSERT_DR | PSC_AON_CODEC_ISO_EN_DR |
PSC_AON_CODEC_CLK_STOP_DR;
}
void BOOT_TEXT_FLASH_LOC hal_psc_codec_disable(void) {
psc->REG_078 = PSC_WRITE_ENABLE | PSC_AON_CODEC_PSW_EN_DR |
PSC_AON_CODEC_PSW_EN_REG | PSC_AON_CODEC_RESETN_ASSERT_DR |
PSC_AON_CODEC_RESETN_ASSERT_REG | PSC_AON_CODEC_ISO_EN_DR |
PSC_AON_CODEC_ISO_EN_REG | PSC_AON_CODEC_CLK_STOP_DR |
PSC_AON_CODEC_CLK_STOP_REG;
}
void BOOT_TEXT_FLASH_LOC hal_psc_bt_enable(void) {
psc->REG_038 = PSC_WRITE_ENABLE | PSC_AON_BT_PSW_EN_DR |
PSC_AON_BT_RESETN_ASSERT_DR | PSC_AON_BT_RESETN_ASSERT_REG |
PSC_AON_BT_ISO_EN_DR | PSC_AON_BT_ISO_EN_REG |
PSC_AON_BT_CLK_STOP_DR | PSC_AON_BT_CLK_STOP_REG;
hal_sys_timer_delay(MS_TO_TICKS(1));
psc->REG_038 = PSC_WRITE_ENABLE | PSC_AON_BT_PSW_EN_DR |
PSC_AON_BT_RESETN_ASSERT_DR | PSC_AON_BT_ISO_EN_DR |
PSC_AON_BT_ISO_EN_REG | PSC_AON_BT_CLK_STOP_DR |
PSC_AON_BT_CLK_STOP_REG;
psc->REG_038 = PSC_WRITE_ENABLE | PSC_AON_BT_PSW_EN_DR |
PSC_AON_BT_RESETN_ASSERT_DR | PSC_AON_BT_ISO_EN_DR |
PSC_AON_BT_CLK_STOP_DR | PSC_AON_BT_CLK_STOP_REG;
psc->REG_038 = PSC_WRITE_ENABLE | PSC_AON_BT_PSW_EN_DR |
PSC_AON_BT_RESETN_ASSERT_DR | PSC_AON_BT_ISO_EN_DR |
PSC_AON_BT_CLK_STOP_DR;
#ifdef JTAG_BT
psc->REG_064 |= PSC_AON_CODEC_RESERVED(1 << 3);
psc->REG_064 &= ~PSC_AON_CODEC_RESERVED(1 << 2);
#endif
}
void BOOT_TEXT_FLASH_LOC hal_psc_bt_disable(void) {
#ifdef JTAG_BT
psc->REG_064 &= ~PSC_AON_CODEC_RESERVED(1 << 3);
psc->REG_064 |= PSC_AON_CODEC_RESERVED(1 << 2);
#endif
psc->REG_038 = PSC_WRITE_ENABLE | PSC_AON_BT_PSW_EN_DR |
PSC_AON_BT_PSW_EN_REG | PSC_AON_BT_RESETN_ASSERT_DR |
PSC_AON_BT_RESETN_ASSERT_REG | PSC_AON_BT_ISO_EN_DR |
PSC_AON_BT_ISO_EN_REG | PSC_AON_BT_CLK_STOP_DR |
PSC_AON_BT_CLK_STOP_REG;
}