Beispiel #1
0
void gpmi_init_dma_channel(int u32ChipNumber)
{
    reg32_t r32ChipDmaNumber = NAND0_APBH_CH + u32ChipNumber;
    reg32_t chipDmaMask = 1 << r32ChipDmaNumber;

    // Reset dma channel
    HW_APBH_CHANNEL_CTRL_SET(BF_APBH_CHANNEL_CTRL_RESET_CHANNEL(chipDmaMask));

    // Wait for the reset to complete
    while (HW_APBH_CHANNEL_CTRL.B.RESET_CHANNEL & chipDmaMask);

    // Clear IRQ
    HW_APBH_CTRL1_CLR(chipDmaMask);
}
void stmp3xxx_arch_dma_clear_interrupt(int channel)
{
	int dmabus = channel / 16;

	switch (dmabus) {
	case STMP3XXX_BUS_APBH:
		HW_APBH_CTRL1_CLR(1 << (channel % 16));
		HW_APBH_CTRL2_CLR(1 << (channel % 16));
		break;

	case STMP3XXX_BUS_APBX:
		HW_APBX_CTRL1_CLR(1 << (channel % 16));
		HW_APBX_CTRL2_CLR(1 << (channel % 16));
		break;
	}
}