I'm trying to transmit data over SPI via DMA on NXP's KL05Z MCU, but I think I'm missing something in my register's setup. SPI alone works fine but when i try using DMA nothing happens. I'm pretty desperate after 2 days of reading the documentation and not finding any solution :/
uint8_t fb[10][10];
for(uint8_t y = 0; y<10;y++)
{
for(uint8_t x = 0; x<10;x++)
{
fb[y][x] = 0xAA;
}
}
SIM->SCGC5 |= SIM_SCGC5_PORTB_MASK;
SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK;
PORTB->PCR[8] = PORT_PCR_MUX(1);
PORTA->PCR[7] = PORT_PCR_MUX(3);
PTB->PDDR |= (1<<8);
SIM->SCGC4 |= SIM_SCGC4_SPI0_MASK;
SIM->SCGC7 |= SIM_SCGC7_DMA_MASK;
SIM->SCGC6 |= SIM_SCGC6_DMAMUX_MASK;
DMAMUX0->CHCFG[0] |= DMAMUX_CHCFG_SOURCE(17);
DMAMUX0->CHCFG[0] |= DMAMUX_CHCFG_ENBL_MASK;
DMA0->DMA->SAR = (uint32_t) &fb[0][0];
DMA0->DMA->DAR = (uint32_t) &SPI0->D;
DMA0->DMA->DCR |= DMA_DCR_EINT_MASK;
DMA0->DMA->DCR |= DMA_DCR_SSIZE(1);
DMA0->DMA->DCR |= DMA_DCR_DSIZE(1);
DMA0->DMA->DCR |= DMA_DCR_ERQ_MASK;
DMA0->DMA->DCR |= DMA_DCR_SINC_MASK;
DMA0->DMA->DSR_BCR |= DMA_DSR_BCR_BCR(10);
DMA0->DMA->DCR |= DMA_DCR_START_MASK;
SPI0->C1 |= SPI_C1_MSTR_MASK;
SPI0->BR |= SPI_BR_SPPR(1);
SPI0->BR |= SPI_BR_SPR(0);
SPI0->C2 |= SPI_C2_TXDMAE_MASK;
SPI0->C1 |= SPI_C1_SPE_MASK;