Skip to content

Commit e865465

Browse files
Separated getDMACID() function into getDMAC_ID_TX() and getDMAC_ID_RX()
1 parent adc7241 commit e865465

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

libraries/SPI/SPI.cpp

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -245,36 +245,38 @@ void SPIClass::detachInterrupt() {
245245

246246
// SPI DMA lookup works on both SAMD21 and SAMD51
247247

248-
volatile uint32_t *SPIClass::getDataRegister(void) {
249-
volatile uint32_t *dataReg[] = {
250-
&SERCOM0->SPI.DATA.reg, &SERCOM1->SPI.DATA.reg, &SERCOM2->SPI.DATA.reg,
251-
&SERCOM3->SPI.DATA.reg, &SERCOM4->SPI.DATA.reg, &SERCOM5->SPI.DATA.reg,
248+
static const struct {
249+
volatile uint32_t *data_reg;
250+
int dmac_id_tx;
251+
int dmac_id_rx;
252+
} sercomData[] = {
253+
{ &SERCOM0->SPI.DATA.reg, SERCOM0_DMAC_ID_TX, SERCOM0_DMAC_ID_RX },
254+
{ &SERCOM1->SPI.DATA.reg, SERCOM1_DMAC_ID_TX, SERCOM1_DMAC_ID_RX },
255+
{ &SERCOM2->SPI.DATA.reg, SERCOM2_DMAC_ID_TX, SERCOM2_DMAC_ID_RX },
256+
{ &SERCOM3->SPI.DATA.reg, SERCOM3_DMAC_ID_TX, SERCOM3_DMAC_ID_RX },
257+
{ &SERCOM4->SPI.DATA.reg, SERCOM4_DMAC_ID_TX, SERCOM4_DMAC_ID_RX },
258+
{ &SERCOM5->SPI.DATA.reg, SERCOM5_DMAC_ID_TX, SERCOM5_DMAC_ID_RX },
252259
#if defined(SERCOM6)
253-
&SERCOM6->SPI.DATA.reg,
260+
{ &SERCOM6->SPI.DATA.reg, SERCOM6_DMAC_ID_TX, SERCOM6_DMAC_ID_RX },
254261
#endif
255262
#if defined(SERCOM7)
256-
&SERCOM7->SPI.DATA.reg,
263+
{ &SERCOM7->SPI.DATA.reg, SERCOM7_DMAC_ID_TX, SERCOM7_DMAC_ID_RX },
257264
#endif
258-
};
265+
};
259266

267+
volatile uint32_t *SPIClass::getDataRegister(void) {
260268
int8_t idx = _p_sercom->getSercomIndex();
261-
return (idx >= 0) ? dataReg[idx]: NULL;
269+
return (idx >= 0) ? sercomData[idx].data_reg: NULL;
262270
}
263271

264-
int SPIClass::getDMACID(void) {
265-
int DMACID[] = {
266-
SERCOM0_DMAC_ID_TX, SERCOM1_DMAC_ID_TX, SERCOM2_DMAC_ID_TX,
267-
SERCOM3_DMAC_ID_TX, SERCOM4_DMAC_ID_TX, SERCOM5_DMAC_ID_TX,
268-
#if defined(SERCOM6)
269-
SERCOM6_DMAC_ID_TX,
270-
#endif
271-
#if defined(SERCOM7)
272-
SERCOM7_DMAC_ID_TX,
273-
#endif
274-
};
272+
int SPIClass::getDMAC_ID_TX(void) {
273+
int8_t idx = _p_sercom->getSercomIndex();
274+
return (idx >= 0) ? sercomData[idx].dmac_id_tx : -1;
275+
}
275276

277+
int SPIClass::getDMAC_ID_RX(void) {
276278
int8_t idx = _p_sercom->getSercomIndex();
277-
return (idx >= 0) ? DMACID[idx] : -1;
279+
return (idx >= 0) ? sercomData[idx].dmac_id_rx : -1;
278280
}
279281

280282
#if defined(__SAMD51__)

libraries/SPI/SPI.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ class SPIClass {
134134

135135
// SERCOM lookup functions are available on both SAMD51 and 21.
136136
volatile uint32_t *getDataRegister(void);
137-
int getDMACID(void);
137+
int getDMAC_ID_TX(void);
138+
int getDMAC_ID_RX(void);
138139
uint8_t getSercomIndex(void) { return _p_sercom->getSercomIndex(); };
139140
#if defined(__SAMD51__)
140141
// SERCOM clock source override is available only on SAMD51.

0 commit comments

Comments
 (0)