@@ -99,16 +99,16 @@ class TwiMasterOrSlave : public TwiMaster
9999 ETSTimer timer;
100100
101101 // Event/IRQ callbacks, so they can't use "this" and need to be static
102- static void ICACHE_RAM_ATTR onSclChange (void );
103- static void ICACHE_RAM_ATTR onSdaChange (void );
102+ static void IRAM_ATTR onSclChange (void );
103+ static void IRAM_ATTR onSdaChange (void );
104104 static void eventTask (ETSEvent *e);
105- static void ICACHE_RAM_ATTR onTimer (void *unused);
105+ static void IRAM_ATTR onTimer (void *unused);
106106
107107 // Allow not linking in the slave code if there is no call to enableSlave
108108 bool _slaveEnabled = false ;
109109
110110 // Internal use functions
111- void ICACHE_RAM_ATTR onTwipEvent (uint8_t status);
111+ void IRAM_ATTR onTwipEvent (uint8_t status);
112112
113113public:
114114 // custom version
@@ -118,8 +118,8 @@ class TwiMasterOrSlave : public TwiMaster
118118 uint8_t transmit (const uint8_t * data, uint8_t length);
119119 void attachSlaveRxEvent (void (*function)(uint8_t *, size_t , void *));
120120 void attachSlaveTxEvent (void (*function)(void *));
121- void ICACHE_RAM_ATTR reply (uint8_t ack);
122- void ICACHE_RAM_ATTR releaseBus (void );
121+ void IRAM_ATTR reply (uint8_t ack);
122+ void IRAM_ATTR releaseBus (void );
123123 void enableSlave (void * targetObject);
124124};
125125
@@ -223,7 +223,7 @@ void TwiMasterOrSlave::enableSlave(void* targetObject)
223223 }
224224}
225225
226- void ICACHE_RAM_ATTR TwiMaster::busywait (unsigned int v)
226+ void IRAM_ATTR TwiMaster::busywait (unsigned int v)
227227{
228228 unsigned int i;
229229 for (i = 0 ; i < v; i++) // loop time is 5 machine cycles: 31.25ns @ 160MHz, 62.5ns @ 80MHz
@@ -466,9 +466,9 @@ void TwiMasterOrSlave::attachSlaveTxEvent(void (*function)(void*))
466466}
467467
468468// DO NOT INLINE, inlining reply() in combination with compiler optimizations causes function breakup into
469- // parts and the ICACHE_RAM_ATTR isn't propagated correctly to all parts, which of course causes crashes.
469+ // parts and the IRAM_ATTR isn't propagated correctly to all parts, which of course causes crashes.
470470// TODO: test with gcc 9.x and if it still fails, disable optimization with -fdisable-ipa-fnsplit
471- void ICACHE_RAM_ATTR TwiMasterOrSlave::reply (uint8_t ack)
471+ void IRAM_ATTR TwiMasterOrSlave::reply (uint8_t ack)
472472{
473473 // transmit master read ready signal, with or without ack
474474 if (ack)
@@ -486,7 +486,7 @@ void ICACHE_RAM_ATTR TwiMasterOrSlave::reply(uint8_t ack)
486486}
487487
488488
489- void ICACHE_RAM_ATTR TwiMasterOrSlave::releaseBus (void )
489+ void IRAM_ATTR TwiMasterOrSlave::releaseBus (void )
490490{
491491 // release bus
492492 // TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT);
@@ -499,7 +499,7 @@ void ICACHE_RAM_ATTR TwiMasterOrSlave::releaseBus(void)
499499}
500500
501501
502- void ICACHE_RAM_ATTR TwiMasterOrSlave::onTwipEvent (uint8_t status)
502+ void IRAM_ATTR TwiMasterOrSlave::onTwipEvent (uint8_t status)
503503{
504504 twip_status = status;
505505 switch (status)
@@ -606,7 +606,7 @@ void ICACHE_RAM_ATTR TwiMasterOrSlave::onTwipEvent(uint8_t status)
606606 }
607607}
608608
609- void ICACHE_RAM_ATTR TwiMasterOrSlave::onTimer (void *unused)
609+ void IRAM_ATTR TwiMasterOrSlave::onTimer (void *unused)
610610{
611611 (void )unused;
612612 twi.releaseBus ();
@@ -656,7 +656,7 @@ void TwiMasterOrSlave::eventTask(ETSEvent *e)
656656// Shorthand for if the state is any of the or'd bitmask x
657657#define IFSTATE (x ) if (twip_state_mask & (x))
658658
659- void ICACHE_RAM_ATTR TwiMasterOrSlave::onSclChange (void )
659+ void IRAM_ATTR TwiMasterOrSlave::onSclChange (void )
660660{
661661 unsigned int sda;
662662 unsigned int scl;
@@ -854,7 +854,7 @@ void ICACHE_RAM_ATTR TwiMasterOrSlave::onSclChange(void)
854854 }
855855}
856856
857- void ICACHE_RAM_ATTR TwiMasterOrSlave::onSdaChange (void )
857+ void IRAM_ATTR TwiMasterOrSlave::onSdaChange (void )
858858{
859859 unsigned int sda;
860860 unsigned int scl;
0 commit comments