1//*---------------------------------------------------------------------------- 2//* ATMEL Microcontroller Software Support - ROUSSET - 3//*---------------------------------------------------------------------------- 4//* The software is delivered "AS IS" without warranty or condition of any 5//* kind, either express, implied or statutory. This includes without 6//* limitation any warranty or condition with respect to merchantability or 7//* fitness for any particular purpose, or against the infringements of 8//* intellectual property rights of others. 9//*---------------------------------------------------------------------------- 10//* File Name : init.c 11//* Object : Low level initialisations written in C 12//* Creation : HIi 10/10/2003 13//* 14//*---------------------------------------------------------------------------- 15#include "config.h" 16#include "AT91RM9200.h" 17#include "lib_AT91RM9200.h" 18#include "stdio.h" 19 20//*---------------------------------------------------------------------------- 21//* \fn AT91F_DataAbort 22//* \brief This function reports an Abort 23//*---------------------------------------------------------------------------- 24static void AT91F_SpuriousHandler() 25{ 26 puts("ISI"); 27 while (1); 28} 29 30 31//*---------------------------------------------------------------------------- 32//* \fn AT91F_DataAbort 33//* \brief This function reports an Abort 34//*---------------------------------------------------------------------------- 35static void AT91F_DataAbort() 36{ 37 puts("IDA"); 38 while (1); 39} 40 41//*---------------------------------------------------------------------------- 42//* \fn AT91F_FetchAbort 43//* \brief This function reports an Abort 44//*---------------------------------------------------------------------------- 45static void AT91F_FetchAbort() 46{ 47 puts("IFA"); 48 while (1); 49} 50 51//*---------------------------------------------------------------------------- 52//* \fn AT91F_UndefHandler 53//* \brief This function reports that no handler have been set for current IT 54//*---------------------------------------------------------------------------- 55static void AT91F_UndefHandler() 56{ 57 puts("IUD"); 58 while (1); 59} 60 61 62//*-------------------------------------------------------------------------------------- 63//* Function Name : AT91F_InitSdram 64//* Object : Initialize the SDRAM 65//* Input Parameters : 66//* Output Parameters : 67//*-------------------------------------------------------------------------------------- 68static void AT91F_InitSdram() 69{ 70 int *pRegister; 71 72 //* Configure PIOC as peripheral (D16/D31) 73 74 AT91F_PIO_CfgPeriph( 75 AT91C_BASE_PIOC, // PIO controller base address 76 0xFFFF0030, 77 0 78 ); 79 80 //*Init SDRAM 81 pRegister = (int *)0xFFFFFF98; 82 *pRegister = 0x2188c155; 83 pRegister = (int *)0xFFFFFF90; 84 *pRegister = 0x2; 85 pRegister = (int *)0x20000000; 86 *pRegister = 0; 87 pRegister = (int *)0xFFFFFF90; 88 *pRegister = 0x4; 89 pRegister = (int *)0x20000000; 90 *pRegister = 0; 91 *pRegister = 0; 92 *pRegister = 0; 93 *pRegister = 0; 94 *pRegister = 0; 95 *pRegister = 0; 96 *pRegister = 0; 97 *pRegister = 0; 98 pRegister = (int *)0xFFFFFF90; 99 *pRegister = 0x3; 100 pRegister = (int *)0x20000080; 101 *pRegister = 0; 102 103 pRegister = (int *)0xFFFFFF94; 104 *pRegister = 0x2e0; 105 pRegister = (int *)0x20000000; 106 *pRegister = 0; 107 108 pRegister = (int *)0xFFFFFF90; 109 *pRegister = 0x00; 110 pRegister = (int *)0x20000000; 111 *pRegister = 0; 112} 113 114 115//*---------------------------------------------------------------------------- 116//* \fn AT91F_InitFlash 117//* \brief This function performs low level HW initialization 118//*---------------------------------------------------------------------------- 119static void AT91F_InitMemories() 120{ 121 int *pEbi = (int *)0xFFFFFF60; 122 123 //* Setup MEMC to support all connected memories (CS0 = FLASH; CS1=SDRAM) 124 pEbi = (int *)0xFFFFFF60; 125 *pEbi = 0x00000002; 126 127 //* CS0 cs for flash 128 pEbi = (int *)0xFFFFFF70; 129 *pEbi = 0x00003284; 130 131 AT91F_InitSdram(); 132} 133 134 135 136//*---------------------------------------------------------------------------- 137//* \fn AT91F_LowLevelInit 138//* \brief This function performs very low level HW initialization 139//*---------------------------------------------------------------------------- 140void AT91F_LowLevelInit(void) 141{ 142 int i; 143 144 // Init Interrupt Controller 145 AT91F_AIC_Open( 146 AT91C_BASE_AIC, // pointer to the AIC registers 147 AT91C_AIC_BRANCH_OPCODE, // IRQ exception vector 148 AT91F_UndefHandler, // FIQ exception vector 149 AT91F_UndefHandler, // AIC default handler 150 AT91F_SpuriousHandler, // AIC spurious handler 151 0); // Protect mode 152 153 // Perform 8 End Of Interrupt Command to make s�re AIC will not Lock out nIRQ 154 for(i=0; i<8; i++) 155 AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 156 157 AT91F_AIC_SetExceptionVector((unsigned int *)0x0C, AT91F_FetchAbort); 158 AT91F_AIC_SetExceptionVector((unsigned int *)0x10, AT91F_DataAbort); 159 AT91F_AIC_SetExceptionVector((unsigned int *)0x4, AT91F_UndefHandler); 160 161 //Initialize SDRAM and Flash 162 AT91F_InitMemories(); 163 164} 165 166