cpu/esp8266: files that are not needed any longer removed
This commit is contained in:
parent
28ea0a0914
commit
a212228147
@ -1,54 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Low-level GPIO driver implementation for ESP8266
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef GPIO_COMMON_H
|
||||
#define GPIO_COMMON_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Map of GPIO pin numbers to IOMUX pin numbers */
|
||||
extern const uint8_t _gpio_to_iomux[];
|
||||
/** Map of IOMUX pin numbers to GPIO pin numbers */
|
||||
extern const uint8_t _iomux_to_gpio[];
|
||||
|
||||
/**
|
||||
* @brief Definition of possible GPIO usage types
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
_GPIO = 0, /**< pin used as standard GPIO */
|
||||
_I2C, /**< pin used as I2C signal */
|
||||
_PWM, /**< pin used as PWM output */
|
||||
_SPI, /**< pin used as SPI interface */
|
||||
_SPIF, /**< pin used as SPI flash interface */
|
||||
_UART, /**< pin used as UART interface */
|
||||
} _gpio_pin_usage_t;
|
||||
|
||||
/**
|
||||
* Holds the usage type of each GPIO pin
|
||||
*/
|
||||
extern _gpio_pin_usage_t _gpio_pin_usage [GPIO_PIN_NUMOF];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GPIO_COMMON_H */
|
||||
@ -1,228 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2005 by
|
||||
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software
|
||||
* is freely granted, provided that this notice is preserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Modified _intsup.h for compilation with RIOT OS
|
||||
* Source: /path/to/newlib-xtensa/xtensa-lx106-elf/include/sys
|
||||
* Changes: __INT32 (see below)
|
||||
*/
|
||||
|
||||
#ifndef SYS__INTSUP_H
|
||||
#define SYS__INTSUP_H
|
||||
|
||||
#ifndef DOXYGEN
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* additional header guard to avoid conflicts if original file is included later */
|
||||
#ifndef _SYS__INTSUP_H
|
||||
#define _SYS__INTSUP_H
|
||||
|
||||
#include <sys/features.h>
|
||||
|
||||
#if __GNUC_PREREQ (3, 2)
|
||||
/* gcc > 3.2 implicitly defines the values we are interested */
|
||||
#define __STDINT_EXP(x) __##x##__
|
||||
#else
|
||||
#define __STDINT_EXP(x) x
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
/* Determine how intptr_t and intN_t fastN_t and leastN_t are defined by gcc
|
||||
for this target. This is used to determine the correct printf() constant in
|
||||
inttypes.h and other constants in stdint.h.
|
||||
So we end up with
|
||||
?(signed|unsigned) char == 0
|
||||
?(signed|unsigned) short == 1
|
||||
?(signed|unsigned) int == 2
|
||||
?(signed|unsigned) short int == 3
|
||||
?(signed|unsigned) long == 4
|
||||
?(signed|unsigned) long int == 6
|
||||
?(signed|unsigned) long long == 8
|
||||
?(signed|unsigned) long long int == 10
|
||||
*/
|
||||
#pragma push_macro("signed")
|
||||
#pragma push_macro("unsigned")
|
||||
#pragma push_macro("char")
|
||||
#pragma push_macro("short")
|
||||
#pragma push_macro("__int20")
|
||||
#pragma push_macro("int")
|
||||
#pragma push_macro("long")
|
||||
#undef signed
|
||||
#undef unsigned
|
||||
#undef char
|
||||
#undef short
|
||||
#undef int
|
||||
#undef __int20
|
||||
#undef long
|
||||
#define signed +0
|
||||
#define unsigned +0
|
||||
#define char +0
|
||||
#define short +1
|
||||
#define __int20 +2
|
||||
#define int +2
|
||||
#define long +4
|
||||
#if (__INTPTR_TYPE__ == 8 || __INTPTR_TYPE__ == 10)
|
||||
#define _INTPTR_EQ_LONGLONG
|
||||
#elif (__INTPTR_TYPE__ == 4 || __INTPTR_TYPE__ == 6)
|
||||
#define _INTPTR_EQ_LONG
|
||||
/* Note - the tests for _INTPTR_EQ_INT and _INTPTR_EQ_SHORT are currently
|
||||
redundant as the values are not used. But one day they may be needed
|
||||
and so the tests remain. */
|
||||
#elif __INTPTR_TYPE__ == 2
|
||||
#define _INTPTR_EQ_INT
|
||||
#elif (__INTPTR_TYPE__ == 1 || __INTPTR_TYPE__ == 3)
|
||||
#define _INTPTR_EQ_SHORT
|
||||
#else
|
||||
#error "Unable to determine type definition of intptr_t"
|
||||
#endif
|
||||
#if (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6)
|
||||
#define _INT32_EQ_LONG
|
||||
#elif __INT32_TYPE__ == 2
|
||||
/* Nothing to define because int32_t is safe to print as an int. */
|
||||
#else
|
||||
#error "Unable to determine type definition of int32_t"
|
||||
#endif
|
||||
|
||||
#if (__INT8_TYPE__ == 0)
|
||||
#define __INT8 /* "hh" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT8_TYPE__ == 1 || __INT8_TYPE__ == 3)
|
||||
#define __INT8 /* "h" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT8_TYPE__ == 2)
|
||||
#define __INT8
|
||||
#elif (__INT8_TYPE__ == 4 || __INT8_TYPE__ == 6)
|
||||
#define __INT8 "l"
|
||||
#elif (__INT8_TYPE__ == 8 || __INT8_TYPE__ == 10)
|
||||
#define __INT8 "ll"
|
||||
#endif
|
||||
#if (__INT16_TYPE__ == 1 || __INT16_TYPE__ == 3)
|
||||
#define __INT16 /* "h" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT16_TYPE__ == 2)
|
||||
#define __INT16
|
||||
#elif (__INT16_TYPE__ == 4 || __INT16_TYPE__ == 6)
|
||||
#define __INT16 "l"
|
||||
#elif (__INT16_TYPE__ == 8 || __INT16_TYPE__ == 10)
|
||||
#define __INT16 "ll"
|
||||
#endif
|
||||
#if (__INT32_TYPE__ == 2)
|
||||
#define __INT32
|
||||
#elif (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6)
|
||||
/**
|
||||
* Definition of __INT32 had to be changed since to avoid format warnings/
|
||||
* errors since xtensa-lx106-elf-gcc defines *__INT32_TYPE__* as *long int*
|
||||
* while newlib defines *int32_t* as *signed int*. PRI*32 there throw format
|
||||
* warnings/errors.
|
||||
*/
|
||||
#if 0
|
||||
#define __INT32 "l"
|
||||
#else
|
||||
#define __INT32
|
||||
#endif
|
||||
#elif (__INT32_TYPE__ == 8 || __INT32_TYPE__ == 10)
|
||||
#define __INT32 "ll"
|
||||
#endif
|
||||
#if (__INT64_TYPE__ == 2)
|
||||
#define __INT64
|
||||
#elif (__INT64_TYPE__ == 4 || __INT64_TYPE__ == 6)
|
||||
#define __INT64 "l"
|
||||
#elif (__INT64_TYPE__ == 8 || __INT64_TYPE__ == 10)
|
||||
#define __INT64 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST8_TYPE__ == 0)
|
||||
#define __FAST8 /* "hh" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT_FAST8_TYPE__ == 1 || __INT_FAST8_TYPE__ == 3)
|
||||
#define __FAST8 /* "h" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT_FAST8_TYPE__ == 2)
|
||||
#define __FAST8
|
||||
#elif (__INT_FAST8_TYPE__ == 4 || __INT_FAST8_TYPE__ == 6)
|
||||
#define __FAST8 "l"
|
||||
#elif (__INT_FAST8_TYPE__ == 8 || __INT_FAST8_TYPE__ == 10)
|
||||
#define __FAST8 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST16_TYPE__ == 1 || __INT_FAST16_TYPE__ == 3)
|
||||
#define __FAST16 /* "h" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT_FAST16_TYPE__ == 2)
|
||||
#define __FAST16
|
||||
#elif (__INT_FAST16_TYPE__ == 4 || __INT_FAST16_TYPE__ == 6)
|
||||
#define __FAST16 "l"
|
||||
#elif (__INT_FAST16_TYPE__ == 8 || __INT_FAST16_TYPE__ == 10)
|
||||
#define __FAST16 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST32_TYPE__ == 2)
|
||||
#define __FAST32
|
||||
#elif (__INT_FAST32_TYPE__ == 4 || __INT_FAST32_TYPE__ == 6)
|
||||
#define __FAST32 "l"
|
||||
#elif (__INT_FAST32_TYPE__ == 8 || __INT_FAST32_TYPE__ == 10)
|
||||
#define __FAST32 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST64_TYPE__ == 2)
|
||||
#define __FAST64
|
||||
#elif (__INT_FAST64_TYPE__ == 4 || __INT_FAST64_TYPE__ == 6)
|
||||
#define __FAST64 "l"
|
||||
#elif (__INT_FAST64_TYPE__ == 8 || __INT_FAST64_TYPE__ == 10)
|
||||
#define __FAST64 "ll"
|
||||
#endif
|
||||
|
||||
#if (__INT_LEAST8_TYPE__ == 0)
|
||||
#define __LEAST8 /* "hh" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT_LEAST8_TYPE__ == 1 || __INT_LEAST8_TYPE__ == 3)
|
||||
#define __LEAST8 /* "h" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT_LEAST8_TYPE__ == 2)
|
||||
#define __LEAST8
|
||||
#elif (__INT_LEAST8_TYPE__ == 4 || __INT_LEAST8_TYPE__ == 6)
|
||||
#define __LEAST8 "l"
|
||||
#elif (__INT_LEAST8_TYPE__ == 8 || __INT_LEAST8_TYPE__ == 10)
|
||||
#define __LEAST8 "ll"
|
||||
#endif
|
||||
#if (__INT_LEAST16_TYPE__ == 1 || __INT_LEAST16_TYPE__ == 3)
|
||||
#define __LEAST16 /* "h" */ /* ets_printf doesn't support "h" */
|
||||
#elif (__INT_LEAST16_TYPE__ == 2)
|
||||
#define __LEAST16
|
||||
#elif (__INT_LEAST16_TYPE__ == 4 || __INT_LEAST16_TYPE__ == 6)
|
||||
#define __LEAST16 "l"
|
||||
#elif (__INT_LEAST16_TYPE__ == 8 || __INT_LEAST16_TYPE__ == 10)
|
||||
#define __LEAST16 "ll"
|
||||
#endif
|
||||
#if (__INT_LEAST32_TYPE__ == 2)
|
||||
#define __LEAST32
|
||||
#elif (__INT_LEAST32_TYPE__ == 4 || __INT_LEAST32_TYPE__ == 6)
|
||||
#define __LEAST32 "l"
|
||||
#elif (__INT_LEAST32_TYPE__ == 8 || __INT_LEAST32_TYPE__ == 10)
|
||||
#define __LEAST32 "ll"
|
||||
#endif
|
||||
#if (__INT_LEAST64_TYPE__ == 2)
|
||||
#define __LEAST64
|
||||
#elif (__INT_LEAST64_TYPE__ == 4 || __INT_LEAST64_TYPE__ == 6)
|
||||
#define __LEAST64 "l"
|
||||
#elif (__INT_LEAST64_TYPE__ == 8 || __INT_LEAST64_TYPE__ == 10)
|
||||
#define __LEAST64 "ll"
|
||||
#endif
|
||||
#undef signed
|
||||
#undef unsigned
|
||||
#undef char
|
||||
#undef short
|
||||
#undef int
|
||||
#undef long
|
||||
#pragma pop_macro("signed")
|
||||
#pragma pop_macro("unsigned")
|
||||
#pragma pop_macro("char")
|
||||
#pragma pop_macro("short")
|
||||
#pragma pop_macro("__int20")
|
||||
#pragma pop_macro("int")
|
||||
#pragma pop_macro("long")
|
||||
|
||||
#endif /* _SYS__INTSUP_H */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DOXYGEN */
|
||||
#endif /* SYS__INTSUP_H */
|
||||
@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
/**
|
||||
* @ingroup cpu_esp8266
|
||||
* @brief Default configurations required by the SDK
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @file
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef USER_CONFIG_H
|
||||
#define USER_CONFIG_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Default CPU frequency in MHz.
|
||||
* Possible values are 80 and 160.
|
||||
*/
|
||||
#ifndef ESP8266_CPU_FREQUENCY
|
||||
#define ESP8266_CPU_FREQUENCY 80
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* USER_CONFIG_H */
|
||||
/** @} */
|
||||
@ -1,350 +0,0 @@
|
||||
PROVIDE ( Cache_Read_Disable = 0x400047f0 );
|
||||
PROVIDE ( Cache_Read_Enable = 0x40004678 );
|
||||
PROVIDE ( FilePacketSendReqMsgProc = 0x400035a0 );
|
||||
PROVIDE ( FlashDwnLdParamCfgMsgProc = 0x4000368c );
|
||||
PROVIDE ( FlashDwnLdStartMsgProc = 0x40003538 );
|
||||
PROVIDE ( FlashDwnLdStopReqMsgProc = 0x40003658 );
|
||||
PROVIDE ( GetUartDevice = 0x40003f4c );
|
||||
PROVIDE ( MD5Final = 0x40009900 );
|
||||
PROVIDE ( MD5Init = 0x40009818 );
|
||||
PROVIDE ( MD5Update = 0x40009834 );
|
||||
PROVIDE ( MemDwnLdStartMsgProc = 0x400036c4 );
|
||||
PROVIDE ( MemDwnLdStopReqMsgProc = 0x4000377c );
|
||||
PROVIDE ( MemPacketSendReqMsgProc = 0x400036f0 );
|
||||
PROVIDE ( RcvMsg = 0x40003eac );
|
||||
PROVIDE ( SHA1Final = 0x4000b648 );
|
||||
PROVIDE ( SHA1Init = 0x4000b584 );
|
||||
PROVIDE ( SHA1Transform = 0x4000a364 );
|
||||
PROVIDE ( SHA1Update = 0x4000b5a8 );
|
||||
PROVIDE ( SPI_read_status = 0x400043c8 );
|
||||
PROVIDE ( SPI_write_status = 0x40004400 );
|
||||
PROVIDE ( SPI_write_enable = 0x4000443c );
|
||||
PROVIDE ( Wait_SPI_Idle = 0x4000448c );
|
||||
PROVIDE ( Enable_QMode = 0x400044c0 );
|
||||
PROVIDE ( SPIEraseArea = 0x40004b44 );
|
||||
PROVIDE ( SPIEraseBlock = 0x400049b4 );
|
||||
PROVIDE ( SPIEraseChip = 0x40004984 );
|
||||
PROVIDE ( SPIEraseSector = 0x40004a00 );
|
||||
PROVIDE ( SPILock = 0x400048a8 );
|
||||
PROVIDE ( SPIParamCfg = 0x40004c2c );
|
||||
PROVIDE ( SPIRead = 0x40004b1c );
|
||||
PROVIDE ( SPIReadModeCnfig = 0x400048ec );
|
||||
PROVIDE ( SPIUnlock = 0x40004878 );
|
||||
PROVIDE ( SPIWrite = 0x40004a4c );
|
||||
PROVIDE ( SelectSpiFunction = 0x40003f58 );
|
||||
PROVIDE ( SendMsg = 0x40003cf4 );
|
||||
PROVIDE ( UartConnCheck = 0x40003230 );
|
||||
PROVIDE ( UartConnectProc = 0x400037a0 );
|
||||
PROVIDE ( UartDwnLdProc = 0x40003368 );
|
||||
PROVIDE ( UartGetCmdLn = 0x40003ef4 );
|
||||
PROVIDE ( UartRegReadProc = 0x4000381c );
|
||||
PROVIDE ( UartRegWriteProc = 0x400037ac );
|
||||
PROVIDE ( UartRxString = 0x40003c30 );
|
||||
PROVIDE ( Uart_Init = 0x40003a14 );
|
||||
PROVIDE ( _DebugExceptionVector = 0x40000010 );
|
||||
PROVIDE ( _DoubleExceptionVector = 0x40000070 );
|
||||
PROVIDE ( _KernelExceptionVector = 0x40000030 );
|
||||
PROVIDE ( _NMIExceptionVector = 0x40000020 );
|
||||
PROVIDE ( _ResetHandler = 0x400000a4 );
|
||||
PROVIDE ( _ResetVector = 0x40000080 );
|
||||
PROVIDE ( _UserExceptionVector = 0x40000050 );
|
||||
PROVIDE ( __adddf3 = 0x4000c538 );
|
||||
PROVIDE ( __addsf3 = 0x4000c180 );
|
||||
PROVIDE ( __divdf3 = 0x4000cb94 );
|
||||
PROVIDE ( __divdi3 = 0x4000ce60 );
|
||||
PROVIDE ( __divsi3 = 0x4000dc88 );
|
||||
PROVIDE ( __extendsfdf2 = 0x4000cdfc );
|
||||
PROVIDE ( __fixdfsi = 0x4000ccb8 );
|
||||
PROVIDE ( __fixunsdfsi = 0x4000cd00 );
|
||||
PROVIDE ( __fixunssfsi = 0x4000c4c4 );
|
||||
PROVIDE ( __floatsidf = 0x4000e2f0 );
|
||||
PROVIDE ( __floatsisf = 0x4000e2ac );
|
||||
PROVIDE ( __floatunsidf = 0x4000e2e8 );
|
||||
PROVIDE ( __floatunsisf = 0x4000e2a4 );
|
||||
PROVIDE ( __muldf3 = 0x4000c8f0 );
|
||||
PROVIDE ( __muldi3 = 0x40000650 );
|
||||
PROVIDE ( __mulsf3 = 0x4000c3dc );
|
||||
PROVIDE ( __subdf3 = 0x4000c688 );
|
||||
PROVIDE ( __subsf3 = 0x4000c268 );
|
||||
PROVIDE ( __truncdfsf2 = 0x4000cd5c );
|
||||
PROVIDE ( __udivdi3 = 0x4000d310 );
|
||||
PROVIDE ( __udivsi3 = 0x4000e21c );
|
||||
PROVIDE ( __umoddi3 = 0x4000d770 );
|
||||
PROVIDE ( __umodsi3 = 0x4000e268 );
|
||||
PROVIDE ( __umulsidi3 = 0x4000dcf0 );
|
||||
PROVIDE ( _rom_store = 0x4000e388 );
|
||||
PROVIDE ( _rom_store_table = 0x4000e328 );
|
||||
PROVIDE ( _start = 0x4000042c );
|
||||
PROVIDE ( _xtos_alloca_handler = 0x4000dbe0 );
|
||||
PROVIDE ( _xtos_c_wrapper_handler = 0x40000598 );
|
||||
PROVIDE ( _xtos_cause3_handler = 0x40000590 );
|
||||
PROVIDE ( _xtos_ints_off = 0x4000bda4 );
|
||||
PROVIDE ( _xtos_ints_on = 0x4000bd84 );
|
||||
PROVIDE ( _xtos_l1int_handler = 0x4000048c );
|
||||
PROVIDE ( _xtos_p_none = 0x4000dbf8 );
|
||||
PROVIDE ( _xtos_restore_intlevel = 0x4000056c );
|
||||
PROVIDE ( _xtos_return_from_exc = 0x4000dc54 );
|
||||
PROVIDE ( _xtos_set_exception_handler = 0x40000454 );
|
||||
PROVIDE ( _xtos_set_interrupt_handler = 0x4000bd70 );
|
||||
PROVIDE ( _xtos_set_interrupt_handler_arg = 0x4000bd28 );
|
||||
PROVIDE ( _xtos_set_intlevel = 0x4000dbfc );
|
||||
PROVIDE ( _xtos_set_min_intlevel = 0x4000dc18 );
|
||||
PROVIDE ( _xtos_set_vpri = 0x40000574 );
|
||||
PROVIDE ( _xtos_syscall_handler = 0x4000dbe4 );
|
||||
PROVIDE ( _xtos_unhandled_exception = 0x4000dc44 );
|
||||
PROVIDE ( _xtos_unhandled_interrupt = 0x4000dc3c );
|
||||
PROVIDE ( aes_decrypt = 0x400092d4 );
|
||||
PROVIDE ( aes_decrypt_deinit = 0x400092e4 );
|
||||
PROVIDE ( aes_decrypt_init = 0x40008ea4 );
|
||||
PROVIDE ( aes_unwrap = 0x40009410 );
|
||||
PROVIDE ( base64_decode = 0x40009648 );
|
||||
PROVIDE ( base64_encode = 0x400094fc );
|
||||
PROVIDE ( bzero = 0x4000de84 );
|
||||
PROVIDE ( cmd_parse = 0x40000814 );
|
||||
PROVIDE ( conv_str_decimal = 0x40000b24 );
|
||||
PROVIDE ( conv_str_hex = 0x40000cb8 );
|
||||
PROVIDE ( convert_para_str = 0x40000a60 );
|
||||
PROVIDE ( dtm_get_intr_mask = 0x400026d0 );
|
||||
PROVIDE ( dtm_params_init = 0x4000269c );
|
||||
PROVIDE ( dtm_set_intr_mask = 0x400026c8 );
|
||||
PROVIDE ( dtm_set_params = 0x400026dc );
|
||||
PROVIDE ( eprintf = 0x40001d14 );
|
||||
PROVIDE ( eprintf_init_buf = 0x40001cb8 );
|
||||
PROVIDE ( eprintf_to_host = 0x40001d48 );
|
||||
PROVIDE ( est_get_printf_buf_remain_len = 0x40002494 );
|
||||
PROVIDE ( est_reset_printf_buf_len = 0x4000249c );
|
||||
PROVIDE ( ets_bzero = 0x40002ae8 );
|
||||
PROVIDE ( ets_char2xdigit = 0x40002b74 );
|
||||
PROVIDE ( ets_delay_us = 0x40002ecc );
|
||||
PROVIDE ( ets_enter_sleep = 0x400027b8 );
|
||||
PROVIDE ( ets_external_printf = 0x40002578 );
|
||||
PROVIDE ( ets_get_cpu_frequency = 0x40002f0c );
|
||||
PROVIDE ( ets_getc = 0x40002bcc );
|
||||
PROVIDE ( ets_install_external_printf = 0x40002450 );
|
||||
PROVIDE ( ets_install_putc1 = 0x4000242c );
|
||||
PROVIDE ( ets_install_putc2 = 0x4000248c );
|
||||
PROVIDE ( ets_install_uart_printf = 0x40002438 );
|
||||
PROVIDE ( ets_intr_lock = 0x40000f74 );
|
||||
PROVIDE ( ets_intr_unlock = 0x40000f80 );
|
||||
PROVIDE ( ets_isr_attach = 0x40000f88 );
|
||||
PROVIDE ( ets_isr_mask = 0x40000f98 );
|
||||
PROVIDE ( ets_isr_unmask = 0x40000fa8 );
|
||||
PROVIDE ( ets_memcmp = 0x400018d4 );
|
||||
PROVIDE ( ets_memcpy = 0x400018b4 );
|
||||
PROVIDE ( ets_memmove = 0x400018c4 );
|
||||
PROVIDE ( ets_memset = 0x400018a4 );
|
||||
PROVIDE ( ets_post = 0x40000e24 );
|
||||
PROVIDE ( ets_printf = 0x400024cc );
|
||||
PROVIDE ( ets_putc = 0x40002be8 );
|
||||
PROVIDE ( ets_rtc_int_register = 0x40002a40 );
|
||||
PROVIDE ( ets_run = 0x40000e04 );
|
||||
PROVIDE ( ets_set_idle_cb = 0x40000dc0 );
|
||||
PROVIDE ( ets_set_user_start = 0x40000fbc );
|
||||
PROVIDE ( ets_str2macaddr = 0x40002af8 );
|
||||
PROVIDE ( ets_strcmp = 0x40002aa8 );
|
||||
PROVIDE ( ets_strcpy = 0x40002a88 );
|
||||
PROVIDE ( ets_strlen = 0x40002ac8 );
|
||||
PROVIDE ( ets_strncmp = 0x40002ab8 );
|
||||
PROVIDE ( ets_strncpy = 0x40002a98 );
|
||||
PROVIDE ( ets_strstr = 0x40002ad8 );
|
||||
PROVIDE ( ets_task = 0x40000dd0 );
|
||||
PROVIDE ( ets_timer_arm = 0x40002cc4 );
|
||||
PROVIDE ( ets_timer_disarm = 0x40002d40 );
|
||||
PROVIDE ( ets_timer_done = 0x40002d80 );
|
||||
PROVIDE ( ets_timer_handler_isr = 0x40002da8 );
|
||||
PROVIDE ( ets_timer_init = 0x40002e68 );
|
||||
PROVIDE ( ets_timer_setfn = 0x40002c48 );
|
||||
PROVIDE ( ets_uart_printf = 0x40002544 );
|
||||
PROVIDE ( ets_update_cpu_frequency = 0x40002f04 );
|
||||
PROVIDE ( ets_vprintf = 0x40001f00 );
|
||||
PROVIDE ( ets_wdt_disable = 0x400030f0 );
|
||||
PROVIDE ( ets_wdt_enable = 0x40002fa0 );
|
||||
PROVIDE ( ets_wdt_get_mode = 0x40002f34 );
|
||||
PROVIDE ( ets_wdt_init = 0x40003170 );
|
||||
PROVIDE ( ets_wdt_restore = 0x40003158 );
|
||||
PROVIDE ( ets_write_char = 0x40001da0 );
|
||||
PROVIDE ( get_first_seg = 0x4000091c );
|
||||
PROVIDE ( gpio_init = 0x40004c50 );
|
||||
PROVIDE ( gpio_input_get = 0x40004cf0 );
|
||||
PROVIDE ( gpio_intr_ack = 0x40004dcc );
|
||||
PROVIDE ( gpio_intr_handler_register = 0x40004e28 );
|
||||
PROVIDE ( gpio_intr_pending = 0x40004d88 );
|
||||
PROVIDE ( gpio_intr_test = 0x40004efc );
|
||||
PROVIDE ( gpio_output_set = 0x40004cd0 );
|
||||
PROVIDE ( gpio_pin_intr_state_set = 0x40004d90 );
|
||||
PROVIDE ( gpio_pin_wakeup_disable = 0x40004ed4 );
|
||||
PROVIDE ( gpio_pin_wakeup_enable = 0x40004e90 );
|
||||
PROVIDE ( gpio_register_get = 0x40004d5c );
|
||||
PROVIDE ( gpio_register_set = 0x40004d04 );
|
||||
PROVIDE ( hmac_md5 = 0x4000a2cc );
|
||||
PROVIDE ( hmac_md5_vector = 0x4000a160 );
|
||||
PROVIDE ( hmac_sha1 = 0x4000ba28 );
|
||||
PROVIDE ( hmac_sha1_vector = 0x4000b8b4 );
|
||||
PROVIDE ( lldesc_build_chain = 0x40004f40 );
|
||||
PROVIDE ( lldesc_num2link = 0x40005050 );
|
||||
PROVIDE ( lldesc_set_owner = 0x4000507c );
|
||||
PROVIDE ( main = 0x40000fec );
|
||||
PROVIDE ( md5_vector = 0x400097ac );
|
||||
PROVIDE ( mem_calloc = 0x40001c2c );
|
||||
PROVIDE ( mem_free = 0x400019e0 );
|
||||
PROVIDE ( mem_init = 0x40001998 );
|
||||
PROVIDE ( mem_malloc = 0x40001b40 );
|
||||
PROVIDE ( mem_realloc = 0x40001c6c );
|
||||
PROVIDE ( mem_trim = 0x40001a14 );
|
||||
PROVIDE ( mem_zalloc = 0x40001c58 );
|
||||
PROVIDE ( memcmp = 0x4000dea8 );
|
||||
PROVIDE ( memcpy = 0x4000df48 );
|
||||
PROVIDE ( memmove = 0x4000e04c );
|
||||
PROVIDE ( memset = 0x4000e190 );
|
||||
PROVIDE ( multofup = 0x400031c0 );
|
||||
PROVIDE ( pbkdf2_sha1 = 0x4000b840 );
|
||||
PROVIDE ( phy_get_romfuncs = 0x40006b08 );
|
||||
PROVIDE ( rand = 0x40000600 );
|
||||
PROVIDE ( rc4_skip = 0x4000dd68 );
|
||||
PROVIDE ( recv_packet = 0x40003d08 );
|
||||
PROVIDE ( remove_head_space = 0x40000a04 );
|
||||
PROVIDE ( rijndaelKeySetupDec = 0x40008dd0 );
|
||||
PROVIDE ( rijndaelKeySetupEnc = 0x40009300 );
|
||||
PROVIDE ( rom_abs_temp = 0x400060c0 );
|
||||
PROVIDE ( rom_ana_inf_gating_en = 0x40006b10 );
|
||||
PROVIDE ( rom_cal_tos_v50 = 0x40007a28 );
|
||||
PROVIDE ( rom_chip_50_set_channel = 0x40006f84 );
|
||||
PROVIDE ( rom_chip_v5_disable_cca = 0x400060d0 );
|
||||
PROVIDE ( rom_chip_v5_enable_cca = 0x400060ec );
|
||||
PROVIDE ( rom_chip_v5_rx_init = 0x4000711c );
|
||||
PROVIDE ( rom_chip_v5_sense_backoff = 0x4000610c );
|
||||
PROVIDE ( rom_chip_v5_tx_init = 0x4000718c );
|
||||
PROVIDE ( rom_dc_iq_est = 0x4000615c );
|
||||
PROVIDE ( rom_en_pwdet = 0x400061b8 );
|
||||
PROVIDE ( rom_get_bb_atten = 0x40006238 );
|
||||
PROVIDE ( rom_get_corr_power = 0x40006260 );
|
||||
PROVIDE ( rom_get_fm_sar_dout = 0x400062dc );
|
||||
PROVIDE ( rom_get_noisefloor = 0x40006394 );
|
||||
PROVIDE ( rom_get_power_db = 0x400063b0 );
|
||||
PROVIDE ( rom_i2c_readReg = 0x40007268 );
|
||||
PROVIDE ( rom_i2c_readReg_Mask = 0x4000729c );
|
||||
PROVIDE ( rom_i2c_writeReg = 0x400072d8 );
|
||||
PROVIDE ( rom_i2c_writeReg_Mask = 0x4000730c );
|
||||
PROVIDE ( rom_iq_est_disable = 0x40006400 );
|
||||
PROVIDE ( rom_iq_est_enable = 0x40006430 );
|
||||
PROVIDE ( rom_linear_to_db = 0x40006484 );
|
||||
PROVIDE ( rom_mhz2ieee = 0x400065a4 );
|
||||
PROVIDE ( rom_pbus_dco___SA2 = 0x40007bf0 );
|
||||
PROVIDE ( rom_pbus_debugmode = 0x4000737c );
|
||||
PROVIDE ( rom_pbus_enter_debugmode = 0x40007410 );
|
||||
PROVIDE ( rom_pbus_exit_debugmode = 0x40007448 );
|
||||
PROVIDE ( rom_pbus_force_test = 0x4000747c );
|
||||
PROVIDE ( rom_pbus_rd = 0x400074d8 );
|
||||
PROVIDE ( rom_pbus_set_rxgain = 0x4000754c );
|
||||
PROVIDE ( rom_pbus_set_txgain = 0x40007610 );
|
||||
PROVIDE ( rom_pbus_workmode = 0x40007648 );
|
||||
PROVIDE ( rom_pbus_xpd_rx_off = 0x40007688 );
|
||||
PROVIDE ( rom_pbus_xpd_rx_on = 0x400076cc );
|
||||
PROVIDE ( rom_pbus_xpd_tx_off = 0x400076fc );
|
||||
PROVIDE ( rom_pbus_xpd_tx_on = 0x40007740 );
|
||||
PROVIDE ( rom_pbus_xpd_tx_on__low_gain = 0x400077a0 );
|
||||
PROVIDE ( rom_phy_reset_req = 0x40007804 );
|
||||
PROVIDE ( rom_restart_cal = 0x4000781c );
|
||||
PROVIDE ( rom_rfcal_pwrctrl = 0x40007eb4 );
|
||||
PROVIDE ( rom_rfcal_rxiq = 0x4000804c );
|
||||
PROVIDE ( rom_rfcal_rxiq_set_reg = 0x40008264 );
|
||||
PROVIDE ( rom_rfcal_txcap = 0x40008388 );
|
||||
PROVIDE ( rom_rfcal_txiq = 0x40008610 );
|
||||
PROVIDE ( rom_rfcal_txiq_cover = 0x400088b8 );
|
||||
PROVIDE ( rom_rfcal_txiq_set_reg = 0x40008a70 );
|
||||
PROVIDE ( rom_rfpll_reset = 0x40007868 );
|
||||
PROVIDE ( rom_rfpll_set_freq = 0x40007968 );
|
||||
PROVIDE ( rom_rxiq_cover_mg_mp = 0x40008b6c );
|
||||
PROVIDE ( rom_rxiq_get_mis = 0x40006628 );
|
||||
PROVIDE ( rom_sar_init = 0x40006738 );
|
||||
PROVIDE ( rom_set_ana_inf_tx_scale = 0x4000678c );
|
||||
PROVIDE ( rom_set_channel_freq = 0x40006c50 );
|
||||
PROVIDE ( rom_set_loopback_gain = 0x400067c8 );
|
||||
PROVIDE ( rom_set_noise_floor = 0x40006830 );
|
||||
PROVIDE ( rom_set_rxclk_en = 0x40006550 );
|
||||
PROVIDE ( rom_set_txbb_atten = 0x40008c6c );
|
||||
PROVIDE ( rom_set_txclk_en = 0x4000650c );
|
||||
PROVIDE ( rom_set_txiq_cal = 0x40008d34 );
|
||||
PROVIDE ( rom_start_noisefloor = 0x40006874 );
|
||||
PROVIDE ( rom_start_tx_tone = 0x400068b4 );
|
||||
PROVIDE ( rom_stop_tx_tone = 0x4000698c );
|
||||
PROVIDE ( rom_tx_mac_disable = 0x40006a98 );
|
||||
PROVIDE ( rom_tx_mac_enable = 0x40006ad4 );
|
||||
PROVIDE ( rom_txtone_linear_pwr = 0x40006a1c );
|
||||
PROVIDE ( rom_write_rfpll_sdm = 0x400078dc );
|
||||
PROVIDE ( roundup2 = 0x400031b4 );
|
||||
PROVIDE ( rtc_enter_sleep = 0x40002870 );
|
||||
PROVIDE ( rtc_get_reset_reason = 0x400025e0 );
|
||||
PROVIDE ( rtc_intr_handler = 0x400029ec );
|
||||
PROVIDE ( rtc_set_sleep_mode = 0x40002668 );
|
||||
PROVIDE ( save_rxbcn_mactime = 0x400027a4 );
|
||||
PROVIDE ( save_tsf_us = 0x400027ac );
|
||||
PROVIDE ( send_packet = 0x40003c80 );
|
||||
PROVIDE ( sha1_prf = 0x4000ba48 );
|
||||
PROVIDE ( sha1_vector = 0x4000a2ec );
|
||||
PROVIDE ( sip_alloc_to_host_evt = 0x40005180 );
|
||||
PROVIDE ( sip_get_ptr = 0x400058a8 );
|
||||
PROVIDE ( sip_get_state = 0x40005668 );
|
||||
PROVIDE ( sip_init_attach = 0x4000567c );
|
||||
PROVIDE ( sip_install_rx_ctrl_cb = 0x4000544c );
|
||||
PROVIDE ( sip_install_rx_data_cb = 0x4000545c );
|
||||
PROVIDE ( sip_post = 0x400050fc );
|
||||
PROVIDE ( sip_post_init = 0x400056c4 );
|
||||
PROVIDE ( sip_reclaim_from_host_cmd = 0x4000534c );
|
||||
PROVIDE ( sip_reclaim_tx_data_pkt = 0x400052c0 );
|
||||
PROVIDE ( sip_send = 0x40005808 );
|
||||
PROVIDE ( sip_to_host_chain_append = 0x40005864 );
|
||||
PROVIDE ( sip_to_host_evt_send_done = 0x40005234 );
|
||||
PROVIDE ( slc_add_credits = 0x400060ac );
|
||||
PROVIDE ( slc_enable = 0x40005d90 );
|
||||
PROVIDE ( slc_from_host_chain_fetch = 0x40005f24 );
|
||||
PROVIDE ( slc_from_host_chain_recycle = 0x40005e94 );
|
||||
PROVIDE ( slc_init_attach = 0x40005c50 );
|
||||
PROVIDE ( slc_init_credit = 0x4000608c );
|
||||
PROVIDE ( slc_pause_from_host = 0x40006014 );
|
||||
PROVIDE ( slc_reattach = 0x40005c1c );
|
||||
PROVIDE ( slc_resume_from_host = 0x4000603c );
|
||||
PROVIDE ( slc_select_tohost_gpio = 0x40005dc0 );
|
||||
PROVIDE ( slc_select_tohost_gpio_mode = 0x40005db8 );
|
||||
PROVIDE ( slc_send_to_host_chain = 0x40005de4 );
|
||||
PROVIDE ( slc_set_host_io_max_window = 0x40006068 );
|
||||
PROVIDE ( slc_to_host_chain_recycle = 0x40005f10 );
|
||||
PROVIDE ( software_reset = 0x4000264c );
|
||||
PROVIDE ( spi_flash_attach = 0x40004644 );
|
||||
PROVIDE ( srand = 0x400005f0 );
|
||||
PROVIDE ( strcmp = 0x4000bdc8 );
|
||||
PROVIDE ( strcpy = 0x4000bec8 );
|
||||
PROVIDE ( strlen = 0x4000bf4c );
|
||||
PROVIDE ( strncmp = 0x4000bfa8 );
|
||||
PROVIDE ( strncpy = 0x4000c0a0 );
|
||||
PROVIDE ( strstr = 0x4000e1e0 );
|
||||
PROVIDE ( timer_insert = 0x40002c64 );
|
||||
PROVIDE ( uartAttach = 0x4000383c );
|
||||
PROVIDE ( uart_baudrate_detect = 0x40003924 );
|
||||
PROVIDE ( uart_buff_switch = 0x400038a4 );
|
||||
PROVIDE ( uart_div_modify = 0x400039d8 );
|
||||
PROVIDE ( uart_rx_intr_handler = 0x40003bbc );
|
||||
PROVIDE ( uart_rx_one_char = 0x40003b8c );
|
||||
PROVIDE ( uart_rx_one_char_block = 0x40003b64 );
|
||||
PROVIDE ( uart_rx_readbuff = 0x40003ec8 );
|
||||
PROVIDE ( uart_tx_one_char = 0x40003b30 );
|
||||
PROVIDE ( wepkey_128 = 0x4000bc40 );
|
||||
PROVIDE ( wepkey_64 = 0x4000bb3c );
|
||||
PROVIDE ( xthal_bcopy = 0x40000688 );
|
||||
PROVIDE ( xthal_copy123 = 0x4000074c );
|
||||
PROVIDE ( xthal_get_ccompare = 0x4000dd4c );
|
||||
PROVIDE ( xthal_get_ccount = 0x4000dd38 );
|
||||
PROVIDE ( xthal_get_interrupt = 0x4000dd58 );
|
||||
PROVIDE ( xthal_get_intread = 0x4000dd58 );
|
||||
PROVIDE ( xthal_memcpy = 0x400006c4 );
|
||||
PROVIDE ( xthal_set_ccompare = 0x4000dd40 );
|
||||
PROVIDE ( xthal_set_intclear = 0x4000dd60 );
|
||||
PROVIDE ( xthal_spill_registers_into_stack_nw = 0x4000e320 );
|
||||
PROVIDE ( xthal_window_spill = 0x4000e324 );
|
||||
PROVIDE ( xthal_window_spill_nw = 0x4000e320 );
|
||||
|
||||
PROVIDE ( Te0 = 0x3fffccf0 );
|
||||
PROVIDE ( Td0 = 0x3fffd100 );
|
||||
PROVIDE ( Td4s = 0x3fffd500);
|
||||
PROVIDE ( rcons = 0x3fffd0f0);
|
||||
PROVIDE ( UartDev = 0x3fffde10 );
|
||||
@ -1,322 +0,0 @@
|
||||
/**
|
||||
* This linker script is a modified version of eagle.app.v6.ld that
|
||||
* was generated from xt-genldscripts.tpp for LSP and shipped with
|
||||
* ESP8266_NONOS_SDK
|
||||
*/
|
||||
|
||||
/* Linker Script for ld -N */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||
dram0_0_seg : org = 0x3FFE8000, len = 0x14000
|
||||
iram1_0_seg : org = 0x40100000, len = 0x8000
|
||||
irom0_0_seg : org = 0x40210000, len = 0x5C000
|
||||
}
|
||||
|
||||
PHDRS
|
||||
{
|
||||
dport0_0_phdr PT_LOAD;
|
||||
dram0_0_phdr PT_LOAD;
|
||||
dram0_0_bss_phdr PT_LOAD;
|
||||
iram1_0_phdr PT_LOAD;
|
||||
irom0_0_phdr PT_LOAD;
|
||||
}
|
||||
|
||||
|
||||
/* Default entry point: */
|
||||
ENTRY(call_user_start)
|
||||
EXTERN(_DebugExceptionVector)
|
||||
EXTERN(_DoubleExceptionVector)
|
||||
EXTERN(_KernelExceptionVector)
|
||||
EXTERN(_NMIExceptionVector)
|
||||
EXTERN(_UserExceptionVector)
|
||||
PROVIDE(_memmap_vecbase_reset = 0x40000000);
|
||||
/* Various memory-map dependent cache attribute settings: */
|
||||
_memmap_cacheattr_wb_base = 0x00000110;
|
||||
_memmap_cacheattr_wt_base = 0x00000110;
|
||||
_memmap_cacheattr_bp_base = 0x00000220;
|
||||
_memmap_cacheattr_unused_mask = 0xFFFFF00F;
|
||||
_memmap_cacheattr_wb_trapnull = 0x2222211F;
|
||||
_memmap_cacheattr_wba_trapnull = 0x2222211F;
|
||||
_memmap_cacheattr_wbna_trapnull = 0x2222211F;
|
||||
_memmap_cacheattr_wt_trapnull = 0x2222211F;
|
||||
_memmap_cacheattr_bp_trapnull = 0x2222222F;
|
||||
_memmap_cacheattr_wb_strict = 0xFFFFF11F;
|
||||
_memmap_cacheattr_wt_strict = 0xFFFFF11F;
|
||||
_memmap_cacheattr_bp_strict = 0xFFFFF22F;
|
||||
_memmap_cacheattr_wb_allvalid = 0x22222112;
|
||||
_memmap_cacheattr_wt_allvalid = 0x22222112;
|
||||
_memmap_cacheattr_bp_allvalid = 0x22222222;
|
||||
PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
|
||||
|
||||
/* System task handling variables */
|
||||
/* source: disassembly of boot rom at https://github.com/trebisky/esp8266 */
|
||||
PROVIDE( ets_task_min_prio = 0x3fffc6fc );
|
||||
PROVIDE( ets_idle_cb = 0x3fffdab0 );
|
||||
PROVIDE( ets_idle_arg = 0x3fffdab4 );
|
||||
PROVIDE( ets_task_exec_mask = 0x3fffdab8 );
|
||||
PROVIDE( ets_task_tab = 0x3fffdac0 );
|
||||
PROVIDE( flashchip = 0x3fffc714 );
|
||||
PROVIDE( sdk_flashchip = 0x3fffc718 );
|
||||
PROVIDE( _xt_interrupt_table = 0x3fffc200 );
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
|
||||
.dport0.rodata : ALIGN(4)
|
||||
{
|
||||
_dport0_rodata_start = ABSOLUTE(.);
|
||||
*(.dport0.rodata)
|
||||
*(.dport.rodata)
|
||||
_dport0_rodata_end = ABSOLUTE(.);
|
||||
} >dport0_0_seg :dport0_0_phdr
|
||||
|
||||
.dport0.literal : ALIGN(4)
|
||||
{
|
||||
_dport0_literal_start = ABSOLUTE(.);
|
||||
*(.dport0.literal)
|
||||
*(.dport.literal)
|
||||
_dport0_literal_end = ABSOLUTE(.);
|
||||
} >dport0_0_seg :dport0_0_phdr
|
||||
|
||||
.dport0.data : ALIGN(4)
|
||||
{
|
||||
_dport0_data_start = ABSOLUTE(.);
|
||||
*(.dport0.data)
|
||||
*(.dport.data)
|
||||
_dport0_data_end = ABSOLUTE(.);
|
||||
} >dport0_0_seg :dport0_0_phdr
|
||||
|
||||
.data : ALIGN(4)
|
||||
{
|
||||
_data_start = ABSOLUTE(.);
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
*(.data1)
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.jcr)
|
||||
_data_end = ABSOLUTE(.);
|
||||
} >dram0_0_seg :dram0_0_phdr
|
||||
|
||||
/*
|
||||
* .rodata sections that are placed in RAM
|
||||
*
|
||||
* Usually, all .rodata sections are placed in RAM by the Espressif SDK
|
||||
* since IROM (flash) access requires 32-bit word aligned reads.
|
||||
*
|
||||
* However, thanks to the LoadStoreError handler from esp-open-rtos which is
|
||||
* also used in RIOT-OS, it is possible to place .rodata sections in IROM
|
||||
* (flash) to save RAM resources.
|
||||
*
|
||||
* Only .rodata data sections of compilation units that may be executed
|
||||
* while SPI flash is not mapped have to be stored in RAM. These are IRAM
|
||||
* functions that are called from interrupt context or SPI flash management
|
||||
* functions. Such compilation units have to be listed here.
|
||||
*
|
||||
* Furthermore, compilation units with constant data that are performance-
|
||||
* critical should be listed here as well.
|
||||
*/
|
||||
|
||||
.rodata : ALIGN(4)
|
||||
{
|
||||
_rodata_start = ABSOLUTE(.);
|
||||
*(.sdk.version)
|
||||
|
||||
*core.a:*(.rodata.* .rodata)
|
||||
*cpu.a:*(.rodata .rodata.*)
|
||||
*esp.a:*(.rodata .rodata.*)
|
||||
*esp_now.a:*(.rodata .rodata.*)
|
||||
*esp_wifi.a:*(.rodata .rodata.*)
|
||||
*periph.a:*(.rodata.* .rodata)
|
||||
*sdk.a:*(.rodata .rodata.*)
|
||||
*xtensa.a:*(.rodata .rodata.*)
|
||||
|
||||
*libc.a:*.o(.rodata.* .rodata)
|
||||
*libpp.a:wdev.o(.rodata.* .rodata)
|
||||
*libmain.a:spi_flash.o(.rodata.* .rodata)
|
||||
|
||||
*(.gnu.linkonce.r.*)
|
||||
*(.rodata1)
|
||||
__XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
|
||||
*(.xt_except_table)
|
||||
*(.gcc_except_table)
|
||||
*(.gnu.linkonce.e.*)
|
||||
*(.gnu.version_r)
|
||||
*(.eh_frame)
|
||||
/* C++ constructor and destructor tables, properly ordered: */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
/* C++ exception handlers table: */
|
||||
__XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
|
||||
*(.xt_except_desc)
|
||||
*(.gnu.linkonce.h.*)
|
||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
||||
*(.xt_except_desc_end)
|
||||
*(.dynamic)
|
||||
*(.gnu.version_d)
|
||||
. = ALIGN(4); /* this table MUST be 4-byte aligned */
|
||||
_bss_table_start = ABSOLUTE(.);
|
||||
LONG(_bss_start)
|
||||
LONG(_bss_end)
|
||||
_bss_table_end = ABSOLUTE(.);
|
||||
_rodata_end = ABSOLUTE(.);
|
||||
} >dram0_0_seg :dram0_0_phdr
|
||||
|
||||
.bss ALIGN(8) (NOLOAD) : ALIGN(4)
|
||||
{
|
||||
. = ALIGN (8);
|
||||
_bss_start = ABSOLUTE(.);
|
||||
*(.dynsbss)
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
|
||||
. = ALIGN (8);
|
||||
_bss_end = ABSOLUTE(.);
|
||||
_sheap = ABSOLUTE(.);
|
||||
_heap_start = ABSOLUTE(.);
|
||||
|
||||
} >dram0_0_seg :dram0_0_bss_phdr
|
||||
|
||||
/* ETS system memory starts at 0x3FFFC000 which is the top of the heap for the app */
|
||||
. = 0x3FFFC000;
|
||||
_heap_top = ABSOLUTE(.);
|
||||
_eheap = ABSOLUTE(.);
|
||||
|
||||
.text : ALIGN(4)
|
||||
{
|
||||
_stext = .;
|
||||
_text_start = ABSOLUTE(.);
|
||||
*(.UserEnter.text)
|
||||
. = ALIGN(16);
|
||||
*(.DebugExceptionVector.text)
|
||||
. = ALIGN(16);
|
||||
*(.NMIExceptionVector.text)
|
||||
. = ALIGN(16);
|
||||
*(.KernelExceptionVector.text)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
. = ALIGN(16);
|
||||
*(.UserExceptionVector.text)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
. = ALIGN(16);
|
||||
*(.DoubleExceptionVector.text)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
. = ALIGN (16);
|
||||
*(.UserExceptionTrampoline.text)
|
||||
. = ALIGN (16);
|
||||
*(.entry.text)
|
||||
*(.init.literal)
|
||||
*(.init)
|
||||
|
||||
/* normal code should be in irom0 */
|
||||
/*
|
||||
*(.literal .text .literal.* .text.* .stub)
|
||||
*(.gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
||||
*/
|
||||
|
||||
/* RIOT-OS compiled source files that use the .iram1.* section names for IRAM
|
||||
functions, etc. */
|
||||
*(.iram1.*)
|
||||
|
||||
/* SDK libraries expect their .text sections to link to iram, not irom */
|
||||
*libcrypto.a:*(.literal .text)
|
||||
*libmain.a:*(.literal .text .literal.* .text.*)
|
||||
*libnet80211.a:*(.literal .text)
|
||||
*libpp.a:*(.literal .text .literal.* .text.*)
|
||||
*libphy.a:*(.literal .text .literal.* .text.*)
|
||||
*libwpa.a:*(.literal .text)
|
||||
*libwpa2.a:*(.literal .text)
|
||||
*liblwip.a:*(.literal .text)
|
||||
|
||||
/* Xtensa basic functionality written in assembler should be placed in iram */
|
||||
*xtensa.a:*(.literal .text .literal.* .text.*)
|
||||
|
||||
/* libgcc integer functions also need to be in .text, as some are called before
|
||||
flash is mapped (also performance) */
|
||||
*libgcc.a:*i3.o(.literal .text .literal.* .text.*)
|
||||
|
||||
*libgcc.a:*mulsf3.o(.literal .text .literal.* .text.*)
|
||||
*libgcc.a:*divsf3.o(.literal .text .literal.* .text.*)
|
||||
*libgcc.a:*fixsfsi.o(.literal .text .literal.* .text.*)
|
||||
|
||||
/* libc also in IRAM */
|
||||
*libc.a:*malloc.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*mallocr.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*freer.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*memchr.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*memcpy.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*memset.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*memcmp.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*memmove.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*rand.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*bzero.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*lock.o(.literal .text .literal.* .text.*)
|
||||
|
||||
*libc.a:*findfp.o(.literal .text .literal.* .text.*)
|
||||
*libc.a:*fputwc.o(.literal .text .literal.* .text.*)
|
||||
|
||||
enc28j60.a:*(.literal .text .literal.* .text.*)
|
||||
|
||||
*(.fini.literal)
|
||||
*(.fini)
|
||||
*(.gnu.version)
|
||||
_text_end = ABSOLUTE(.);
|
||||
_etext = .;
|
||||
} >iram1_0_seg :iram1_0_phdr
|
||||
|
||||
.irom0.text : ALIGN(4)
|
||||
{
|
||||
_irom0_text_start = ABSOLUTE(.);
|
||||
|
||||
*libmbedtls.a:(.literal .text .literal.* .text.*)
|
||||
|
||||
/* RIOT-OS compiled code goes into IROM by default
|
||||
(except for functions with section names defined in .text above.) */
|
||||
*(.literal .text .literal.* .text.* .rodata .rodata.*)
|
||||
|
||||
/* Anything explicitly marked as "irom" or "irom0" should go here */
|
||||
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
||||
|
||||
_irom0_text_end = ABSOLUTE(.);
|
||||
} >irom0_0_seg :irom0_0_phdr
|
||||
|
||||
.lit4 : ALIGN(4)
|
||||
{
|
||||
_lit4_start = ABSOLUTE(.);
|
||||
*(*.lit4)
|
||||
*(.lit4.*)
|
||||
*(.gnu.linkonce.lit4.*)
|
||||
_lit4_end = ABSOLUTE(.);
|
||||
} >iram1_0_seg :iram1_0_phdr
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions and functions for peripheral handling
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
*/
|
||||
|
||||
#define ENABLE_DEBUG 0
|
||||
#include "debug.h"
|
||||
|
||||
#include "periph_cpu.h"
|
||||
@ -1,198 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*
|
||||
* PLEASE NOTE: This file is only used in SDK version
|
||||
*/
|
||||
|
||||
/*
|
||||
* Internally, the SDK uses its own priority-based multitasking system,
|
||||
* the *ETS*, to handle hardware components such as the WiFi interface, or to
|
||||
* implement event-driven functions such as software timers. ETS periodically
|
||||
* executes all ETS tasks with pending events in an infinite loop with the ROM
|
||||
* function *ets_run*.
|
||||
*
|
||||
* ETS doesn't process interrupts directly in interrupt service routines.
|
||||
* Instead, they use the *ets_post* ROM function to send an event to one of the
|
||||
* ETS tasks, which then processes the interrupts asynchronously. Context
|
||||
* switches are not possible in interrupt service routines.
|
||||
*
|
||||
* To use SDK functions and keep the system alive, ETS tasks with pending
|
||||
* events have to be handled. For that purpose
|
||||
*
|
||||
* - the *ets_task_func* RIOT thread with highest possible priority is used
|
||||
* - the ROM functions *ets_run* and *ets_post* are overwritten.
|
||||
*
|
||||
* The *ets_task_func* RIOT thread is waiting for a thread flag, which is set
|
||||
* by the *ets_post function* at the end of an ETS interrupt service routine.
|
||||
* The flag indicates that there are ETS tasks with pending events that need
|
||||
* to be executed. The *ets_task_func* RIOT thread then calls the *ets_run*
|
||||
* function, which performs all ETS tasks with pending events exactly once.
|
||||
*
|
||||
* Thus, when a hardware component used by the SDK triggers an interrupt, e.g.
|
||||
* the WiFi interface, the interrupt sevice routine posts an event to the ETS
|
||||
* task by calling the *ets_post* function. The overwritten version of this
|
||||
* function sets the thread flag of the *ets_task_func* thread. The thread
|
||||
* then calls function *ets_run* to process pending events.
|
||||
*/
|
||||
|
||||
#ifdef MODULE_ESP_SDK
|
||||
|
||||
#define ENABLE_DEBUG 0
|
||||
#include <stdio.h>
|
||||
|
||||
#include "irq_arch.h"
|
||||
#include "mutex.h"
|
||||
#include "thread.h"
|
||||
|
||||
#include "esp/common_macros.h"
|
||||
#include "sdk/ets_task.h"
|
||||
#include "sdk/sdk.h"
|
||||
|
||||
static uint8_t min_prio = 0;
|
||||
|
||||
/* helper function for *ets_run* */
|
||||
uint8_t ets_highest_1_bit (uint32_t mask)
|
||||
{
|
||||
__asm__ volatile ("nsau %0, %1;" :"=r"(mask) : "r"(mask));
|
||||
return 32 - mask;
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform the execution of all pending ETS tasks. This is necessary to
|
||||
* keep the underlying ETS system used by the SDK alive. It is called from
|
||||
* the RIOT thread *ets_task_func*.
|
||||
*/
|
||||
void IRAM ets_tasks_run (void)
|
||||
{
|
||||
#if ENABLE_DEBUG
|
||||
uint32_t _entry = phy_get_mactime();
|
||||
uint32_t _exit;
|
||||
ets_printf("ets_tasks_run @%lu\n", _entry);
|
||||
#endif
|
||||
|
||||
/* reset hardware watchdog here */
|
||||
system_soft_wdt_feed();
|
||||
|
||||
while (1) {
|
||||
uint8_t hbit;
|
||||
int state = irq_disable();
|
||||
hbit = ets_highest_1_bit (ets_task_exec_mask);
|
||||
if (min_prio < hbit) {
|
||||
ets_task_tcb_t* task = &ets_task_tab[hbit-1];
|
||||
ETSEvent * event = &task->queue[task->qposr++];
|
||||
if (task->qposr == task->qlength) {
|
||||
task->qposr = 0;
|
||||
}
|
||||
if (--task->qpending == 0) {
|
||||
ets_task_exec_mask &= ~task->maskbit;
|
||||
}
|
||||
ets_task_min_prio = hbit;
|
||||
irq_restore(state);
|
||||
task->task(event);
|
||||
ets_task_min_prio = min_prio;
|
||||
}
|
||||
else {
|
||||
irq_restore(state);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if ENABLE_DEBUG
|
||||
_exit = phy_get_mactime();
|
||||
ets_printf("ets_tasks_run @%lu for %lu us\n", _entry, _exit - _entry);
|
||||
#endif
|
||||
|
||||
/* reset hardware watchdog here again */
|
||||
system_soft_wdt_feed();
|
||||
}
|
||||
|
||||
|
||||
#define THREAD_FLAG_ETS_THREAD (1 << 0)
|
||||
static volatile thread_t* ets_thread = NULL;
|
||||
|
||||
/*
|
||||
* Thread *ets_task_func* is waiting for the thread flag THREAD_FLAG_ETS_THREAD
|
||||
* indicating that ETS tasks have pending events and need to be executed. When
|
||||
* the thread flag is set, it calls the *ets_run* function, which performs
|
||||
* all ETS tasks with pending events exactly once. The thread flag is set by
|
||||
* the *ets_post* function, which is called at the end of an ETS interrupt
|
||||
* service routine.
|
||||
*/
|
||||
void *ets_task_func(void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
|
||||
ets_thread = sched_active_thread;
|
||||
while (1) {
|
||||
thread_flags_wait_one(THREAD_FLAG_ETS_THREAD);
|
||||
ets_tasks_run();
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* helper macro for *ets_post */
|
||||
#define irom_cache_enabled() (*((uint32_t*)0x60000208) & (1 << 17))
|
||||
|
||||
/* ETS timer task priority */
|
||||
#define TIMER_TASK_PRIORITY 31
|
||||
|
||||
/* reference to the *ets_post* ROM function */
|
||||
typedef uint32_t (*ets_post_function_t)(uint32_t prio, ETSSignal sig, ETSParam par);
|
||||
static ets_post_function_t ets_post_rom = (ets_post_function_t)0x40000e24;
|
||||
|
||||
/*
|
||||
* Overwritten version of ROM function *ets_post*.
|
||||
*
|
||||
* ETS doesn't process interrupts directly in interrupt service routines.
|
||||
* Instead, they use the *ets_post* ROM function to send an event to one of the
|
||||
* ETS tasks, which then processes the interrupts asynchronously. Context
|
||||
* switches are not possible in interrupt service routines.
|
||||
*
|
||||
* Please note: *ets_post* is executed in interrupt context
|
||||
*/
|
||||
uint32_t IRAM ets_post (uint32_t prio, ETSSignal sig, ETSParam par)
|
||||
{
|
||||
/* This function is executed in interrupt context */
|
||||
uint32_t ret;
|
||||
|
||||
critical_enter();
|
||||
|
||||
/* test whether we are in hardware timer interrupt handling routine */
|
||||
if (prio == TIMER_TASK_PRIORITY) {
|
||||
/* first call ETS system post function */
|
||||
ret = ets_post_rom (prio, sig, par);
|
||||
|
||||
/* handle only pending timer events */
|
||||
if (irom_cache_enabled()) {
|
||||
ets_timer_handler_isr();
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* simply call ROM ets_post function */
|
||||
ret = ets_post_rom (prio, sig, par);
|
||||
}
|
||||
/* since only timer events are handled we have to reset watch dog timer */
|
||||
if (irom_cache_enabled()) {
|
||||
system_soft_wdt_feed();
|
||||
}
|
||||
|
||||
if (ets_thread && irom_cache_enabled()) {
|
||||
thread_flags_set((thread_t*)ets_thread, THREAD_FLAG_ETS_THREAD);
|
||||
}
|
||||
|
||||
critical_exit();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ets_tasks_init(void)
|
||||
{
|
||||
/* there is nothing to be done here at the moment */
|
||||
}
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
@ -1,61 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
#ifndef ETS_TASK_H
|
||||
#define ETS_TASK_H
|
||||
|
||||
#ifndef DOXYGEN
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_ESP_SDK
|
||||
|
||||
#include "ets_sys.h"
|
||||
|
||||
extern uint8_t ets_task_min_prio;
|
||||
|
||||
/* Task control block definition as used for ETS task functions */
|
||||
|
||||
typedef struct {
|
||||
ETSTask task; /* +0 task function */
|
||||
ETSEvent* queue; /* +4 event queue (ring buffer) */
|
||||
uint8_t qlength; /* +8 event queue length */
|
||||
uint8_t qposw; /* +9 event queue position for write */
|
||||
uint8_t qposr; /* +10 event queue position for read */
|
||||
uint8_t qpending; /* +11 pending events */
|
||||
uint32_t maskbit; /* +12 task mask bit */
|
||||
} ets_task_tcb_t;
|
||||
|
||||
/* ROM variables, defined in esp8266.riot-os.app.ld */
|
||||
/* source: disassembly of boot rom at https://github.com/trebisky/esp8266 */
|
||||
|
||||
extern uint8_t ets_task_min_prio; /* 0x3fffc6fc */
|
||||
extern void* ets_idle_cb; /* 0x3fffdab0 */
|
||||
extern void* ets_idle_arg; /* 0x3fffdab4 */
|
||||
extern uint32_t ets_task_exec_mask; /* 0x3fffdab8 */
|
||||
extern ets_task_tcb_t ets_task_tab[32]; /* 0x3fffdac0 */
|
||||
|
||||
extern uint32_t ets_post (uint32_t prio, ETSSignal sig, ETSParam par);
|
||||
|
||||
void ets_tasks_run (void);
|
||||
void ets_tasks_init (void);
|
||||
|
||||
#else /* MODULE_ESP_SDK */
|
||||
|
||||
#define ets_tasks_run()
|
||||
#define ets_tasks_init()
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DOXYGEN */
|
||||
#endif /* ETS_TASK_H */
|
||||
@ -1,220 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief lwIP functions required as symbols by the SDK
|
||||
*
|
||||
* This file defines a number of lwIP functions that are required as symbols by
|
||||
* Espressif's SDK libraries. Since RIOT doesn't need lwIP, these functions are
|
||||
* only dummies without real functionality. Using these functions instead of
|
||||
* the lwIP functions as provided with the SDK saves arround 4 kBytes of RAM.
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef MODULE_ESP_SDK
|
||||
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "lwip/tcp_impl.h"
|
||||
#include "netif/etharp.h"
|
||||
|
||||
#define ENABLE_DEBUG (0)
|
||||
#include "debug.h"
|
||||
#include "log.h"
|
||||
|
||||
#ifndef ERR_OK
|
||||
#define ERR_OK 0
|
||||
#endif
|
||||
|
||||
const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}};
|
||||
|
||||
err_t ethernet_input(struct pbuf *pb, struct netif* netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)pb;
|
||||
(void)netif;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
err_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
(void)q;
|
||||
(void)ipaddr;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
err_t etharp_request(struct netif *netif, ip_addr_t *ipaddr)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
(void)ipaddr;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void etharp_tmr(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
void etharp_cleanup_netif(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
}
|
||||
|
||||
void dhcp_cleanup(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
}
|
||||
|
||||
err_t dhcp_start(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
err_t dhcp_renew(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
err_t dhcp_release(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void dhcp_stop(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
}
|
||||
|
||||
void dhcp_network_changed(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
}
|
||||
|
||||
void dhcp_coarse_tmr(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
void dhcp_fine_tmr(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
void dhcps_start(struct ip_info *info)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)info;
|
||||
}
|
||||
|
||||
void dhcps_stop(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
void dhcps_coarse_tmr(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
union tcp_listen_pcbs_t tcp_listen_pcbs;
|
||||
struct tcp_pcb *tcp_active_pcbs;
|
||||
struct tcp_pcb *tcp_tw_pcbs;
|
||||
|
||||
void tcp_seg_free(struct tcp_seg *seg)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)seg;
|
||||
}
|
||||
|
||||
void tcp_abort (struct tcp_pcb *pcb)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)pcb;
|
||||
}
|
||||
|
||||
void tcp_tmr(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
void igmp_init(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
err_t igmp_start(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
err_t igmp_stop(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void igmp_report_groups(struct netif *netif)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)netif;
|
||||
}
|
||||
|
||||
void igmp_tmr(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
void dns_init(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
void dns_tmr(void)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
}
|
||||
|
||||
uint32_t espconn_init(uint32 arg)
|
||||
{
|
||||
DEBUG("%s\n", __func__);
|
||||
(void)arg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern struct netif * eagle_lwip_getif(uint8_t index);
|
||||
|
||||
void esp_lwip_init(void)
|
||||
{
|
||||
netif_set_default((struct netif *)eagle_lwip_getif(0));
|
||||
}
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
@ -1,202 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 SDK libmain function
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "c_types.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "cpu_conf.h"
|
||||
#include "irq.h"
|
||||
#include "irq_arch.h"
|
||||
#include "log.h"
|
||||
|
||||
#include "esp/rtcmem_regs.h"
|
||||
#include "spi_flash.h"
|
||||
#include "sdk/ets.h"
|
||||
#include "sdk/main.h"
|
||||
#include "sdk/rom.h"
|
||||
|
||||
static char _printf_buf[PRINTF_BUFSIZ];
|
||||
|
||||
int IRAM os_printf_plus (const char* format, ...)
|
||||
{
|
||||
va_list arglist;
|
||||
va_start(arglist, format);
|
||||
|
||||
int ret = vsnprintf(_printf_buf, PRINTF_BUFSIZ, format, arglist);
|
||||
|
||||
if (ret > 0) {
|
||||
ets_printf (_printf_buf);
|
||||
}
|
||||
|
||||
va_end(arglist);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
SpiFlashOpResult IRAM spi_flash_read (uint32_t faddr, uint32_t *dst, size_t size)
|
||||
{
|
||||
/*
|
||||
* For simplicity, we use the ROM function. Since we need to disable the
|
||||
* IROM cache function for that purpose, we have to be IRAM.
|
||||
* Please note, faddr, src and size have to be aligned to 4 byte.
|
||||
*/
|
||||
|
||||
SpiFlashOpResult ret;
|
||||
|
||||
CHECK_PARAM_RET (dst != NULL, SPI_FLASH_RESULT_ERR);
|
||||
CHECK_PARAM_RET (faddr + size <= flashchip->chip_size, SPI_FLASH_RESULT_ERR);
|
||||
|
||||
critical_enter ();
|
||||
Cache_Read_Disable ();
|
||||
|
||||
ret = SPIRead (faddr, dst, size);
|
||||
|
||||
Cache_Read_Enable(0, 0, 1);
|
||||
critical_exit ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
SpiFlashOpResult IRAM spi_flash_write (uint32_t faddr, uint32_t *src, size_t size)
|
||||
{
|
||||
/*
|
||||
* For simplicity, we use the ROM function. Since we need to disable the
|
||||
* IROM cache function for that purpose, we have to be in IRAM.
|
||||
* Please note, faddr, src and size have to be aligned to 4 byte
|
||||
*/
|
||||
|
||||
SpiFlashOpResult ret;
|
||||
|
||||
CHECK_PARAM_RET (src != NULL, SPI_FLASH_RESULT_ERR);
|
||||
CHECK_PARAM_RET (faddr + size <= flashchip->chip_size, SPI_FLASH_RESULT_ERR);
|
||||
|
||||
critical_enter ();
|
||||
Cache_Read_Disable ();
|
||||
|
||||
ret = SPIWrite (faddr, src, size);
|
||||
|
||||
Cache_Read_Enable(0, 0, 1);
|
||||
critical_exit ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
SpiFlashOpResult IRAM spi_flash_erase_sector(uint16_t sec)
|
||||
{
|
||||
CHECK_PARAM_RET (sec < flashchip->chip_size / flashchip->sector_size, SPI_FLASH_RESULT_ERR);
|
||||
|
||||
critical_enter ();
|
||||
Cache_Read_Disable();
|
||||
|
||||
SpiFlashOpResult ret = SPIEraseSector (sec);
|
||||
|
||||
Cache_Read_Enable(0, 0, 1);
|
||||
critical_exit ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void system_deep_sleep(uint32_t time_in_us)
|
||||
{
|
||||
/* TODO implement */
|
||||
(void)time_in_us;
|
||||
NOT_YET_IMPLEMENTED();
|
||||
}
|
||||
|
||||
void system_restart(void)
|
||||
{
|
||||
/* TODO it's just a hard reset at the moment */
|
||||
__asm__ volatile (" call0 0x40000080 ");
|
||||
}
|
||||
|
||||
extern bool system_update_cpu_freq(uint8 freq)
|
||||
{
|
||||
if (freq == 160) {
|
||||
DPORT.CPU_CLOCK |= DPORT_CPU_CLOCK_X2;
|
||||
ets_update_cpu_frequency(160);
|
||||
}
|
||||
else {
|
||||
DPORT.CPU_CLOCK &= ~DPORT_CPU_CLOCK_X2;
|
||||
ets_update_cpu_frequency(80);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Following code is completly or at least partially from
|
||||
* https://github.com/pvvx/esp8266web
|
||||
* (c) PV` 2015
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
uint8_t ICACHE_FLASH_ATTR system_get_checksum(uint8_t *ptr, uint32_t len)
|
||||
{
|
||||
uint8_t checksum = 0xEF;
|
||||
while (len--) {
|
||||
checksum ^= *ptr++;
|
||||
}
|
||||
return checksum;
|
||||
}
|
||||
|
||||
#define RTCMEM_SIZE 0x300 /* user RTC RAM 768 bytes, 192 dword registers */
|
||||
|
||||
static bool IRAM _system_rtc_mem_access (uint32_t src, void *dst, uint32_t size, bool write)
|
||||
{
|
||||
/* src hast to be smaller than 192 */
|
||||
CHECK_PARAM_RET (src <= (RTCMEM_SIZE >> 2), false);
|
||||
/* src times 4 plus size must less than RTCMEM_SIZE */
|
||||
CHECK_PARAM_RET (((src << 2) + size) < RTCMEM_SIZE, false);
|
||||
/* des_addr has to be a multiple of 4 */
|
||||
CHECK_PARAM_RET (((uint32_t)dst & 0x3) == 0, false);
|
||||
|
||||
/* align size to next higher multiple of 4 */
|
||||
if (size & 0x3) {
|
||||
size = (size + 4) & ~0x3;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < (size >> 2); i++) {
|
||||
if (write) {
|
||||
RTCMEM_SYSTEM[src + i] = ((uint32_t*)dst)[i];
|
||||
}
|
||||
else {
|
||||
((uint32_t*)dst)[i] = RTCMEM_SYSTEM[src + i];
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IRAM system_rtc_mem_read (uint32_t src_addr, void *des_addr, uint32_t save_size)
|
||||
{
|
||||
return _system_rtc_mem_access (src_addr, des_addr, save_size, false);
|
||||
}
|
||||
|
||||
bool IRAM system_rtc_mem_write (uint32_t src_addr, void *des_addr, uint32_t save_size)
|
||||
{
|
||||
return _system_rtc_mem_access (src_addr, des_addr, save_size, true);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
@ -1,65 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 SDK libmain function prototypes
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
|
||||
#ifndef DOXYGEN
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "c_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
#include "esp/dport_regs.h"
|
||||
|
||||
/*
|
||||
* The following functions are mappings or dummies for source code
|
||||
* compatibility of SDK and NON-SDK version
|
||||
*/
|
||||
|
||||
#define system_get_time phy_get_mactime
|
||||
#define system_get_chip_id() (((DPORT.OTP_MAC1 & 0xffff) << 8) + ((DPORT.OTP_MAC0 >> 24) & 0xff))
|
||||
#define system_get_cpu_freq ets_get_cpu_frequency
|
||||
|
||||
extern int os_printf_plus (const char* format, ...);
|
||||
|
||||
extern void system_deep_sleep (uint32_t time_in_us);
|
||||
extern uint8_t system_get_checksum(uint8_t *ptr, uint32_t len);
|
||||
extern void system_restart (void);
|
||||
extern bool system_update_cpu_freq(uint8 freq);
|
||||
|
||||
extern bool system_rtc_mem_read(uint32_t src_addr, void *des_addr, uint32_t save_size);
|
||||
extern bool system_rtc_mem_write(uint32_t src_addr, void *des_addr, uint32_t save_size);
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
|
||||
extern void NmiTimSetFunc(void (*func)(void));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DOXYGEN */
|
||||
#endif /* MAIN_H */
|
||||
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 SDK libphy functions
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
|
||||
#include "sdk/phy.h"
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 other ROM functions
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
|
||||
#include "sdk/pp.h"
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
@ -1,46 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 SDK libpp function prototypes
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef PP_H
|
||||
#define PP_H
|
||||
|
||||
#ifndef DOXYGEN
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "c_types.h"
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
/*
|
||||
* The following functions are mappings or dummies for source code
|
||||
* compatibility of SDK and NON-SDK version
|
||||
*/
|
||||
|
||||
#define system_soft_wdt_feed()
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DOXYGEN */
|
||||
#endif /* PP_H */
|
||||
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 other ROM functions
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
|
||||
#include "sdk/rom.h"
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
@ -1,95 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 other ROM function prototypes
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef ROM_H
|
||||
#define ROM_H
|
||||
|
||||
#ifndef DOXYGEN
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "c_types.h"
|
||||
#include "spi_flash.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
/*
|
||||
* The following functions are mappings or dummies for source code
|
||||
* compatibility of SDK and NON-SDK version
|
||||
*/
|
||||
|
||||
extern uint8_t rom_i2c_readReg(uint32_t block, uint32_t host_id, uint32_t reg_add);
|
||||
extern uint8_t rom_i2c_readReg_Mask(uint32_t block, uint32_t host_id,
|
||||
uint32_t reg_add,uint32_t Msb, uint32_t Lsb);
|
||||
extern void rom_i2c_writeReg (uint32_t block, uint32_t host_id,
|
||||
uint32_t reg_add, uint32_t data);
|
||||
extern void rom_i2c_writeReg_Mask(uint32_t block, uint32_t host_id,
|
||||
uint32_t reg_add, uint32_t Msb, uint32_t Lsb,
|
||||
uint32_t indata);
|
||||
|
||||
extern uint32_t rtc_get_reset_reason(void);
|
||||
|
||||
#endif /* MODULE_ESP_SDK */
|
||||
|
||||
/* pointer to flash chip data structure */
|
||||
extern SpiFlashChip* flashchip;
|
||||
|
||||
extern SpiFlashOpResult spi_flash_attach(void);
|
||||
|
||||
void Cache_Read_Disable(void);
|
||||
void Cache_Read_Enable (uint32_t odd_even, uint32_t mb_count, uint32_t no_idea);
|
||||
|
||||
SpiFlashOpResult Wait_SPI_Idle(SpiFlashChip *chip);
|
||||
SpiFlashOpResult SPI_write_enable(SpiFlashChip *chip);
|
||||
|
||||
SpiFlashOpResult SPIEraseArea (uint32_t off, size_t len);
|
||||
SpiFlashOpResult SPIEraseBlock (uint32_t num);
|
||||
SpiFlashOpResult SPIEraseSector(uint32_t num);
|
||||
SpiFlashOpResult SPIEraseChip (void);
|
||||
|
||||
SpiFlashOpResult SPILock (void);
|
||||
SpiFlashOpResult SPIUnlock(void);
|
||||
|
||||
SpiFlashOpResult SPIRead (uint32_t off, uint32_t *dst, size_t size);
|
||||
SpiFlashOpResult SPIWrite (uint32_t off, const uint32_t *src, size_t size);
|
||||
|
||||
int SPIReadModeCnfig (uint32_t);
|
||||
|
||||
/* set elements of flashchip, see struct SpiFlashChip; */
|
||||
SpiFlashOpResult SPIParamCfg (uint32_t deviceId,
|
||||
uint32_t chip_size,
|
||||
uint32_t block_size,
|
||||
uint32_t sector_size,
|
||||
uint32_t page_size,
|
||||
uint32_t status_mask);
|
||||
|
||||
extern void uartAttach (void);
|
||||
extern void uart_div_modify(uint8 uart_no, uint32_t DivLatchValue);
|
||||
extern void Uart_Init (uint8 uart_no);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DOXYGEN */
|
||||
#endif /* ROM_H */
|
||||
@ -1,64 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Gunar Schorcht
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_esp8266_sdk
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief ESP8266 user defined SDK functions
|
||||
*
|
||||
* @author Gunar Schorcht <gunar@schorcht.net>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "c_types.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "cpu_conf.h"
|
||||
|
||||
#include "esp/uart_regs.h"
|
||||
#include "spi_flash.h"
|
||||
#include "sdk/rom.h"
|
||||
#include "sdk/user.h"
|
||||
|
||||
uint32_t __attribute__((weak)) user_rf_cal_sector_set(void)
|
||||
{
|
||||
uint32_t sec_num = flashchip->chip_size / flashchip->sector_size;
|
||||
return sec_num - 5;
|
||||
}
|
||||
|
||||
#ifndef MODULE_ESP_SDK
|
||||
|
||||
void uart_tx_flush (uint32_t num)
|
||||
{
|
||||
while ((UART(num).STATUS >> UART_STATUS_TXFIFO_COUNT_S) & UART_STATUS_TXFIFO_COUNT_M) {}
|
||||
}
|
||||
|
||||
/**
|
||||
* Following code is completly or at least partially from
|
||||
* https://github.com/pvvx/esp8266web
|
||||
* (c) PV` 2015
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
void IRAM system_set_pll (uint8_t crystal_26m_en)
|
||||
{
|
||||
if(rom_i2c_readReg(103,4,1) != 136) { /* 8: 40MHz, 136: 26MHz */
|
||||
if (crystal_26m_en == 1) { /* 0: 40MHz, 1: 26MHz */
|
||||
/* set 80MHz PLL CPU */
|
||||
rom_i2c_writeReg(103,4,1,136);
|
||||
rom_i2c_writeReg(103,4,2,145);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
3
cpu/esp8266/vendor/esp/Makefile
vendored
3
cpu/esp8266/vendor/esp/Makefile
vendored
@ -1,3 +0,0 @@
|
||||
MODULE=esp
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
||||
Loading…
x
Reference in New Issue
Block a user