The problem was that the interrupts the driver was waiting for (wait
interrupts) did not include SDMMC_INT_DINT, the DMA Boundary Pause
interrupt.
The calloc() / kmm_memalign() memory allocation put the buffer in a place
where the SDMA Buffer Boundary was not encountered, so the SDMA Boundary
Paus
The kmm_malloc() also has the same effect of making it work.
I think what's going on is that the transfer is passing a SDMA Buffer
Boundary— they are 4kb (configurable, but that's the default). SDMA pauses
when passing one, and needs to be reenabled by software. I can see the
SDMMC_INT_DINT being
Greg,
Thanks. I'll change the call to kmm_malloc() or kmm_memalign() and see if
that works too.
cheers
adam
On Tue, Jul 7, 2020 at 9:03 PM spudaneco wrote:
> I don't know anything about the DMA, but you should not call calloc() from
> within the OS. That does not work in all configurations.In
I don't know anything about the DMA, but you should not call calloc() from
within the OS. That does not work in all configurations.Instead include
nuttx/kmalloc,h and call kmm_malloc(). If you want aligned memory, call
kmm_memalgn().Sent from Samsung tablet.
Original message