2626#include "soc/io_mux_reg.h"
2727#include "soc/gpio_sig_map.h"
2828#include "soc/dport_reg.h"
29+ #include "soc/rtc.h"
2930
3031#define SPI_CLK_IDX (p ) ((p==0)?SPICLK_OUT_IDX:((p==1)?SPICLK_OUT_IDX:((p==2)?HSPICLK_OUT_IDX:((p==3)?VSPICLK_OUT_IDX:0))))
3132#define SPI_MISO_IDX (p ) ((p==0)?SPIQ_OUT_IDX:((p==1)?SPIQ_OUT_IDX:((p==2)?HSPIQ_OUT_IDX:((p==3)?VSPIQ_OUT_IDX:0))))
@@ -750,7 +751,7 @@ void spiEndTransaction(spi_t * spi)
750751 SPI_MUTEX_UNLOCK ();
751752}
752753
753- void spiWriteByteNL (spi_t * spi , uint8_t data )
754+ void IRAM_ATTR spiWriteByteNL (spi_t * spi , uint8_t data )
754755{
755756 if (!spi ) {
756757 return ;
@@ -776,7 +777,7 @@ uint8_t spiTransferByteNL(spi_t * spi, uint8_t data)
776777 return data ;
777778}
778779
779- void spiWriteShortNL (spi_t * spi , uint16_t data )
780+ void IRAM_ATTR spiWriteShortNL (spi_t * spi , uint16_t data )
780781{
781782 if (!spi ) {
782783 return ;
@@ -811,7 +812,7 @@ uint16_t spiTransferShortNL(spi_t * spi, uint16_t data)
811812 return data ;
812813}
813814
814- void spiWriteLongNL (spi_t * spi , uint32_t data )
815+ void IRAM_ATTR spiWriteLongNL (spi_t * spi , uint32_t data )
815816{
816817 if (!spi ) {
817818 return ;
@@ -959,7 +960,7 @@ void spiTransferBitsNL(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits)
959960 }
960961}
961962
962- void spiWritePixelsNL (spi_t * spi , const void * data_in , size_t len ){
963+ void IRAM_ATTR spiWritePixelsNL (spi_t * spi , const void * data_in , size_t len ){
963964 size_t longs = len >> 2 ;
964965 if (len & 3 ){
965966 longs ++ ;
@@ -1017,18 +1018,20 @@ typedef union {
10171018 };
10181019} spiClk_t ;
10191020
1020- #define ClkRegToFreq (reg ) (CPU_CLK_FREQ / (((reg)->regPre + 1) * ((reg)->regN + 1)))
1021+ #define ClkRegToFreq (reg ) (apb_freq / (((reg)->regPre + 1) * ((reg)->regN + 1)))
10211022
10221023uint32_t spiClockDivToFrequency (uint32_t clockDiv )
10231024{
1025+ uint32_t apb_freq = getApbFrequency ();
10241026 spiClk_t reg = { clockDiv };
10251027 return ClkRegToFreq (& reg );
10261028}
10271029
10281030uint32_t spiFrequencyToClockDiv (uint32_t freq )
10291031{
1032+ uint32_t apb_freq = getApbFrequency ();
10301033
1031- if (freq >= CPU_CLK_FREQ ) {
1034+ if (freq >= apb_freq ) {
10321035 return SPI_CLK_EQU_SYSCLK ;
10331036 }
10341037
@@ -1051,7 +1054,7 @@ uint32_t spiFrequencyToClockDiv(uint32_t freq)
10511054 reg .regN = calN ;
10521055
10531056 while (calPreVari ++ <= 1 ) {
1054- calPre = (((CPU_CLK_FREQ / (reg .regN + 1 )) / freq ) - 1 ) + calPreVari ;
1057+ calPre = (((apb_freq / (reg .regN + 1 )) / freq ) - 1 ) + calPreVari ;
10551058 if (calPre > 0x1FFF ) {
10561059 reg .regPre = 0x1FFF ;
10571060 } else if (calPre <= 0 ) {
0 commit comments