Skip to content

SAMD51(J19) revision F DMA issues with 2 identical TCCx trigger source #356

Open
@flety-emmanuel

Description

@flety-emmanuel

Fully documented here:
https://forum.microchip.com/s/topic/a5CV40000000b1BMAQ/t394578

TL;DR :
use case : TCCx timer set as PWM pulse train generator. DMA in charge of setting the duty cycle of the PWM channel at each new period, hence trigger source selected is TCCx-OVERFLOW. DMA channel writes new duty cycle in the TCCx[concerned channel & pin].CCbuf

Bottom line: in rev F of the silicon, if you allocate a dma channel and set it with a trigger source then allocate another channel with the SAME trigger source, first channel will never start its job and will not finish it. Triggering the SECOND one will eventually sometimes allow for the first channel, sometimes not. As soon as you revert the trigger source of the second DMA channel to another source, like another timer, different from the first channel timer, the first channel works correctly and triggers interrupts and such. Reverting can be done on the fly as code offers (by pressing a switch on a GPIO or shorting it) and first channel falls back in order.

Test code made to work with an itsty bitsy M4 and could be simply adapted to a M4 express with the exact MCU (51J19) using for instance pins D8 and D9 which feature the same TCC0 timer, on respective (timer) channels 1 and 0. The itsy M4 I ordered last week from adafruit are unfortunately rev D as well as my older M4 express I own. I tested that simple code on my custom board that uses a 51J19A-AU in TQFP format, using both D and F versions to compare and highlight the issue. F revision MCU were acquired from both microchip direct and mouser.

test_ledstrip_dma4-itsy.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions