Skip to content

Commit

Permalink
register and clock changes
Browse files Browse the repository at this point in the history
  • Loading branch information
John Doe authored and John Doe committed Jun 1, 2015
1 parent ae055f9 commit a6e8697
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 49 deletions.
17 changes: 8 additions & 9 deletions docs/rgisters_dump.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
0x3FF00000 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00004 | 00000000000000000000000000000101 | 0x00000005 | 5 | | TEIE
0x3FF00008 | 00000000000000000000100000001111 | 0x0000080F | 2063 | . |
0x3FF0000C | 00000100000000000000000100000010 | 0x04000102 | 67109122 | |
0x3FF0000C | 00000100000000000000000100000010 | 0x04000102 | 67109122 | | SPIRDY
0x3FF00010 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00014 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00014 | 00000000000000000000000000000000 | 0x00000000 | 0 | | CPU2X
0x3FF00018 | 11111111111111110000000011111111 | 0xFFFF00FF | 4294902015 | .. . |
0x3FF0001C | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00020 | 00000000000000000000000000010000 | 0x00000010 | 16 | . | SPIIR
0x3FF00024 | 00000000000000000000000000011010 | 0x0000001A | 26 | . |
0x3FF00028 | 00000000000000000000000000000000 | 0x00000000 | 0 | | USWAP
0x3FF00028 | 00000000000000000000000000000000 | 0x00000000 | 0 | | IOSWAP
0x3FF0002C | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00030 | 00000000000000000100000001000000 | 0x00004040 | 16448 | @@ |
0x3FF00034 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
Expand All @@ -22,9 +22,9 @@
0x3FF00044 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00048 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF0004C | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00050 | 10011101111011100000000000000000 | 0x9DEE0000 | 2649620480 | .. |
0x3FF00054 | 00000010000000001001110011000010 | 0x02009CC2 | 33594562 | .. |
0x3FF00058 | 00000000000000001010000000000000 | 0x0000A000 | 40960 | . |
0x3FF00050 | 10011101111011100000000000000000 | 0x9DEE0000 | 2649620480 | .. | MAC0
0x3FF00054 | 00000010000000001001110011000010 | 0x02009CC2 | 33594562 | .. | MAC1
0x3FF00058 | 00000000000000001010000000000000 | 0x0000A000 | 40960 | . | CHIPID
0x3FF0005C | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00060 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x3FF00064 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
Expand Down Expand Up @@ -687,14 +687,13 @@
0x60000908 | 00000000000000000000000000001011 | 0x0000000B | 11 | |
0x6000090C | 00000000000000111001000001110010 | 0x00039072 | 233586 | r |
0x60000910 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x60000914 | 00000000000000000000000000000000 | 0x00000000 | 0 | | WDTRST
0x60000914 | 00000000000000000000000000000000 | 0x00000000 | 0 | | WDTFEED
0x60000918 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x6000091C | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x60000920 | 00000000000000000000000000111001 | 0x00000039 | 57 | 9 |
0x60000924 | 00000000000000000000000000001011 | 0x0000000B | 11 | |
0x60000928 | 00000000000000000000000000001011 | 0x0000000B | 11 | |
0x6000092C | 00000111100111110000110111101010 | 0x079F0DEA | 127864298 |Ÿ
ê|
0x6000092C | 00000111100111110000110111101010 | 0x079F0DEA | 127864298 | Ÿê |
0x60000930 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x60000934 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
0x60000938 | 00000000000000000000000000000000 | 0x00000000 | 0 | |
Expand Down
6 changes: 3 additions & 3 deletions hardware/esp8266com/esp8266/cores/esp8266/HardwareSerial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ void uart_set_baudrate(uart_t* uart, int baud_rate) {
if(uart == 0)
return;
uart->baud_rate = baud_rate;
USD(uart->uart_nr) = (80000000UL / uart->baud_rate);
USD(uart->uart_nr) = (ESP8266_CLOCK / uart->baud_rate);
}

