@@ -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__)
0 commit comments