www.pudn.com > EBD9200EMAC.rar > init.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            : ODi   06/26/2002 
//* 
//*---------------------------------------------------------------------------- 
 
#include "AT91RM9200.h" 
#include "lib_AT91RM9200.h" 
 
//*---------------------------------------------------------------------------- 
//* \fn    AT91F_DBGU_Printk 
//* \brief This function is used to send a string through the DBGU channel (Very low level debugging) 
//*---------------------------------------------------------------------------- 
void AT91F_DBGU_Printk( 
	char *buffer) // \arg pointer to a string ending by \0 
{ 
	while(*buffer != '\0') { 
		while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU)); 
		AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, *buffer++); 
	} 
} 
 
//*---------------------------------------------------------------------------- 
//* \fn    AT91F_DataAbort 
//* \brief This function reports an Abort 
//*---------------------------------------------------------------------------- 
void AT91F_SpuriousHandler()  
{ 
	AT91F_DBGU_Printk("-F- Spurious Interrupt detected\n\r"); 
	while (1); 
} 
 
 
//*---------------------------------------------------------------------------- 
//* \fn    AT91F_DataAbort 
//* \brief This function reports an Abort 
//*---------------------------------------------------------------------------- 
void AT91F_DataAbort()  
{ 
	AT91F_DBGU_Printk("-F- Data Abort detected\n\r"); 
	while (1); 
} 
 
//*---------------------------------------------------------------------------- 
//* \fn    AT91F_FetchAbort 
//* \brief This function reports an Abort 
//*---------------------------------------------------------------------------- 
void AT91F_FetchAbort() 
{ 
	AT91F_DBGU_Printk("-F- Prefetch Abort detected\n\r"); 
	while (1); 
} 
 
//*---------------------------------------------------------------------------- 
//* \fn    AT91F_Undef 
//* \brief This function reports an Abort 
//*---------------------------------------------------------------------------- 
void AT91F_Undef()  
{ 
	AT91F_DBGU_Printk("-F- Undef detected\n\r"); 
	while (1); 
} 
 
//*---------------------------------------------------------------------------- 
//* \fn    AT91F_UndefHandler 
//* \brief This function reports that no handler have been set for current IT 
//*---------------------------------------------------------------------------- 
void AT91F_UndefHandler()  
{ 
	AT91F_DBGU_Printk("-F- Undef detected\n\r"); 
	while (1); 
} 
 
 
//*---------------------------------------------------------------------------- 
//* \fn    AT91F_LowLevelInit 
//* \brief This function performs very low level HW initialization 
//*---------------------------------------------------------------------------- 
void AT91F_LowLevelInit() 
{ 
	// 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  
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC); 
	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_Undef); 
 
	// Open PIO for DBGU 
	AT91F_DBGU_CfgPIO(); 
 
	// Configure DBGU 
	AT91F_US_Configure ( 
		(AT91PS_USART) AT91C_BASE_DBGU,          // DBGU base address 
		60000000,             // 60 MHz 
		AT91C_US_ASYNC_MODE,  // mode Register to be programmed 
		115200 ,              // baudrate to be programmed 
		0);                   // timeguard to be programmed 
 
	// Enable Transmitter 
	AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU); 
 
	AT91F_DBGU_Printk("-I- AT91F_LowLevelInit() done\n\r"); 
}