示例#1
0
static void dmaBurst(Uns32 ch, void *from, void *to, Uns32 bytes)
{
    Uns32 offset = ch * DMA_CHANNEL_STRIDE;
    LOG("dmaBurst ch:%d  bytes:%d\n", ch, bytes);
    writeReg32(DMA_BASE, DMA_C0_SRC_ADDR + offset, (Uns32)from);
    writeReg32(DMA_BASE, DMA_C0_DST_ADDR + offset, (Uns32)to);
    writeReg32(DMA_BASE, DMA_C0_CONTROL  + offset, bytes);

    writeReg32(DMA_BASE, DMA_C0_CONFIGURATION + offset, ENABLE|INTEN);
}
示例#2
0
void interruptHandler(void)
{
    LOG("Interrupt\n");
    if ( readReg32(DMA_BASE, DMA_C0_CONFIGURATION) & 0x8000 ) {
        LOG("Interrupt ch0 0x%x\n", readReg32(DMA_BASE, DMA_C0_CONFIGURATION));
        writeReg32(DMA_BASE, DMA_C0_CONFIGURATION, 0);
        interruptCount++;
    }

    if ( readReg32(DMA_BASE, DMA_C1_CONFIGURATION) & 0x8000 ) {
        LOG("Interrupt ch1 0x%x\n", readReg32(DMA_BASE, DMA_C1_CONFIGURATION));
        writeReg32(DMA_BASE, DMA_C1_CONFIGURATION, 0);
        interruptCount++;
    }
}
示例#3
0
/***************************************************
* scaler_write_preset()
****************************************************/
STATIC long scaler_write_preset(scalerRecord *psr, int signal, long val)
{
	devScalerPvt *dpvt = psr->dpvt;
	int card = dpvt->card;
	volatile char *addr= scaler_state[card]->localAddr;
	short mask;
	int offset= PRESET_0_OFFSET+signal*4;

	Debug(5,"scaler_write_preset: card %d\n", card);
	Debug(5,"scaler_write_preset: signal %d\n", signal);
	Debug(5,"scaler_write_preset: val = %d\n", (int)val);

	if ((card+1) > scaler_total_cards) return(ERROR);
	if (!scaler_state[card]->card_exists) return(ERROR);
	if ((signal+1) > MAX_SCALER_CHANNELS) return(ERROR);

	/* write preset; save a copy in scaler_state */
	writeReg32(addr,offset,val-1);
	scaler_state[card]->preset[signal] = val-1;

	/* make the preset scaler count down */
	mask = readReg16(addr,DIRECTION_OFFSET);
	mask |= 1<<signal;
	Debug(5,"scaler_write_preset: up/down mask = 0x%x\n", mask);
	writeReg16(addr,DIRECTION_OFFSET,mask);

	/* enable IRQ from preset channel */
	mask = readReg16(addr,IRQ_MASK_OFFSET);
	mask |= 1<<signal;
	Debug(5,"scaler_write_preset: IRQ mask = 0x%x\n", mask);
	writeReg16(addr,IRQ_MASK_OFFSET,mask);
	return(0);
}