started MMU implementation in C
This commit is contained in:
@@ -66,6 +66,7 @@ CSRCS= \
|
|||||||
$(SRCDIR)/BaS.c \
|
$(SRCDIR)/BaS.c \
|
||||||
$(SRCDIR)/cache.c \
|
$(SRCDIR)/cache.c \
|
||||||
$(SRCDIR)/mmc.c \
|
$(SRCDIR)/mmc.c \
|
||||||
|
$(SRCDIR)/mmu.c \
|
||||||
$(SRCDIR)/unicode.c \
|
$(SRCDIR)/unicode.c \
|
||||||
$(SRCDIR)/ff.c \
|
$(SRCDIR)/ff.c \
|
||||||
$(SRCDIR)/sd_card.c \
|
$(SRCDIR)/sd_card.c \
|
||||||
@@ -79,7 +80,6 @@ CSRCS= \
|
|||||||
ASRCS= \
|
ASRCS= \
|
||||||
$(SRCDIR)/startcf.S \
|
$(SRCDIR)/startcf.S \
|
||||||
$(SRCDIR)/printf_helper.S \
|
$(SRCDIR)/printf_helper.S \
|
||||||
$(SRCDIR)/mmu.S \
|
|
||||||
$(SRCDIR)/exceptions.S \
|
$(SRCDIR)/exceptions.S \
|
||||||
$(SRCDIR)/supervisor.S \
|
$(SRCDIR)/supervisor.S \
|
||||||
$(SRCDIR)/illegal_instruction.S \
|
$(SRCDIR)/illegal_instruction.S \
|
||||||
|
|||||||
22
BaS_gcc/include/mmu.h
Normal file
22
BaS_gcc/include/mmu.h
Normal 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_ */
|
||||||
@@ -138,7 +138,7 @@ _mmu_init:
|
|||||||
move.l d0,_video_tlb // set page as video page
|
move.l d0,_video_tlb // set page as video page
|
||||||
clr.l _video_sbt // clear time
|
clr.l _video_sbt // clear time
|
||||||
|
|
||||||
#ifdef _NOT_USED_
|
|
||||||
//-------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------
|
||||||
// Make the TOS (in SDRAM) read-only
|
// Make the TOS (in SDRAM) read-only
|
||||||
move.l #__TOS+std_mmutr,d0
|
move.l #__TOS+std_mmutr,d0
|
||||||
@@ -147,7 +147,6 @@ _mmu_init:
|
|||||||
move.l d1,MCF_MMU_MMUDR
|
move.l d1,MCF_MMU_MMUDR
|
||||||
move.l d2,MCF_MMU_MMUOR // setzen read only ?????? noch nicht
|
move.l d2,MCF_MMU_MMUOR // setzen read only ?????? noch nicht
|
||||||
move.l d3,MCF_MMU_MMUOR // setzen
|
move.l d3,MCF_MMU_MMUOR // setzen
|
||||||
#endif /* _NOT_USED_ */
|
|
||||||
|
|
||||||
// 00f0'0000 locked
|
// 00f0'0000 locked
|
||||||
move.l #0x00f00000|std_mmutr,d0
|
move.l #0x00f00000|std_mmutr,d0
|
||||||
|
|||||||
26
BaS_gcc/sources/mmu.c
Normal file
26
BaS_gcc/sources/mmu.c
Normal 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)
|
||||||
|
{
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user