removed mmu.c
modified dma routines
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
|
||||
#include <MCF5475.h>
|
||||
|
||||
extern int spidma_init(void);
|
||||
extern int dma_init(void);
|
||||
|
||||
|
||||
#endif /* _SPIDMA_H_ */
|
||||
|
||||
@@ -153,6 +153,33 @@ void nvram_init(void)
|
||||
xprintf("finished\r\n");
|
||||
}
|
||||
|
||||
#define KBD_ACIA_CONTROL ((uint8_t *) 0xfffffc00)
|
||||
#define MIDI_ACIA_CONTROL ((uint8_t *) 0xfffffc04)
|
||||
#define MFP_INTR_IN_SERVICE_A ((uint8_t *) 0xfffffa0f)
|
||||
#define MFP_INTR_IN_SERVICE_B ((uint8_t *) 0xfffffa11)
|
||||
|
||||
void acia_init()
|
||||
{
|
||||
xprintf("init ACIA: ");
|
||||
/* init ACIA */
|
||||
* KBD_ACIA_CONTROL = 3; /* master reset */
|
||||
NOP();
|
||||
|
||||
* MIDI_ACIA_CONTROL = 3; /* master reset */
|
||||
NOP();
|
||||
|
||||
* KBD_ACIA_CONTROL = 0x96; /* clock div = 64, 8N1, RTS low, TX int disable, RX int enable */
|
||||
NOP();
|
||||
|
||||
* MFP_INTR_IN_SERVICE_A = -1;
|
||||
NOP();
|
||||
|
||||
* MFP_INTR_IN_SERVICE_B = -1;
|
||||
NOP();
|
||||
|
||||
xprintf("finished\r\n");
|
||||
}
|
||||
|
||||
/* ACP interrupt controller */
|
||||
#define FPGA_INTR_CONTRL (volatile uint32_t *) 0xf0010000
|
||||
#define FPGA_INTR_ENABLE (volatile uint8_t *) 0xf0010004
|
||||
@@ -266,7 +293,7 @@ void BaS(void)
|
||||
/* set Falcon bus control register */
|
||||
/* sets bit 3 and 6. Both are undefined on an original Falcon? */
|
||||
|
||||
* (volatile uint8_t *) 0xffff8007 = 0x48; /* FIXME: what's that ? */
|
||||
* (volatile uint8_t *) 0xffff8007 = 0x48;
|
||||
|
||||
/* ST RAM */
|
||||
|
||||
@@ -281,24 +308,7 @@ void BaS(void)
|
||||
* (uint32_t *) 0x5a4 = 0x1d000000;
|
||||
* (uint32_t *) 0x5a8 = 0x1357bd13; /* ramvalid TOS system variable */
|
||||
|
||||
xprintf("init ACIA: ");
|
||||
/* init ACIA */
|
||||
* (uint8_t *) 0xfffffc00 = 3;
|
||||
NOP();
|
||||
|
||||
* (uint8_t *) 0xfffffc04 = 3;
|
||||
NOP();
|
||||
|
||||
* (uint8_t *) 0xfffffc00 = 0x96;
|
||||
NOP();
|
||||
|
||||
* (uint8_t *) 0xfffffa0f = -1;
|
||||
NOP();
|
||||
|
||||
* (uint8_t *) 0xfffffa11 = -1;
|
||||
NOP();
|
||||
|
||||
xprintf("finished\r\n");
|
||||
acia_init();
|
||||
|
||||
/* Test for pseudo-supervisor mode: DIP switch #6 down */
|
||||
if (DIP_SWITCH & (1 << 7)) {
|
||||
@@ -319,7 +329,7 @@ void BaS(void)
|
||||
xprintf("Call OS. BaS initialization finished...\r\n");
|
||||
enable_coldfire_interrupts();
|
||||
|
||||
spidma_init();
|
||||
dma_init();
|
||||
|
||||
ROM_HEADER* os_header = (ROM_HEADER*)TOS;
|
||||
os_header->initial_pc();
|
||||
|
||||
@@ -16,6 +16,7 @@ extern char _SYS_SRAM[];
|
||||
void *dma_memcpy(void *dst, void *src, size_t n)
|
||||
{
|
||||
int ret;
|
||||
int speed;
|
||||
int32_t start = MCF_SLT_SCNT(0);
|
||||
int32_t end;
|
||||
|
||||
@@ -65,7 +66,9 @@ void *dma_memcpy(void *dst, void *src, size_t n)
|
||||
|
||||
end = MCF_SLT_SCNT(0);
|
||||
|
||||
xprintf("took %d ms (1 Mbyte)\r\n", (start - end) / 132 / 1000);
|
||||
speed = n / (start - end) / 132 / 100;
|
||||
xprintf("took %d ms (%d.%d Mbytes/second)\r\n",
|
||||
(start - end) / 132 / 1000, speed / 10, speed % 10);
|
||||
#ifdef _NOT_USED_
|
||||
__asm__ __volatile__("move.w sr,d0\n\t"
|
||||
"stop #0x270\n\t"
|
||||
@@ -75,10 +78,11 @@ void *dma_memcpy(void *dst, void *src, size_t n)
|
||||
return dst;
|
||||
}
|
||||
|
||||
int spidma_init(void)
|
||||
int dma_init(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
xprintf("MCD DMA API initialization: ");
|
||||
res = MCD_initDma((dmaRegs *) &MCF_DMA_TASKBAR, SYS_SRAM, MCD_RELOC_TASKS | MCD_COMM_PREFETCH_EN);
|
||||
if (res != MCD_OK)
|
||||
{
|
||||
@@ -88,7 +92,8 @@ int spidma_init(void)
|
||||
xprintf("DMA API initialized. Tasks are at %p\r\n", SYS_SRAM);
|
||||
|
||||
// test
|
||||
dma_memcpy((void *) 0x1e000000, (void *) 0xe0700000, 0x100000);
|
||||
dma_memcpy((void *) 0x1e000000, (void *) 0xe0700000, 0x100000); /* copy one megabyte of flash to RAM */
|
||||
|
||||
xprintf("DMA finished\r\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* mmu.c
|
||||
*
|
||||
* Created on: 01.08.2013
|
||||
* Author: froesm1
|
||||
*/
|
||||
|
||||
|
||||
#include <MCF5475.h>
|
||||
#include "mmu.h"
|
||||
|
||||
void mmu_init(void)
|
||||
{
|
||||
uint32_t regval;
|
||||
/*
|
||||
* set ASID and shadow register
|
||||
*/
|
||||
__asm__ __volatile__("clr.l d0\n\t"
|
||||
"movec d0,ASID\n\t"
|
||||
"move.l d0,_rt_asid\n\t");
|
||||
/*
|
||||
* set ACR0 and shadow register
|
||||
*/
|
||||
__asm__ __volatile__("move.l #0xc03fc040,d0\n\t"
|
||||
"movec d0,ACR0\n\t"
|
||||
"move.l d0,_rt_acr0\n\t");
|
||||
|
||||
/*
|
||||
* set ACR1 and shadow register
|
||||
*/
|
||||
__asm__ __volatile__("move.l #0x601fc000, d0\n\t"
|
||||
"movec d0,ACR1\n\t"
|
||||
"move.l d0,_rt_acr1\n\t");
|
||||
|
||||
/*
|
||||
* set ACR2 and shadow register
|
||||
*/
|
||||
__asm__ __volatile__("move.l #0xe007c400,d0\n\t"
|
||||
"movec d0,ACR2\n\t"
|
||||
"move.l d0,_rt_acr2\n\t");
|
||||
|
||||
/*
|
||||
* set ACR3 and shadow register (currently unused)
|
||||
*/
|
||||
__asm__ __volatile__("clr.l d0\n\t"
|
||||
"movec d0,ACR3\n\t"
|
||||
"move.l d0,_rt_acr3\n\t");
|
||||
|
||||
/*
|
||||
* set MMUBAR
|
||||
*/
|
||||
__asm__ __volatile__("movel. #__MMUBAR+1,d0\n\t"
|
||||
"movec d0,MMUBAR\n\t"
|
||||
"move.l d0,_rt_mmubar\n\t"
|
||||
"nop\n\t");
|
||||
|
||||
MCF_MMU_MMUOR = MCF_MMU_MMUOR; /* clear all entries */
|
||||
|
||||
/*
|
||||
* 0x00000000 locked
|
||||
*/
|
||||
MCF_MMU_MMUTR = 0x0L | STD_MMUTR;
|
||||
MCF_MMU_MMUDR = 0x0L | COPYBACK_MMUDR | MCF_MMU_MMUDR_LK;
|
||||
MCF_MMU_MMUOR = MMUORD_D;
|
||||
MCF_MMU_MMUOR = MMUORD_I;
|
||||
|
||||
/*
|
||||
* 0x00d00000 locked ID=6
|
||||
* video RAM: read write execute normal write true
|
||||
*/
|
||||
MCF_MMU_MMUTR = 0x00d00000 | MCF_MMU_MMUTR_ID(SCA_PAGE_ID) | STD_MMUTR;
|
||||
MCF_MMU_MMUDR = 0x60d00000 | WRITETHROUGH_MMUDR | MCF_MMU_MMUDR_LK;
|
||||
MCF_MMU_MMUOR = MMUORD_D;
|
||||
MCF_MMU_MMUOR = 0x00d00000 | STD_MMUTR;
|
||||
|
||||
video_tlb = 0x2000;
|
||||
video_sbt = 0;
|
||||
}
|
||||
|
||||
|
||||
__attribute__((interrupt)) void mmutr_miss(void)
|
||||
{
|
||||
}
|
||||
Reference in New Issue
Block a user