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

📄 target.c

📁 ARM9 S3C2410 I2C程序,适合初学者!
💻 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 + -