Files
2025-01-23 14:07:59 +01:00

76 lines
1.9 KiB
C

#include <stdint.h>
// -----------------------------------------------------
// Funktionen zum Setzen einzelner Registerwerte
// -----------------------------------------------------
void setRdGenRun(volatile uint32_t *pBaseAddr, uint8_t run)
{
pBaseAddr[0] = (pBaseAddr[0] & 0xFFFFFF7F) | ((run&1)<< 7);
}
void setRdGenPipelining(volatile uint32_t *pBaseAddr, uint8_t pl)
{
pBaseAddr[0] = (pBaseAddr[0] & 0xFFFFFFBF) | ((pl&1)<< 6);
}
void setRdGenTriggerOutput(volatile uint32_t *pBaseAddr, uint8_t tr)
{
pBaseAddr[0] = (pBaseAddr[0] & 0xFFFFFFDF) | ((tr&1) << 5);
}
void setRdGenBurstLen(volatile uint32_t *pBaseAddr, uint8_t bl)
{
if (bl<1) bl = 1;
if (bl>16) bl = 16;
pBaseAddr[0] = (pBaseAddr[0] & 0xFFFFFFE0) | bl;
}
void setRdGenARCACHE(volatile uint32_t *pBaseAddr, uint8_t arc)
{
pBaseAddr[0] = (pBaseAddr[0] & 0xFFFF00FF) | ((arc&15) << 8);
}
void setRdGenPauseCycles(volatile uint32_t *pBaseAddr, uint16_t pc)
{
pBaseAddr[0] = (pBaseAddr[0] & 0x0000FFFF) | (pc << 16);
}
void setRdGenAddress(volatile uint32_t *pBaseAddr, uint32_t memaddr)
{
pBaseAddr[1] = memaddr;
}
// -----------------------------------------------------
// Funktion zum Setzen von Parametern des Lesezugriffs
// -----------------------------------------------------
void setRdGenDefaults(volatile uint32_t *pBaseAddr)
{
setRdGenRun (pBaseAddr,0);
setRdGenTriggerOutput (pBaseAddr,1);
setRdGenPauseCycles (pBaseAddr,50);
setRdGenBurstLen (pBaseAddr,8);
setRdGenPipelining (pBaseAddr,0);
}
int main()
{
int i;
volatile uint32_t* HP[4] = {(uint32_t*)0x43c00000,(uint32_t*)0x43c10000,
(uint32_t*)0x43c20000,(uint32_t*)0x43c30000};
// Parameter für alle HP-Ports gleich setzen ...
for (i=0;i<4;i++) setRdGenDefaults(HP[i]);
// ... und dann das IP aktivieren (bzw. auch nicht)
setRdGenRun(HP[0],1);
//setRdGenRun(HP[1],1);
//setRdGenRun(HP[2],1);
//setRdGenRun(HP[3],1);
return 0;
}