removed mmu.c
modified dma routines
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include <MCF5475.h>
|
#include <MCF5475.h>
|
||||||
|
|
||||||
extern int spidma_init(void);
|
extern int dma_init(void);
|
||||||
|
|
||||||
|
|
||||||
#endif /* _SPIDMA_H_ */
|
#endif /* _SPIDMA_H_ */
|
||||||
|
|||||||
@@ -153,6 +153,33 @@ void nvram_init(void)
|
|||||||
xprintf("finished\r\n");
|
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 */
|
/* ACP interrupt controller */
|
||||||
#define FPGA_INTR_CONTRL (volatile uint32_t *) 0xf0010000
|
#define FPGA_INTR_CONTRL (volatile uint32_t *) 0xf0010000
|
||||||
#define FPGA_INTR_ENABLE (volatile uint8_t *) 0xf0010004
|
#define FPGA_INTR_ENABLE (volatile uint8_t *) 0xf0010004
|
||||||
@@ -266,7 +293,7 @@ void BaS(void)
|
|||||||
/* set Falcon bus control register */
|
/* set Falcon bus control register */
|
||||||
/* sets bit 3 and 6. Both are undefined on an original Falcon? */
|
/* 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 */
|
/* ST RAM */
|
||||||
|
|
||||||
@@ -281,24 +308,7 @@ void BaS(void)
|
|||||||
* (uint32_t *) 0x5a4 = 0x1d000000;
|
* (uint32_t *) 0x5a4 = 0x1d000000;
|
||||||
* (uint32_t *) 0x5a8 = 0x1357bd13; /* ramvalid TOS system variable */
|
* (uint32_t *) 0x5a8 = 0x1357bd13; /* ramvalid TOS system variable */
|
||||||
|
|
||||||
xprintf("init ACIA: ");
|
acia_init();
|
||||||
/* 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");
|
|
||||||
|
|
||||||
/* Test for pseudo-supervisor mode: DIP switch #6 down */
|
/* Test for pseudo-supervisor mode: DIP switch #6 down */
|
||||||
if (DIP_SWITCH & (1 << 7)) {
|
if (DIP_SWITCH & (1 << 7)) {
|
||||||
@@ -319,7 +329,7 @@ void BaS(void)
|
|||||||
xprintf("Call OS. BaS initialization finished...\r\n");
|
xprintf("Call OS. BaS initialization finished...\r\n");
|
||||||
enable_coldfire_interrupts();
|
enable_coldfire_interrupts();
|
||||||
|
|
||||||
spidma_init();
|
dma_init();
|
||||||
|
|
||||||
ROM_HEADER* os_header = (ROM_HEADER*)TOS;
|
ROM_HEADER* os_header = (ROM_HEADER*)TOS;
|
||||||
os_header->initial_pc();
|
os_header->initial_pc();
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ extern char _SYS_SRAM[];
|
|||||||
void *dma_memcpy(void *dst, void *src, size_t n)
|
void *dma_memcpy(void *dst, void *src, size_t n)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
int speed;
|
||||||
int32_t start = MCF_SLT_SCNT(0);
|
int32_t start = MCF_SLT_SCNT(0);
|
||||||
int32_t end;
|
int32_t end;
|
||||||
|
|
||||||
@@ -65,7 +66,9 @@ void *dma_memcpy(void *dst, void *src, size_t n)
|
|||||||
|
|
||||||
end = MCF_SLT_SCNT(0);
|
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_
|
#ifdef _NOT_USED_
|
||||||
__asm__ __volatile__("move.w sr,d0\n\t"
|
__asm__ __volatile__("move.w sr,d0\n\t"
|
||||||
"stop #0x270\n\t"
|
"stop #0x270\n\t"
|
||||||
@@ -75,10 +78,11 @@ void *dma_memcpy(void *dst, void *src, size_t n)
|
|||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
int spidma_init(void)
|
int dma_init(void)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
xprintf("MCD DMA API initialization: ");
|
||||||
res = MCD_initDma((dmaRegs *) &MCF_DMA_TASKBAR, SYS_SRAM, MCD_RELOC_TASKS | MCD_COMM_PREFETCH_EN);
|
res = MCD_initDma((dmaRegs *) &MCF_DMA_TASKBAR, SYS_SRAM, MCD_RELOC_TASKS | MCD_COMM_PREFETCH_EN);
|
||||||
if (res != MCD_OK)
|
if (res != MCD_OK)
|
||||||
{
|
{
|
||||||
@@ -88,7 +92,8 @@ int spidma_init(void)
|
|||||||
xprintf("DMA API initialized. Tasks are at %p\r\n", SYS_SRAM);
|
xprintf("DMA API initialized. Tasks are at %p\r\n", SYS_SRAM);
|
||||||
|
|
||||||
// test
|
// 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");
|
xprintf("DMA finished\r\n");
|
||||||
return 1;
|
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