Newer
Older
uwuboot / source / arm9 / ndma.c
/**
 * 2016
 * profi200
 */

#include "types.h"
#include "arm9/ndma.h"
#include "arm9/interrupt.h"



void NDMA_copy(u32 *dest, const u32 *source, u32 num)
{
	REG_NDMA7_SRC_ADDR = (u32)source;
	REG_NDMA7_DST_ADDR = (u32)dest;
	REG_NDMA7_WRITE_CNT = num;
	REG_NDMA7_BLOCK_CNT = NDMA_BLOCK_SYS_FREQ;
	REG_NDMA7_CNT = NDMA_ENABLE | NDMA_IRQ_ENABLE | NDMA_IMMEDIATE_MODE | NDMA_SRC_UPDATE_INC | NDMA_DST_UPDATE_INC;

	while(!(REG_IRQ_IF & (u32)IRQ_DMAC_1_7))
	{
		waitForIrq();
	}
	REG_IRQ_IF = (u32)IRQ_DMAC_1_7;
}

void NDMA_fill(u32 *dest, u32 value, u32 num)
{
	REG_NDMA7_DST_ADDR = (u32)dest;
	REG_NDMA7_WRITE_CNT = num;
	REG_NDMA7_BLOCK_CNT = NDMA_BLOCK_SYS_FREQ;
	REG_NDMA7_FILL_DATA = value;
	REG_NDMA7_CNT = NDMA_ENABLE | NDMA_IRQ_ENABLE | NDMA_IMMEDIATE_MODE | NDMA_SRC_UPDATE_FILL | NDMA_DST_UPDATE_INC;

	while(!(REG_IRQ_IF & (u32)IRQ_DMAC_1_7))
	{
		waitForIrq();
	}
	REG_IRQ_IF = (u32)IRQ_DMAC_1_7;
}