int uart_get_baudrate(uart_t* uart) {
Expand Down Expand Up @@ -359,15 +359,15 @@ void uart_swap(uart_t* uart) {
if(uart->txPin == 1 && uart->rxPin == 3) {
pinMode(15, FUNCTION_4); //TX
pinMode(13, FUNCTION_4); //RX
USWAP |= (1 << USWAP0);
IOSWAP |= (1 << IOSWAPU0);
pinMode(1, INPUT); //TX
pinMode(3, INPUT); //RX
uart->rxPin = 13;
uart->txPin = 15;
} else {
pinMode(1, SPECIAL); //TX
pinMode(3, SPECIAL); //RX
USWAP &= ~(1 << USWAP0);
IOSWAP &= ~(1 << IOSWAPU0);
pinMode(15, INPUT); //TX
pinMode(13, INPUT); //RX
uart->rxPin = 3;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void prep_pwm_steps(){
pwm_steps_len = pwm_temp_steps_len;
ets_memcpy(pwm_steps, pwm_temp_steps, (pwm_temp_steps_len + 1) * 2);
ets_memcpy(pwm_steps_mask, pwm_temp_masks, pwm_temp_steps_len * 4);
pwm_multiplier = F_CPU/(PWMRANGE * pwm_freq);
pwm_multiplier = ESP8266_CLOCK/(PWMRANGE * pwm_freq);
ETS_FRC1_INTR_ENABLE();
}

Expand Down
79 changes: 49 additions & 30 deletions hardware/esp8266com/esp8266/cores/esp8266/esp8266_peri.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@

#define ESP8266_REG(addr) *((volatile uint32_t *)(0x60000000+(addr)))
#define ESP8266_DREG(addr) *((volatile uint32_t *)(0x3FF00000+(addr)))
#define ESP8266_CLOCK 80000000UL

//CPU Register
#define CPU2X ESP8266_DREG(0x14) //when bit 0 is set, F_CPU = 160MHz

//OTP Registers
#define MAC0 ESP8266_DREG(0x50)
#define MAC1 ESP8266_DREG(0x54)
#define CHIPID ESP8266_DREG(0x58)

//GPIO (0-15) Control Registers
#define GPO ESP8266_REG(0x300) //GPIO_OUT R/W (Output Level)
Expand Down Expand Up @@ -149,20 +158,26 @@ extern uint8_t esp8266_gpioToFn[16];
#define TCIT 0 //Interrupt Type 0:edge, 1:level

//RTC Registers
#define RTCMEM(i) ESP8266_REG(0x1100 + (((i) & 0xFF) * 4)) //RTC RAM 768 bytes, 192 registers
#define RTCSV ESP8266_REG(0x704) //RTC SLEEP COUNTER Target Value
#define RTCCV ESP8266_REG(0x71C) //RTC SLEEP COUNTER Value
#define RTCIS ESP8266_REG(0x720) //RTC INT Status
#define RTCIC ESP8266_REG(0x724) //RTC INT Clear
#define RTCIE ESP8266_REG(0x728) //RTC INT Enable
#define RTCS0 ESP8266_REG(0x730) //RTC SCRATCH 0
#define RTCS1 ESP8266_REG(0x734) //RTC SCRATCH 1
#define RTCS2 ESP8266_REG(0x738) //RTC SCRATCH 2
#define RTCS3 ESP8266_REG(0x73C) //RTC SCRATCH 3

//UART SWAP Register
#define USWAP ESP8266_DREG(0x28)
#define USWAP0 2 //BIT 2 swaps UART 0
//IO SWAP Register
#define IOSWAP ESP8266_DREG(0x28)
#define IOSWAPU 0 //Swaps UART
#define IOSWAPS 1 //Swaps SPI
#define IOSWAPU0 2 //Swaps UART 0 pins (u0rxd <-> u0cts), (u0txd <-> u0rts)
#define IOSWAPU1 3 //Swaps UART 1 pins (u1rxd <-> u1cts), (u1txd <-> u1rts)
#define IOSWAPHS 5 //Sets HSPI with higher prio
#define IOSWAP2HS 6 //Sets Two SPI Masters on HSPI
#define IOSWAP2CS 7 //Sets Two SPI Masters on CSPI

//UART INT Status
#define UIS ESP8266_DREG(0x20020)
#define UIS0 0
#define UIS1 2

//UART 0 Registers
#define U0F ESP8266_REG(0x000) //UART FIFO
Expand Down Expand Up @@ -227,45 +242,49 @@ extern uint8_t esp8266_gpioToFn[16];
#define UIFF 0 //RX FIFO Full

//UART STATUS Registers Bits
#define USTX 31 //TX PIN Level
#define USRTS 30 //RTS PIN Level
#define USDTR 39 //DTR PIN Level
#define USTX 31 //TX PIN Level
#define USRTS 30 //RTS PIN Level
#define USDTR 39 //DTR PIN Level
#define USTXC 16 //TX FIFO COUNT (8bit)
#define USRXD 15 //RX PIN Level
#define USCTS 14 //CTS PIN Level
#define USDSR 13 //DSR PIN Level
#define USRXC 0 //RX FIFO COUNT (8bit)

//UART CONF0 Registers Bits
#define UCDTRI 24 //Invert DTR
#define UCRTSI 23 //Invert RTS
#define UCTXI 22 //Invert TX
#define UCDSRI 21 //Invert DSR
#define UCCTSI 20 //Invert CTS
#define UCRXI 19 //Invert RX
#define UCDTRI 24 //Invert DTR
#define UCRTSI 23 //Invert RTS
#define UCTXI 22 //Invert TX
#define UCDSRI 21 //Invert DSR
#define UCCTSI 20 //Invert CTS
#define UCRXI 19 //Invert RX
#define UCTXRST 18 //Reset TX FIFO
#define UCRXRST 17 //Reset RX FIFO
#define UCTXHFE 15 //TX Harware Flow Enable
#define UCLBE 14 //LoopBack Enable
#define UCBRK 8 //Send Break on the TX line
#define UCLBE 14 //LoopBack Enable
#define UCBRK 8 //Send Break on the TX line
#define UCSWDTR 7 //Set this bit to assert DTR
#define UCSWRTS 6 //Set this bit to assert RTS
#define UCSBN 4 //StopBits Count (2bit) 0:disable, 1:1bit, 2:1.5bit, 3:2bit
#define UCBN 2 //DataBits Count (2bin) 0:5bit, 1:6bit, 2:7bit, 3:8bit
#define UCPAE 1 //Parity Enable
#define UCPA 0 //Parity 0:even, 1:odd
#define UCSBN 4 //StopBits Count (2bit) 0:disable, 1:1bit, 2:1.5bit, 3:2bit
#define UCBN 2 //DataBits Count (2bin) 0:5bit, 1:6bit, 2:7bit, 3:8bit
#define UCPAE 1 //Parity Enable
#define UCPA 0 //Parity 0:even, 1:odd

//UART CONF1 Registers Bits
#define UCTOE 31 //RX TimeOut Enable
#define UCTOT 24 //RX TimeOut Treshold (7bit)
#define UCTOE 31 //RX TimeOut Enable
#define UCTOT 24 //RX TimeOut Treshold (7bit)
#define UCRXHFE 23 //RX Harware Flow Enable
#define UCRXHFT 16 //RX Harware Flow Treshold (7bit)
#define UCFET 8 //TX FIFO Empty Treshold (7bit)
#define UCFFT 0 //RX FIFO Full Treshold (7bit)
#define UCFET 8 //TX FIFO Empty Treshold (7bit)
#define UCFFT 0 //RX FIFO Full Treshold (7bit)

//WDT Feed (the dog) Register
#define WDTFEED ESP8266_REG(0x914)
#define WDT_FEED() (WDTFEED = 0x73)

//WDT Register used for UART
#define WDTRST ESP8266_REG(0x914)
#define WDT_RESET() (WDTRST = 0x73)
//SPI_READY
#define SPIRDY ESP8266_DREG(0x0C)
#define SPIBUSY 9 //wait SPI idle

//SPI0 Registers (SPI0 is used for the flash)
#define SPI0CMD ESP8266_REG(0x200)
Expand Down
6 changes: 3 additions & 3 deletions hardware/esp8266com/esp8266/libraries/SPI/SPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,14 @@ void SPIClass::setBitOrder(uint8_t bitOrder) {
* @return
*/
static uint32_t ClkRegToFreq(spiClk_t * reg) {
return (SPI_MAX_SPEED / ((reg->regPre + 1) * (reg->regN + 1)));
return (ESP8266_CLOCK / ((reg->regPre + 1) * (reg->regN + 1)));
}

void SPIClass::setFrequency(uint32_t freq) {
static uint32_t lastSetFrequency = 0;
static uint32_t lastSetRegister = 0;

if(freq >= SPI_MAX_SPEED) {
if(freq >= ESP8266_CLOCK) {
setClockDivider(0x80000000);
return;
}
Expand Down Expand Up @@ -164,7 +164,7 @@ void SPIClass::setFrequency(uint32_t freq) {
reg.regN = calN;

while(calPreVari++ <= 1) { // test different variants for Pre (we calculate in int so we miss the decimals, testing is the easyest and fastest way)
calPre = (((SPI_MAX_SPEED / (reg.regN + 1)) / freq) - 1) + calPreVari;
calPre = (((ESP8266_CLOCK / (reg.regN + 1)) / freq) - 1) + calPreVari;
if(calPre > 0x1FFF) {
reg.regPre = 0x1FFF; // 8191
} else if(calPre <= 0) {
Expand Down
2 changes: 0 additions & 2 deletions hardware/esp8266com/esp8266/libraries/SPI/SPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@
#define SPI_CLOCK_DIV64 0x04fc1001 //250 KHz
#endif

#define SPI_MAX_SPEED (80000000L)

const uint8_t SPI_MODE0 = 0x00; ///< CPOL: 0 CPHA: 0
const uint8_t SPI_MODE1 = 0x01; ///< CPOL: 0 CPHA: 1
const uint8_t SPI_MODE2 = 0x10; ///< CPOL: 1 CPHA: 0
Expand Down
4 changes: 3 additions & 1 deletion hardware/esp8266com/esp8266/tools/sdk/include/ets_sys.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,13 @@ typedef struct _ETSTIMER_ {

typedef void (*int_handler_t)(void*);

#define ETS_SPI_INUM 2
#define ETS_SPI_INUM 2
#define ETS_GPIO_INUM 4
#define ETS_UART_INUM 5
#define ETS_UART1_INUM 5
#define ETS_CCOMPARE0_INUM 6
#define ETS_SOFT_INUM 7
#define ETS_WDT_INUM 8
#define ETS_FRC_TIMER1_INUM 9 /* use edge*/

#define ETS_INTR_LOCK() \
Expand Down

0 comments on commit a6e8697

Please sign in to comment.