1 /*
2 * SPDX-FileCopyrightText: 2010-2021 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <stdint.h>
8 #include <sdkconfig.h>
9 #include "soc/soc_caps.h"
10 #include "soc/dport_access.h"
11 #include "esp_attr.h"
12
esp_dport_access_reg_read(uint32_t reg)13 IRAM_ATTR uint32_t esp_dport_access_reg_read(uint32_t reg)
14 {
15 #if defined(BOOTLOADER_BUILD) || defined(CONFIG_FREERTOS_UNICORE) || !SOC_DPORT_WORKAROUND
16 return _DPORT_REG_READ(reg);
17 #else
18 uint32_t apb;
19 unsigned int intLvl;
20 __asm__ __volatile__ (\
21 "rsil %[LVL], "XTSTR(SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL)"\n"\
22 "movi %[APB], "XTSTR(0x3ff40078)"\n"\
23 "l32i %[APB], %[APB], 0\n"\
24 "l32i %[REG], %[REG], 0\n"\
25 "wsr %[LVL], "XTSTR(PS)"\n"\
26 "rsync\n"\
27 : [APB]"=a"(apb), [REG]"+a"(reg), [LVL]"=a"(intLvl)\
28 : \
29 : "memory" \
30 );
31 return reg;
32 #endif
33 }
34
esp_dport_access_sequence_reg_read(uint32_t reg)35 IRAM_ATTR uint32_t esp_dport_access_sequence_reg_read(uint32_t reg)
36 {
37 #if defined(BOOTLOADER_BUILD) || defined(CONFIG_FREERTOS_UNICORE) || !SOC_DPORT_WORKAROUND
38 return _DPORT_REG_READ(reg);
39 #else
40 uint32_t apb;
41 __asm__ __volatile__ (\
42 "movi %[APB], "XTSTR(0x3ff40078)"\n"\
43 "l32i %[APB], %[APB], 0\n"\
44 "l32i %[REG], %[REG], 0\n"\
45 : [APB]"=a"(apb), [REG]"+a"(reg)\
46 : \
47 : "memory" \
48 );
49 return reg;
50 #endif
51 }
52