📄 startup.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 + -