2 Replies Latest reply on Feb 12, 2017 12:58 AM by user_49271930

    Trying to use DMA to load the Shift Register FIFOs

    dave.cox

      I'm trying to create a logical block to take care of data transfer for a large array (several thousand) of NeoPixel type smart RGBW LEDs.  

         

      Each LED requires 32 bits, and each bit is broken into 4 chips - a Zero is sent with one high chip, and three low chips, and a One is sent with two high and two low. I've created a state machine which "should" be able to take an array of 32b RGBW data from memory, load them into a 32b Shift Register via DMA, and shift it through the state machine to chip the bits and TX to the NeoPixels. 

         

      The documentation for the Shift Register indicates that it's FIFOs can be loaded directly from CPU, or via DMA (which was my intent). I've tried attaching the Interrupt output from the Shift_Register to the DRQ input of a DMA module, and then tried to run the DMA wizard, but the DMA wizard doesn't show the DMA module, nor the Shift Register's FIFOs as a DMA endpoint. 

         

      The DMA Wizard does see a Control Register, but since there is no parallel load option on the Shift Register, I can't use that to move data (other than a bit at a time with the Shift In, which wouldn't help me at all). 

         

      I've looked for examples of using DMA or Shift Registers with DMA, and can't find any, so I'm currently stuck... 

         

      Any help would be much appreciated. 

         

      Dave