⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 target.c

📁 周立功ARM9 2410试验平台的uCOS-II基础实验代码
💻 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 + -