@@ -245,36 +245,38 @@ void SPIClass::detachInterrupt() {
245
245
246
246
// SPI DMA lookup works on both SAMD21 and SAMD51
247
247
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 },
252
259
#if defined(SERCOM6)
253
- &SERCOM6->SPI .DATA .reg ,
260
+ { &SERCOM6->SPI .DATA .reg , SERCOM6_DMAC_ID_TX, SERCOM6_DMAC_ID_RX } ,
254
261
#endif
255
262
#if defined(SERCOM7)
256
- &SERCOM7->SPI .DATA .reg ,
263
+ { &SERCOM7->SPI .DATA .reg , SERCOM7_DMAC_ID_TX, SERCOM7_DMAC_ID_RX } ,
257
264
#endif
258
- };
265
+ };
259
266
267
+ volatile uint32_t *SPIClass::getDataRegister (void ) {
260
268
int8_t idx = _p_sercom->getSercomIndex ();
261
- return (idx >= 0 ) ? dataReg [idx]: NULL ;
269
+ return (idx >= 0 ) ? sercomData [idx]. data_reg : NULL ;
262
270
}
263
271
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
+ }
275
276
277
+ int SPIClass::getDMAC_ID_RX (void ) {
276
278
int8_t idx = _p_sercom->getSercomIndex ();
277
- return (idx >= 0 ) ? DMACID [idx] : -1 ;
279
+ return (idx >= 0 ) ? sercomData [idx]. dmac_id_rx : -1 ;
278
280
}
279
281
280
282
#if defined(__SAMD51__)
0 commit comments