/****************************************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
********************************************************************************************************/
** 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
********************************************************************************************************/