Listing 3

#include <stdio.h>
#include "defBF533.h"
#include "CRegisterDmaTransfer.h"
#include "CDescriptorDmaTransfer.h"
#include "DmaFlexDscDefs.h"
#include "BF53xDMA1.h"


const int kiBufSize = 0x20;
const int kiStars = 0x2a2a2a2a;
const int kiBlanks = 0x20202020;

int iToBuf[kiBufSize];

int iFromBufStars[kiBufSize];
int iFromBufBlanks[kiBufSize];

// Two descriptors (small model) chained to point at each other
short sFromDsc1[SmDSC::eAllocateSize];
short sFromDsc2[SmDSC::eAllocateSize];
short sToDsc[LgDSC::eAllocateSize];
inline short PointerLoToShort(short *p)
{
    int i = (int) p;
    return (short) i & 0xffff;
}
inline short PointerHiToShort(short *p)
{
    int i = (int) p;
    return (short) (i>>16) & 0xffff;
}
inline short PointerLoToShort(int *p)
{
    int i = (int) p;
    return (short) i & 0xffff;
}
inline short PointerHiToShort(int *p)
{
    int i = (int) p;
    return (short) (i>>16) & 0xffff;
}
void InitDescriptors()
{
    short sFlowAuto = (CfgFlow::ksAuto<<CfgFlow::ksShift);
    short sFlowSM = (CfgFlow::ksSmall<<CfgFlow::ksShift);
    short sNDSIZE_SM = (SmDSC::eCopyTwo & CfgNDSIZE::ksMask) << 
                                                    CfgNDSIZE::ksShift;
    sFromDsc1[SmDSC::eNextDscPtrLow]    =   PointerLoToShort(sFromDsc2);
    sFromDsc1[SmDSC::eBaseAddrLow]      =   PointerLoToShort(iFromBufStars);
    sFromDsc1[SmDSC::eBaseAddrHigh]     =   PointerHiToShort(iFromBufStars);
    sFromDsc1[SmDSC::eDMAConfig]        =   (sFlowSM | sNDSIZE_SM | 
                                                   Cfg::ksSIZE_32 | 
                                                   Cfg::ksENABLE  | 
                                                   Cfg::ksINT_EN);
    sFromDsc1[SmDSC::eXCount]           =   kiBufSize;
    sFromDsc1[SmDSC::eXModify]          =   sizeof(int);
    sFromDsc1[SmDSC::eYCount]           =   0;
    sFromDsc1[SmDSC::eYModify]          =   0;
    
    sFromDsc2[SmDSC::eNextDscPtrLow]    =   PointerLoToShort(sFromDsc1);
    sFromDsc2[SmDSC::eBaseAddrLow]      =   PointerLoToShort(iFromBufBlanks);
    sFromDsc2[SmDSC::eBaseAddrHigh]     =   PointerHiToShort(iFromBufBlanks);
    sFromDsc2[SmDSC::eDMAConfig]        =   (sFlowSM | sNDSIZE_SM | 
                                                   Cfg::ksSIZE_32 | 
                                                   Cfg::ksENABLE);
    sFromDsc2[SmDSC::eXCount]           =   kiBufSize;
    sFromDsc2[SmDSC::eXModify]          =   sizeof(int);
    sFromDsc2[SmDSC::eYCount]           =   0;
    sFromDsc2[SmDSC::eYModify]          =   0;
    
    sToDsc[SmDSC::eNextDscPtrLow]       =   PointerLoToShort(sToDsc);
    sToDsc[SmDSC::eBaseAddrLow]         =   PointerLoToShort(iToBuf);
    sToDsc[SmDSC::eBaseAddrHigh]        =   PointerHiToShort(iToBuf);
    sToDsc[SmDSC::eDMAConfig]           =   (sFlowAuto | Cfg::ksWRITE_DIR | 
                                                         Cfg::ksSIZE_32   | 
                                                         Cfg::ksENABLE);
    sToDsc[SmDSC::eXCount]              =   kiBufSize;
    sToDsc[SmDSC::eXModify]             =   sizeof(int);
    sToDsc[SmDSC::eYCount]              =   0;
    sToDsc[SmDSC::eYModify]             =   0;
}
void InitFromBufs()
{
    int j;
    for (j=0; j<kiBufSize; j++)
    {
        iFromBufStars[j]=kiStars;
        iFromBufBlanks[j]=kiBlanks;
    }
}
main()
{
    InitFromBufs(); 
    InitDescriptors();
    CDescriptorDmaTransfer DmaDescriptor(BF53xDMA1::S_MDMA1, 
                                     BF53xDMA1::D_MDMA1, sFromDsc1, sToDsc);
    DmaDescriptor.PerformTransfer();
}