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); }
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++; } }
/*************************************************** * 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); }