?? target.c
字號:
/****************************************Copyright (c)**************************************************
** 廣州致遠電子有限公司
**
** http://www.21cm.com.cn
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: target.c
**創 建 人: 黃紹斌
**最后修改日期: 2005年11月11日
**描 述: 目標板特殊的代碼,包括異常處理程序和目標板初始化程序
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人:
** 版 本:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define IN_TARGET
#include "config.h"
/*********************************************************************************************************
** 函數名稱: FIQ_Exception
** 功能描述: 快速中斷異常處理程序,用戶根據需要自己改變程序
**
** 輸 入: 無
**
** 輸 出: 無
**
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 黃紹斌
** 日 期: 2005年11月11日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void FIQ_Exception(void)
{
while(1); // 這一句替換為自己的代碼
}
/*********************************************************************************************************
** 函數名稱: IRQ_Exception
** 功能描述: 中斷異常處理程序,用戶根據需要自己改變程序
**
** 輸 入: 無
**
** 輸 出: 無
**
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IRQ_Exception(void)
{
rINTPND = rINTPND;
}
/*********************************************************************************************************
** 函數名稱: Timer0_Exception
** 功能描述: 定時器0中斷服務程序
** 輸 入: 無
**
** 輸 出: 無
**
** 全局變量: 無
** 調用模塊: OSTimeTick
**
** 作 者: 陳明計
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer0_Exception(void)
{
rSRCPND = 1 << 10;
rINTPND = rINTPND;
OSTimeTick();
}
/*********************************************************************************************************
** 函數名稱: Timer0Init
** 功能描述: 定時器0初始化
** 輸 入: 無
**
** 輸 出: 無
**
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2002年4月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer0Init(void)
{
// 定時器設置
rTCFG0 = 0; // 預分頻器0設置為250,取得200KHz
rTCFG1 = 1; // TIMER0再取1/4分頻,取得50KHz
rTCNTB0 = (PCLK / (4 * OS_TICKS_PER_SEC)) - 1;
rTCON = (1 << 1); // 更新定時器數據
rTCON = (1 << 0) | (1 << 3); // 啟動定時器
VICVectAddr[10] = (uint32) Timer0_Exception;
rINTMSK &= ~(1 << 10); // 打開TIMER0中斷允許
}
/*********************************************************************************************************
** 函數名稱: VICInit
** 功能描述: 向量中斷控制器初始化
** 輸 入: 無
**
** 輸 出: 無
**
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void VICInit(void)
{
unsigned int i;
uint32 *ip;
// 設置中斷控制器
rPRIORITY = 0x00000000; // 使用默認的固定的優先級
rINTMOD = 0x00000000; // 所有中斷均為IRQ中斷
ip = VICVectAddr;
i = 32;
do
{
*ip++ = (uint32)IRQ_Exception;
} while (--i != 0);
}
/*********************************************************************************************************
** 函數名稱: TargetInit
** 功能描述: 目標板初始化代碼,在需要的地方調用,根據需要改變
** 輸 入: 無
**
** 輸 出: 無
**
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TargetInit(void)
{
uint32 temp;
OS_ENTER_CRITICAL();
ChangeToSYSMode();
DisableMMU();
//EnableICache();
//EnableDCache();
//DisableICache();
DisableDCache();
ChangeToUSRMode();
srand((uint32) TargetInit);
VICInit();
Timer0Init();
// NAND Flash控制器的I/O設置
rGPACON = rGPACON | (0x2F << 17);
// NAND Flash控制器配置
rNFCONF = (1 << 15) | // 使能NAND Flash控制器
(1 << 12) | // 初始化ECC
(0 << 11) | // nFCE = H (片選)
(0 << 8) | // CLE、ALE延時時間為10nS,HCLK=100MHz
(2 << 4) | // TWRPH0為30nS
(0 << 0); // TWRPH1為10nS
rNFCONF = rNFCONF | (1<<11);
rRTCCON = 0x00; // 禁止RTC接口(只允許RTC計數和讀數)
temp = rBCDYEAR & 0xff;
if(temp > 0x99) // 年判斷
{
goto ChangeRTC;
}
if (temp == 0)
{
goto ChangeRTC;
}
temp = rBCDMON & 0x1F;
if (temp > 0x12) // 月判斷
{
goto ChangeRTC;
}
if (temp == 0)
{
goto ChangeRTC;
}
temp = rBCDDATE & 0x3F;
if (temp > 0x31) // 日判斷
{
goto ChangeRTC;
}
if (temp == 0)
{
goto ChangeRTC;
}
temp = rBCDHOUR & 0x3F;
if (temp > 0x24) // 時判斷
{
goto ChangeRTC;
}
temp = rBCDMIN & 0x7F;
if (temp > 0x59) // 分判斷
{
goto ChangeRTC;
}
temp = rBCDSEC & 0x7F;
if (temp > 0x59) // 秒判斷
{
goto ChangeRTC;
}
OS_EXIT_CRITICAL();
return;
ChangeRTC:
rRTCCON = 0x01; // 標準模式,RTC接口使能(允許寫)
rBCDYEAR = 0x05;
rBCDMON = 0x11;
rBCDDATE = 0x28;
rBCDDAY = 0x01; // 星期,MON:1 TUE:2 WED:3 THU:4 FRI:5 SAT:6 SUN:7
rBCDHOUR = 0x17;
rBCDMIN = 0x01;
rBCDSEC = 0x00;
rRTCCON = 0x00; // 禁止RTC接口(只允許RTC計數和讀數)
}
/*********************************************************************************************************
** 以下為一些與系統相關的庫函數的實現
** 具體作用請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)
#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;
pos = pos;
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
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -