_2 APIs (byte-buffer based) preferred over Gen1 struct-baseddma_spitran() binten hardcoded FALSE — interrupt branch is DEAD CODEdma_spi_LLIReceive() for continuous async receivenext_lli points to itself for auto-loopdmac_isr() from dmac_drv.c is DISCARDED by linker — NOT in binaryDMA_IRQHandler from libCUni360S_mcc.a(mcc_bsp.o) at 0x0041b2acvector_table.h ISR24 to repoint IRQ4 to our own DMA handlervoid *const in flash — interrupt_setup() only sets EIC priority, NOT the vectordma_spi_LLIReceive() creates a SELF-LOOP LLI (next points to itself)DMA_IE | SNC | DI | LLP_DST_EN | LLP_SRC_EN | P2M_DMA = 0x18200401gmsp_currently_filling �� starts at 0 (buf_A), XOR'd in ISR after each completiongmsp_completed_buf = gmsp_currently_filling captures the just-finished buffer before togglinggmsp_currently_filling was initially static volatile �� broke extern in gmsp_isr.cextern volatile in gmsp_isr.cPIT32_SPI1_SPI2_ISR �� now gmsp_irq3_handlerDMA_IRQHandler (from .a lib) �� now gmsp_dma_irq_handlerextern void declarations in vector_table.h for new handlersPIT32_SPI1_SPI2_ISR in pit32_drv.c still exists but is no longer calledDMA_IRQHandler in libCUni360S_mcc.a still exists but vector no longer points to itPIT32->PCSR |= PIT_PIF (write 1 to clear, same as original handler)SPI1->SPISRHW for full 16-bit status in IRQ3 handleridx = (crc >> 8) ^ data[i]; crc = (crc << 8) ^ table[idx];