File tree Expand file tree Collapse file tree 2 files changed +30
-4
lines changed
Expand file tree Collapse file tree 2 files changed +30
-4
lines changed Original file line number Diff line number Diff line change @@ -87,6 +87,9 @@ void SPIClass::usingInterrupt(int interruptNumber)
8787 interruptMode = SPI_IMODE_GLOBAL;
8888 else
8989 {
90+ if (irqMap == NULL ) {
91+ irqMap = (uint8_t *)malloc (EXTERNAL_NUM_INTERRUPTS);
92+ }
9093 interruptMode |= SPI_IMODE_EXTINT;
9194 interruptMask |= (1 << interruptNumber);
9295 }
@@ -102,16 +105,38 @@ void SPIClass::notUsingInterrupt(int interruptNumber)
102105
103106 interruptMask &= ~(1 << interruptNumber);
104107
105- if (interruptMask == 0 )
108+ if (interruptMask == 0 ) {
106109 interruptMode = SPI_IMODE_NONE;
110+ free (irqMap);
111+ irqMap = NULL ;
112+ }
107113}
108114
109-
110115void SPIClass::detachMaskedInterrupts () {
116+ unsigned long long temp = interruptMask;
117+ uint8_t shift = 0 ;
118+ while (temp != 0 ) {
119+ if (temp & 1 ) {
120+ uint8_t * pin_ctrl_reg = getPINnCTRLregister (portToPortStruct (shift/8 ), shift%8 );
121+ irqMap[shift] = *pin_ctrl_reg;
122+ *pin_ctrl_reg &= ~(PORT_ISC_gm);
123+ }
124+ temp = temp >> 1 ;
125+ shift++;
126+ }
111127}
112128
113129void SPIClass::reattachMaskedInterrupts () {
114-
130+ unsigned long long temp = interruptMask;
131+ uint8_t shift = 0 ;
132+ while (temp != 0 ) {
133+ if (temp & 1 ) {
134+ uint8_t * pin_ctrl_reg = getPINnCTRLregister (portToPortStruct (shift/8 ), shift%8 );
135+ *pin_ctrl_reg |= irqMap[shift];
136+ }
137+ temp = temp >> 1 ;
138+ shift++;
139+ }
115140}
116141
117142void SPIClass::beginTransaction (SPISettings settings)
Original file line number Diff line number Diff line change @@ -182,7 +182,8 @@ class SPIClass {
182182 bool initialized;
183183 uint8_t interruptMode;
184184 char interruptSave;
185- uint32_t interruptMask;
185+ unsigned long long interruptMask;
186+ uint8_t * irqMap = NULL ;
186187};
187188
188189#if SPI_INTERFACES_COUNT > 0
You can’t perform that action at this time.
0 commit comments