started MMU implementation in C

This commit is contained in:
Markus Fröschle
2013-08-01 16:01:35 +00:00
parent e0e93657c4
commit 951447352c
4 changed files with 50 additions and 3 deletions

View File

@@ -66,6 +66,7 @@ CSRCS= \
$(SRCDIR)/BaS.c \
$(SRCDIR)/cache.c \
$(SRCDIR)/mmc.c \
$(SRCDIR)/mmu.c \
$(SRCDIR)/unicode.c \
$(SRCDIR)/ff.c \
$(SRCDIR)/sd_card.c \
@@ -79,7 +80,6 @@ CSRCS= \
ASRCS= \
$(SRCDIR)/startcf.S \
$(SRCDIR)/printf_helper.S \
$(SRCDIR)/mmu.S \
$(SRCDIR)/exceptions.S \
$(SRCDIR)/supervisor.S \
$(SRCDIR)/illegal_instruction.S \

22
include/mmu.h Normal file
View File

@@ -0,0 +1,22 @@
/*
* mmu.h
*
* Created on: 01.08.2013
* Author: froesm1
*/
#ifndef _MMU_H_
#define _MMU_H_
#define STD_MMUTR (MCF_MMU_MMUTR_SG | MCF_MMU_MMUTR_V)
#define MMUORD_D (MCF_MMU_MMUOR_ACC | MCF_MMU_MMUOR_UAA)
#define MMUORD_I (MCF_MMU_MMUOR_ITLB | MCF_MMU_MUOR_ACC | MCF_MMU_MMUOR_UAA)
#define WRITETHROUGH_MMUDR (MCF_MMU_MMUDR_SZ(00) | MCF_MMU_MMUDR_CM(00) | MCF_MMU_MMUDR_R | MCF_MMU_MMUDR_W | MCF_MMU_MMUDR_X)
#define COPYBACK_MMUDR (MCF_MMU_MMUDR_SZ(00) | MCF_MMU_MMUDR_CM(01) | MCF_MMU_MMUDR_R | MCF_MMU_MMUDR_W | MCF_MMU_MMUDR_X)
#define NOCACHE_PRECISE_MMUDR (MCF_MMU_MMUDR_SZ(00) | MCF_MMU_MMUDR_CM(10) | MCF_MMU_MMUDR_R | MCF_MMU_MMUDR_W | MCF_MMU_MMUDR_X)
extern void mmu_init(void);
extern void mmutr_miss(void) __attribute__((interrupt));
#endif /* _MMU_H_ */

View File

@@ -138,7 +138,7 @@ _mmu_init:
move.l d0,_video_tlb // set page as video page
clr.l _video_sbt // clear time
#ifdef _NOT_USED_
//-------------------------------------------------------------------------------------
// Make the TOS (in SDRAM) read-only
move.l #__TOS+std_mmutr,d0
@@ -147,7 +147,6 @@ _mmu_init:
move.l d1,MCF_MMU_MMUDR
move.l d2,MCF_MMU_MMUOR // setzen read only ?????? noch nicht
move.l d3,MCF_MMU_MMUOR // setzen
#endif /* _NOT_USED_ */
// 00f0'0000 locked
move.l #0x00f00000|std_mmutr,d0

26
sources/mmu.c Normal file
View File

@@ -0,0 +1,26 @@
/*
* mmu.c
*
* Created on: 01.08.2013
* Author: froesm1
*/
#include <MCF5475.h>
#include "mmu.h"
void mmu_init(void)
{
/*
* set ASID and shadow register
*/
__asm__ __volatile__("clr.l d0\n\t"
"movec d0,ASID\n\t"
"move.l d0,_rt_asid\n\t");
}
__attribute__((interrupt)) void mmutr_miss(void)
{
}