?? target.c
字號:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: target.h
** 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
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -