mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8653 3c298f89-4303-0410-b956-a3cf2f4a3e73
166 lines
4.9 KiB
C
166 lines
4.9 KiB
C
//*----------------------------------------------------------------------------
|
|
//* ATMEL Microcontroller Software Support - ROUSSET -
|
|
//*----------------------------------------------------------------------------
|
|
//* The software is delivered "AS IS" without warranty or condition of any
|
|
//* kind, either express, implied or statutory. This includes without
|
|
//* limitation any warranty or condition with respect to merchantability or
|
|
//* fitness for any particular purpose, or against the infringements of
|
|
//* intellectual property rights of others.
|
|
//*----------------------------------------------------------------------------
|
|
//* File Name : init.c
|
|
//* Object : Low level initialisations written in C
|
|
//* Creation : HIi 10/10/2003
|
|
//*
|
|
//*----------------------------------------------------------------------------
|
|
#include "config.h"
|
|
#include "AT91RM9200.h"
|
|
#include "lib_AT91RM9200.h"
|
|
#include "stdio.h"
|
|
|
|
//*----------------------------------------------------------------------------
|
|
//* \fn AT91F_DataAbort
|
|
//* \brief This function reports an Abort
|
|
//*----------------------------------------------------------------------------
|
|
static void AT91F_SpuriousHandler()
|
|
{
|
|
puts("ISI");
|
|
while (1);
|
|
}
|
|
|
|
|
|
//*----------------------------------------------------------------------------
|
|
//* \fn AT91F_DataAbort
|
|
//* \brief This function reports an Abort
|
|
//*----------------------------------------------------------------------------
|
|
static void AT91F_DataAbort()
|
|
{
|
|
puts("IDA");
|
|
while (1);
|
|
}
|
|
|
|
//*----------------------------------------------------------------------------
|
|
//* \fn AT91F_FetchAbort
|
|
//* \brief This function reports an Abort
|
|
//*----------------------------------------------------------------------------
|
|
static void AT91F_FetchAbort()
|
|
{
|
|
puts("IFA");
|
|
while (1);
|
|
}
|
|
|
|
//*----------------------------------------------------------------------------
|
|
//* \fn AT91F_UndefHandler
|
|
//* \brief This function reports that no handler have been set for current IT
|
|
//*----------------------------------------------------------------------------
|
|
static void AT91F_UndefHandler()
|
|
{
|
|
puts("IUD");
|
|
while (1);
|
|
}
|
|
|
|
|
|
//*--------------------------------------------------------------------------------------
|
|
//* Function Name : AT91F_InitSdram
|
|
//* Object : Initialize the SDRAM
|
|
//* Input Parameters :
|
|
//* Output Parameters :
|
|
//*--------------------------------------------------------------------------------------
|
|
static void AT91F_InitSdram()
|
|
{
|
|
int *pRegister;
|
|
|
|
//* Configure PIOC as peripheral (D16/D31)
|
|
|
|
AT91F_PIO_CfgPeriph(
|
|
AT91C_BASE_PIOC, // PIO controller base address
|
|
0xFFFF0030,
|
|
0
|
|
);
|
|
|
|
//*Init SDRAM
|
|
pRegister = (int *)0xFFFFFF98;
|
|
*pRegister = 0x2188c155;
|
|
pRegister = (int *)0xFFFFFF90;
|
|
*pRegister = 0x2;
|
|
pRegister = (int *)0x20000000;
|
|
*pRegister = 0;
|
|
pRegister = (int *)0xFFFFFF90;
|
|
*pRegister = 0x4;
|
|
pRegister = (int *)0x20000000;
|
|
*pRegister = 0;
|
|
*pRegister = 0;
|
|
*pRegister = 0;
|
|
*pRegister = 0;
|
|
*pRegister = 0;
|
|
*pRegister = 0;
|
|
*pRegister = 0;
|
|
*pRegister = 0;
|
|
pRegister = (int *)0xFFFFFF90;
|
|
*pRegister = 0x3;
|
|
pRegister = (int *)0x20000080;
|
|
*pRegister = 0;
|
|
|
|
pRegister = (int *)0xFFFFFF94;
|
|
*pRegister = 0x2e0;
|
|
pRegister = (int *)0x20000000;
|
|
*pRegister = 0;
|
|
|
|
pRegister = (int *)0xFFFFFF90;
|
|
*pRegister = 0x00;
|
|
pRegister = (int *)0x20000000;
|
|
*pRegister = 0;
|
|
}
|
|
|
|
|
|
//*----------------------------------------------------------------------------
|
|
//* \fn AT91F_InitFlash
|
|
//* \brief This function performs low level HW initialization
|
|
//*----------------------------------------------------------------------------
|
|
static void AT91F_InitMemories()
|
|
{
|
|
int *pEbi = (int *)0xFFFFFF60;
|
|
|
|
//* Setup MEMC to support all connected memories (CS0 = FLASH; CS1=SDRAM)
|
|
pEbi = (int *)0xFFFFFF60;
|
|
*pEbi = 0x00000002;
|
|
|
|
//* CS0 cs for flash
|
|
pEbi = (int *)0xFFFFFF70;
|
|
*pEbi = 0x00003284;
|
|
|
|
AT91F_InitSdram();
|
|
}
|
|
|
|
|
|
|
|
//*----------------------------------------------------------------------------
|
|
//* \fn AT91F_LowLevelInit
|
|
//* \brief This function performs very low level HW initialization
|
|
//*----------------------------------------------------------------------------
|
|
void AT91F_LowLevelInit(void)
|
|
{
|
|
int i;
|
|
|
|
// Init Interrupt Controller
|
|
AT91F_AIC_Open(
|
|
AT91C_BASE_AIC, // pointer to the AIC registers
|
|
AT91C_AIC_BRANCH_OPCODE, // IRQ exception vector
|
|
AT91F_UndefHandler, // FIQ exception vector
|
|
AT91F_UndefHandler, // AIC default handler
|
|
AT91F_SpuriousHandler, // AIC spurious handler
|
|
0); // Protect mode
|
|
|
|
// Perform 8 End Of Interrupt Command to make sýre AIC will not Lock out nIRQ
|
|
for(i=0; i<8; i++)
|
|
AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
|
|
|
|
AT91F_AIC_SetExceptionVector((unsigned int *)0x0C, AT91F_FetchAbort);
|
|
AT91F_AIC_SetExceptionVector((unsigned int *)0x10, AT91F_DataAbort);
|
|
AT91F_AIC_SetExceptionVector((unsigned int *)0x4, AT91F_UndefHandler);
|
|
|
|
//Initialize SDRAM and Flash
|
|
AT91F_InitMemories();
|
|
|
|
}
|
|
|