SPI not sending via DMA

133 Views Asked by At

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;
0

There are 0 best solutions below