AT91 MMU Simple project for AT91RM9261EK - IAR EW ARM

 

Introduction

The goal of this demonstration project is to show how to initialise cache and MMU on the AT91RM9261EK board.  It runs a dhrystone algorithm, caches and MMU enabled/disabled.

Running the application

This application is linked to be loaded and run in iRAM (0x0000_0000). This Download to the target can be done using the JTAG connection.

This very small application sends through the DBGU serial port (115.2Kbps, 8data bits, no parity, 1 stop bit, no flux control J15),  messages corresponding to the function name where the printing function has been invoked.

Description

Please refer to the AT91 Simple project for AT91RM9261EK for the description of the initialisation.

The dhrystone algorithm is invoked from the AT91F_Dhrystone (main.c). This function returns how many times the function testloop (dhry_1.c) is called while the CRTR register has not been incremented.

The main program

·         calls the AT91F_Dhrystone function caches disabled,

·         then Icache enabled (MMU disabled). Obviously performance is rises a lot.

·         Then the MMU is initialised calling AT91F_InitMMU (main.c).

o        This function reset the level 1 page table entry

o        Then it configures 4 entries in this page table:

§         1Mbyte section at 0x0000_0000. This is a direct translation: virtual address = physical address. This section is cachable.

§         1Mbyte section at 0x1000_0000 it mirrors the physical iRAM located at 0x0000_0000. This section is cachable.

§         1Mbyte section at 0x2000_0000. This is a direct translation: virtual address = physical address. This section is cachable.

§         1Mbyte section at 0xFFF0_0000. This is done to access peripheral area. This is a direct translation: virtual address = physical address. This section is non cachable in order to get a direct access to peripheral registers.

o        Set the translation table base address register

o        Set the domain access register

o        And finally enable the MMU

·         Dhrystone is then run with only the Icache enabled then with the I + D cache enabled.

The SDRAM is mirrored in order to be able to lock the cache running instructions in a non cachable area. This allows flushing the instruction cache and keeping a strict control while locking perfected instructions. Then the Dhrystone algorithm is run from a cacheable are. This is why the access to the AT91F_Dhrystone function is done through the pDhrystone pointer.

Source files

./init.c

includes low level functions definitions

./main.c

this is the application

./lib_arm926ej_s.h

Inlined functions to drive CP15 register. Should be included in lib_AT91SAM9261.h ( in the product part of the library)

./mmu.c

Common MMU and Cache operations

/at91_cstartup.s7

cstartup