target.c

/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: target.c
** Last modified Date: 2005-12-31 
** Last Version: v1.0
** Description: 目标板特殊的代码,包括异常处理程序和目标板初始化程序
**
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2005-12-31 
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#define  IN_TARGET
#include "config.h"




/*********************************************************************************************************
**                  "全局和静态变量在这里定义"         
**        global variables and static variables define here
********************************************************************************************************/


// IRQ中断向量地址表定义
uint32  VICVectAddr[32];


// BWSCON寄存器地址定义
#define  BWSCON_ADDR 0x48000000


// 声明向量表Vectors
extern void vectors(void);






/*********************************************************************************************************
** Function name: IRQ_Exception
** Descriptions: 中断异常处理程序(实现向量中断处理),用户无需改动
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void __irq  IRQ_Exception(void)
{
void    (*__Handler)(void);
int     irq_no;
uint32  bak;

// 找出当前中断号
bak = rINTPND; // 读取INTPND的值
for(irq_no=0; irq_no<32; irq_no++)
{
   bak = bak>>1;
if(bak == 0) break;
}

// 取得中断服务程序地址并执行
__Handler = (void (*)(void)) VICVectAddr[irq_no];
__Handler();
}





/*********************************************************************************************************
** Function name: FIQ_Exception
** Descriptions: 快速中断异常处理程序,用户根据需要自己改变程序
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  FIQ_Exception(void)
{
    while(1);                   // 这一句替换为自己的代码
}






// 总线配置数据表 (用户可以在config.h文件中配置总线)
const uint32  __BUS_INIT[] =
{
(B7_BWCON<<28)|(B6_BWCON<<24)|(B5_BWCON<<20)|(B4_BWCON<<16)|(B3_BWCON<<12)|(B2_BWCON<<8)|(B1_BWCON<<4), // BWSCON寄存器
B0_BANKCON, // BANKCON0寄存器
B1_BANKCON, // BANKCON1寄存器
B2_BANKCON, // BANKCON2寄存器
B3_BANKCON, // BANKCON3寄存器
B4_BANKCON, // BANKCON4寄存器
B5_BANKCON, // BANKCON5寄存器
B6_BANKCON, // BANKCON6寄存器 (SDRAM)
B7_BANKCON, // BANKCON7寄存器 (SRAM)
(1<<23)|(0<<22)|(0<<20)|(3<<18)|(1113), // REFRESH寄存器(SDRAM) 例如:period=15.6us, HCLK=60Mhz, (2048+1-15.6*60)
(1<<7)|(1<<5)|(1<<4)|(2<<0), // BANKSIZE寄存器,128MB
(3<<4), // MRSRB6寄存器
(3<<4) // MRSRB7寄存器
};


/************
*********************************************************************************************
** Function name: TargetBusInit
** Descriptions: 针对目标板的总线系统初始化,包括Bank的宽度、SDRAM控制器等等。
**               不要在此函数中加入任何用户代码。
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  TargetBusInit(void)
{   
#ifdef __RELEASE
    int  i;
    volatile uint32  *cp1;
       
// 总线设置,初始化SDRAM控制器
cp1 = (void *)BWSCON_ADDR;
for(i=0; i<13; i++)
{
*cp1++ = __BUS_INIT[i];
}
#endif    
}


/*********************************************************************************************************
** Function name: TargetResetInit
** Descriptions: 调用main函数前目标板初始化代码,根据需要改变,不能删除。
**               针对目标板的系统初始化,包括WDT、中断、PLL等等。
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  TargetResetInit(void)
{
int  i;
volatile uint32  *cp1, *cp2;

cp1 = cp2 = NULL; // 防止编译报警

rWTCON = 0x0000; // 关闭WDT 
rINTMSK = 0xFFFFFFFF; // 禁止所有中断 (中断控制器)
rINTSUBMSK = 0x07FF;
rSRCPND = 0xFFFFFFFF; // 清除中断(源)标志
rINTPND = 0xFFFFFFFF; // 清除IRQ中断标志

#ifdef __RELEASE
// 系统时钟设置,启用PLL
rLOCKTIME = 0x00FFFFFF; // 锁定时间设置U_LTIME=0xFFF,M_LTIME=0xFFF

i = 0;
if(HCLK == (FCLK/2)) i = i | 0x02;
if(PCLK == (HCLK/2)) i = i | 0x01;
rCLKDIVN = i; // 设置HCLK、PCLK分频值

rMPLLCON = MPLLCON_200; // 设置CPU时钟为200Mhz (FCLK)   
#else
// 复制异常向量表操作
cp1 = (uint32 *) vectors;
    cp2 = (uint32 *) 0x00000000;
    for (i = 0; i < 16; i++)
    {
        *cp2++ = *cp1++;
    }
#endif
  
}




/*********************************************************************************************************
**                  以下为一些与系统相关的库函数的实现
**                  具体作用请ads的参考编译器与库函数手册
**                  用户可以根据自己的要求修改        
********************************************************************************************************/
/*********************************************************************************************************
**                  The implementations for some library functions
**                  For more details, please refer to the ADS compiler handbook and The library 
** function manual
**                  User could change it as needed       
********************************************************************************************************/
#include <rt_sys.h>
#include <stdio.h>


#pragma import(__use_no_semihosting_swi)


        int __rt_div0(int a)
{
    a = a;
    return 0;
}


        int fputc(int ch,FILE *f)
{
    ch = ch;
    f = f;
    return 0;
}


    int fgetc(FILE *f)
{
    f = f;
    return 0;
}




        int _sys_close(FILEHANDLE fh)
{
    fh = fh;
    return 0;
}


        int _sys_write(FILEHANDLE fh, const unsigned char * buf,
                      unsigned len, int mode)
{
    fh = fh;
    buf = buf;
    len =len;
    mode = mode;
    return 0;
}
        int _sys_read(FILEHANDLE fh, unsigned char * buf,
                     unsigned len, int mode)
{
    fh = fh;
    buf = buf;
    len =len;
    mode = mode;
    
    return 0;
}


       void _ttywrch(int ch)
{
    ch = ch;
}


        int _sys_istty(FILEHANDLE fh)
{
    fh = fh;
    return 0;
}
        int _sys_seek(FILEHANDLE fh, long pos)
{
    fh = fh;
    return 0;
}
        int _sys_ensure(FILEHANDLE fh)
{
    fh = fh;
    return 0;
}


        long _sys_flen(FILEHANDLE fh)
{
    fh = fh;
    return 0;
}
       int _sys_tmpnam(char * name, int sig, unsigned maxlen)
{
    name = name;
    sig = sig;
    maxlen = maxlen;
    return 0;
}


        void _sys_exit(int returncode)
{
    returncode = returncode;
}


        char *_sys_command_string(char * cmd, int len)
{
    cmd = cmd;
    len = len;
    return 0;
}




/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值