⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.c

📁 Analog公司的ADSP_BF532上面实现以太网接口的源码
💻 C
字号:
//##############################################################
//#
//# STARTUP.C
//#
//# ADSP-21535 Embedded Web Server Project
//#
//# (c) ANALOG DEVICES 2002
//#     eDSP Division
//#     Stefan Hacker
//#     26-DEC-2002
//#
//# History
//#     16-APR-2003 HS  release 1.0
//#

#include <cdefbf533.h>
#include <ccblkfn.h>
#include <defBF533.h>
#include <math.h>

#include <sys\exception.h>		//Interrupt Handling Header
#include <signal.h>
#include <stdio.h>

#include "io_sprt.h"
#include "globals.h"
#include "cf_ide.h"
#include "startup.h"

#include "STAMP_Drivers.h"

#define MC section("L1_code")
volatile int i_exception = 0;

void init_system()
{

	sysreg_write(reg_SYSCFG, 0x32);	
	
	Set_PLL_Frequencies(&STAMP_399C_133S);

	Init_SDRAM(133);	
	
	Init_EBIU();
	
	Init_Flags();
	
	// switch to Ethernet
	LED6_On();
	Select_Ethernet();
	    
    // RTC setup
}

//MC void IRQ_A_handler()
EX_INTERRUPT_HANDLER(IRQ_A_handler)
{
    // set IRQ_DISK occurred to TRUE
    IRQ_DISK = 1;
    
    // clear IRQ Request
    //_outpw(FIO_FLAG_C, _inpw(FIO_FLAG_C) & 0x100);
    *pFIO_FLAG_C = 0x100;
    
}

short 	TCPIP_IRQS=0;
//MC void IRQ_B_handler()
EX_INTERRUPT_HANDLER(IRQ_B_handler)
{
    // set IRQ_LAN occurred to TRUE
    IRQ_LAN = 1;

    smc_interrupt();

    // clear IRQ Request
    //_outpw(FIO_FLAG_C, _inpw(FIO_FLAG_C) & 0x200);
    *pFIO_FLAG_C = PF7;
    TCPIP_IRQS++;
}

//MC void IRQ_T0_handler()
EX_INTERRUPT_HANDLER(IRQ_T0_handler)
{
    // decrement 250ms timer tics
    Timeout_DISK--;
    Timeout_LAN--;
    Timeout_SYS--;
    
    // TCP/IP Stack setting
    TCP_ISN_Gen_High++;
    TCP_Timer++;

    // clear Timer0 IRQ Request
    //_outpw(TIMER0_STATUS, 1);
    *pTIMER_STATUS = 1;
}


/******************************************************************************
 * STARTUP: init_IRQs()
 *
 * Purpose:
 *  Start up CF drive
 *
 * Note:
 *  
 *
 *****************************************************************************/
void ATA_init()
{
    // identify CompactFLASH drive
    ATA_identify();
    
    // get logical disk layout
    ATA_get_boot_block();
    
    // set and read root directory
    ATA_CurDirPtr = 0;
    ATA_read_short_dir(ATA_CurDirPtr, ROOT);
    
    // read FAT block 0
    ATA_CurFATPtr = 0;
    ATA_read_fat_sector(ATA_CurFATPtr);
}


/******************************************************************************
 * STARTUP: init_IRQs()
 *
 * Purpose:
 *  Set IRQ mapping and enable interrupts
 *
 * IRQ Mapping:
 *
 *  IVG07:  Timer2
 *  IVG08:  LAN
 *  IVG09:  DISK / CFLASH
 *  IVG10:  UART0
 *  IVG11:  - available
 *  IVG12:  - available
 *  IVG13:  - available
 *  IVG14:  occupied by VDK
 *  IVG15:  occupied by VDK
 *
 * Actions:
 *  - Set Timer IRQ
 *  - Set PF8 IRQ (high active) for DISK
 *  - Set PF9 IRQ (low active) for LAN
 *  
 * Note:
 *  ANOMALY: Rev 0.2 Silicon requires low enable of IRQs in SIC_IMASK
 *
 *****************************************************************************/
void init_IRQs()
{
    int     itmp;
    short   stmp;
    
    //////////////////////
    // Set Timer IRQ and Interval @ 500ms
    //////////////////////

    // map Timer IRQ to IVG07
    //itmp = _inpd(SIC_IAR2) & ~0x0f000000;
    //_outpd(SIC_IAR1, itmp | 0x000);

    // install Timer0 handler
    //interrupt(SIGIVG7, IRQ_T0_handler);
	register_handler(ik_ivg11, IRQ_T0_handler);
	*pSIC_IMASK |= 0x10000;
	
    // configuer Timer0 to PWM Mode
    //_outpw(TIMER0_CONFIG, 0x19);
    *pTIMER0_CONFIG = 0x19;
    
    // set Period and Width based on 75MHz SCLK
    //_outpw(TIMER0_PERIOD_HI, 0x011e);
    //_outpw(TIMER0_PERIOD_LO, 0x1a30);
    *pTIMER0_PERIOD = 0x011e1a30;
    
    //_outpw(TIMER0_WIDTH_HI, 0x011e);
    //_outpw(TIMER0_WIDTH_LO, 0x1a20);
    *pTIMER0_WIDTH = 0x011e1a20;
    
    // Enable Timer0
    //_outpw(TIMER0_STATUS, 0x100);
	*pTIMER_ENABLE = 0x1;

    

        // Clear pending IRQ for PF7
        //_outpw(FIO_MASKB_C, 0x200);
    	*pFIO_MASKA_C = PF7;

    // SETUP of IRQ_B on PF9 (LAN IRQ)
        // install IRQ_B handler
        register_handler(ik_ivg12, IRQ_B_handler);
		*pSIC_IMASK |= 0x100000;

        // set IRQ_B occurred to FALSE
        IRQ_LAN = 0;
 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -