?? target.c
字號:
/*******************************************************************************************************
* 文件名:target.c
* 功 能:開發板初始化相關代碼。Remap設置、系統時鐘設置和存儲器加速模塊設置、IRQ和FIQ的異常處理空函數。
* 作 者:POWER
* 日 期:2006年5月25號
* 斯凱科技主頁:www.armsky.net
* 斯凱科技論壇:www.armsky.net/bbs
********************************************************************************************************/
#include "config.h"
/*********************************************************************************************************
* 函數名稱:IRQ_Exception
* 功 能:IRQ異常處理
* 入口參數:無
* 出口參數:無
*********************************************************************************************************/
void __irq IRQ_Exception(void)
{
while(1); // 這一句替換為自己的代碼
}
/*********************************************************************************************************
* 函數名稱:FIQ_Exception
* 功 能:FIQ異常處理
* 入口參數:無
* 出口參數:無
*********************************************************************************************************/
void FIQ_Exception(void)
{
while(1); // 這一句替換為自己的代碼
}
/*********************************************************************************************************
* 函數名稱:TargetInit
* 功 能:開發板初始化,為用戶添加自己的特殊代碼用
* 入口參數:無
* 出口參數:無
*********************************************************************************************************/
void TargetInit(void)
{
/* 添加自己的代碼 */
}
/*********************************************************************************************************
* 函數名稱:TargetResetInit
* 功 能:進入main()之前的開發板初始化,可以被修改,但不能被刪除
* 入口參數:無
* 出口參數:無
*********************************************************************************************************/
void TargetResetInit(void)
{
/* 存儲器重映射 */
#ifdef __DEBUG_RAM
MEMMAP = 0x2; // 用戶RAM模式。中斷向量從LPC213X內部靜態SRAM重新映射。
#endif
#ifdef __DEBUG_FLASH
MEMMAP = 0x1; // 用戶Flash模式。中斷向量不重新映射,它位于LPC213X內部FLASH中。
#endif
#ifdef __IN_CHIP
MEMMAP = 0x1; // 用戶Flash模式。中斷向量不重新映射,它位于LPC213X內部FLASH中。
#endif
/* 設置系統各部分時鐘,由系統硬件決定*/
/* 設置外設時鐘(VPB時鐘pclk)與系統時鐘(cclk)的分頻比 */
PLLCON = 1; // 設置激活但未連接PLL
#if (Fpclk / (Fcclk / 4)) == 1 // 此值由系統硬件決定
VPBDIV = 0;
#endif
#if (Fpclk / (Fcclk / 4)) == 2 // 此值由系統硬件決定
VPBDIV = 2;
#endif
#if (Fpclk / (Fcclk / 4)) == 4 // 此值由系統硬件決定
VPBDIV = 1;
#endif
/* 設定PLL的乘因子M和除因子P的值 */
#if (Fcco / Fcclk) == 2
PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
#if (Fcco / Fcclk) == 4
PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
#endif
#if (Fcco / Fcclk) == 8
PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
#if (Fcco / Fcclk) == 16
PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif
PLLFEED = 0xaa; // 發送PLL饋送序列,執行設定PLL的動作
PLLFEED = 0x55;
while((PLLSTAT & (1 << 10)) == 0); // 等待PLL鎖定
PLLCON = 3; // 設置激活并連接PLL
PLLFEED = 0xaa; // 發送PLL饋送序列,執行激活和連接動作
PLLFEED = 0x55;
/* 設置存儲器加速模塊 */
MAMCR = 0; // 禁止MAM功能
#if Fcclk < 20000000 // 系統時鐘低于20MHz,建議設置為1
MAMTIM = 1;
#else
#if Fcclk < 40000000 // 系統時鐘在20~40MHz之間,建議設置為2
MAMTIM = 2;
#else
#if Fcclk < 60000000 // 系統時鐘在40~60MHz之間,建議設置為3
MAMTIM = 3;
#else
#if Fcclk < 80000000 // 系統時鐘在60~80MHz之間,建議設置為4
MAMTIM = 4;
#else
#if Fcclk < 100000000 // 系統時鐘在80~100MHz之間,建議設置為5
MAMTIM = 5;
#else
#if Fcclk < 120000000 // 系統時鐘在100~120MHz之間,建議設置為6
MAMTIM = 6;
#else
MAMTIM = 7; // 系統時鐘高于120MHz,建議設置為7
#endif
#endif
#endif
#endif
#endif
#endif
MAMCR = 2; // 使能MAM
/* 初始化VIC */
VICIntEnClr = 0xffffffff; // 清零所有中斷
VICVectAddr = 0;
VICIntSelect = 0;
/* 添加自己的代碼 */
}
/*********************************************************************************************************
* 以下為一些與系統相關的庫函數的實現
* 具體作用請ads的參考編譯器與庫函數手冊
* 用戶可以根據自己的要求修改
********************************************************************************************************/
#include "rt_sys.h"
#include "stdio.h"
#pragma import(__use_no_semihosting_swi)
#pragma import(__use_two_region_memory)
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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -