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();
}