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

📄 target.c

📁 周立功PXA270教学实验箱的ARM汇编指令实验2
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************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: 2006-8-10
** 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];



/*********************************************************************************************************
** 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);	
	uint32  irq_no;
	uint32  bak;		
	
	// 找出当前中断号
	bak = ICIP;				// 读取IRQ Pending寄存器的值
	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);                   // 这一句替换为自己的代码
}



/*********************************************************************************************************
** Function name: TargetInit
** Descriptions: 目标板初始化代码,根据需要修改及调用。              
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-8-10 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  TargetInit(void)
{
    /* 添加自己的代码 */
    /* Add your codes here */
}




// SDRAM的地址(32位宽度)
#define	  SRAM_ADDR 	((volatile unsigned int *) 0xA0000000)

/*********************************************************************************************************
** Function name: Init_Mem
** Descriptions: 初始化外部总线及SDRAM控制器              
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-8-10 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  Init_Mem(void)
{
    uint32  bak;
    
    // 配置总线I/O (必须先设置方向,再设置功能,否则由于GP80的MBREQ导致程序运行失败)
    GPSR0 = GPSR0 | (1<<15);
    GPSR1 = GPSR1 | (1<<(33-32));
    GPSR2 = GPSR2 | (1<<(78-64)) | (1<<(80-64)); 
    
    GPDR0 = (GPDR0 & (~(1<<18))) | (1<<15);         // GP15为OUT功能,GP18为IN功能
    GPDR1 = GPDR1 | (1<<(33-32));                   // GP33为OUT功能
    GPDR2 = GPDR2 | (1<<(78-64)) | (1<<(80-64));    // GP78,GP80为OUT功能
    
    GAFR0_L = (GAFR0_L & 0x3FFFFFFF) | 0x80000000;  // GP15为nCS1功能
    GAFR0_U = (GAFR0_U & 0xFFFFFFCF) | 0x00000010;  // GP18为RDY功能
    GAFR1_L = (GAFR1_L & 0xFFFFFFF3) | 0x00000008;  // GP33为nCS5功能
    GAFR2_L = (GAFR2_L & 0xCFFFFFFF) | 0x20000000;  // GP78为nCS2功能
    GAFR2_U = (GAFR2_U & 0xFFFFFFFC) | 0x00000002;  // GP80为nCS4功能              

    // 配置总线宽度及速度 (除Bank0外)
    MSC0 = B0_CON |   		// Bank0的设置
           B1_CON;    		// Bank1的设置        
    bak = MSC0; 			// 回读寄存器,保证已写入
            
    MSC1 = B2_CON |   		// Bank2的设置
           B3_CON;    		// Bank3的设置        
    bak = MSC1; 			// 回读寄存器,保证已写入
    
    MSC2 = B4_CON |   		// Bank4的设置
           B5_CON;    		// Bank5的设置         
    bak = MSC2; 			// 回读寄存器,保证已写入        
    

#if EN_CLK520MHz != 0        
    // 配置SDRAM控制器 (参考值MDREFR=0x2009e01d)
    // ALTREFA=0,ALTEFB=0,即使外部占用总线,还允许SDRAM刷新
    // K0DB4=1,SDCLK0和SDCLK3的固定输出1/4 Fclk_mem(不由K0DB2控制)
    // K2FREE=0, K1FREE=0, K0FREE=0,表示SDCLKn非自由运行(即由APD和KiRUN控制)
    // SLFRSH=0,不发送自我刷新命令
    // APD=0,禁止SDRAM自动掉电
    // KnDB2为0时,SDCLKn以Fclk_mem时钟运行;为1时,SDCLKn以Fclk_mem/2的时钟运行。
    // KnRUN为0时,禁止SDCLKn输出;为1时,允许SDCLKn输出。
    // E1PIN=1,使能SDCKE1输出。
    // DRI=24,每行刷新时间为8uS 
    
    // 先禁止SDCLK0-2输出,并设置DRI  (未写出的位为0)   
    MDREFR = (0<<31) |      // ALTREFA=0
             (0<<30) |      // ALTEFB=0
             (1<<29) |      // K0DB4=1
             (0<<25) |      // K2FREE=0
             (0<<24) |      // K1FREE=0
             (0<<23) |      // K0FREE=0
             (1<<22) |      // SLFRSH=1
             (24<<0);
    bak = MDREFR;
    
    // 允许SDCLK1输出,输出时钟为Fclk_mem
    bak = bak | (1<<13) | (1<<16);   // K1DB2=0, K1RUN=1, K0RUN=1
    MDREFR = bak;
    bak = MDREFR;
    
    // 清除SLFRSH位     
    bak = bak & (~(1<<22)); // SLFRSH=0 
    MDREFR = bak;
    bak = MDREFR;
    
    // 使能SDCKE1输出
    bak = bak | (1<<15);    // E1PIN=1
    MDREFR = bak;
    bak = MDREFR;                         
           
    // MDCNFG设置                
    MDCNFG = (0<<31) |          // MDENX=0,表示使用256MB的标准存储器映射(非1GB的映射)              
             (1<<27) |          // 保留位,要求置1  
             (0<<17) |          // DE3=0,禁止Bank3的SDRAM   
             (0<<16) |          // DE2=0,禁止Bank2的SDRAM       
             (0<<15) |          // STACK1=0
             (0<<13) |          // STACK0=0,即STACK[1:0]=00b,使用SDRAM地址为A24--A10
             (0<<14) |          // DCACX0=0,额外的列(Column)地址。请看DCAC0
             (0<<12) |          // DSA1110_0=0,Bank0、1块的SDRAM不使用SA1110地址多路方式(即使用MDCNFG的DAADR0的地址位)
             (1<<11) |          // 保留位,要求置1
             (0<<10) |          // DADDR0=0,使用标准地址寻址                        
             (3<<8)  |          // DTC0=11b,SDRAM访问时间值设置(选用11组)
             (1<<7)  |          // DNB0=1,SDRAM的内部分4个Bank
             (2<<5)  |          // DRAC0=2,13行地址(row)
             (1<<3)  |          // DCAC0=1,9位列地址(column)
             (0<<2)  |          // DWID0=0,32位总线宽度SDRAM            
             (0<<1)  |          // DE1=0,禁止Bank1的SDRAM         
             (0<<0);            // DE0=0,禁止Bank0的SDRAM  
    bak = MDCNFG;                                                 
        
    // 软件延时,等待时钟稳定(200uS以上)
    for(bak=0; bak<20000; bak++);
    
    // 写操作测试,启动对应Bank的SDRAM刷新周期    
    for(bak=0; bak<8; bak++)
    {   
        SRAM_ADDR[0] = 0x5555AAAA;
    }    
    
    // MDCNFG设置
    bak =    (0<<31) |          // MDENX=0,表示使用256MB的标准存储器映射(非1GB的映射)              
             (1<<27) |          // 保留位,要求置1  
             (0<<17) |          // DE3=0,禁止Bank3的SDRAM   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -