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

📄 44bmain.c

📁 S3C44B0的外部中断测试程序
💻 C
字号:
/*************************************************************************
* FILE NAME                                     VERSION                
*                                                                      
*        44bmain.c            		            1.0              
*                                                                      
* COMPONENT                                                            
*                                                                      
*        Flash Operation such as erase/program                                    
*                                                                      
* DESCRIPTION                                                          
*                                                                      
*      	  
*                                                                      
* DATA STRUCTURES                                                      
*                                                                      
*               
*                                                                      
* FUNCTIONS                                                            
*
*        
*                                                                      
* DEPENDENCIES                                                         
*        
*       
* HISTORY
*	
*		Meter Chen                2001-7
*                                                               
************************************************************************/

#include <stdlib.h>
#include <string.h>
#include <math.h>

#include "..\inc\def.h"
#include "..\inc\29lvflash.h"
#include "..\inc\option.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"


void __irq Eint4567Isr(void);
void ini_EINT4567(void);

void __irq Timer5_ISR(void);
void initial_time5(void);


int main(void)
{
  
    /**** SYSTEM INITIALIZE */
    
	/* disable system cache */
    rSYSCFG = 0;

    //__rt_lib_init();

    Port_Init();
    
    /**** FLASH OPERATION */
    
    /* 1 - get flash'ID, if it work well, at least our hardware is good */
//    Flash_ReadID();
    
    /* 2 - erase the whole chip, also you can erase it sector by sector */
//    Flash_Erase_Chip();
    
    /* 3 - write into flash from a temporary buffer */
    /* the buffer base is 0xc100000, the image length is 1000000, you can change these */
//    Flash_Write(0, (char *)0xc100000, 100000);
    
    /**** PROGRAM OVER */
//    rI_ISPC=0xFFFFFFFF;		/* clear all interrupt pend */

    initial_time5();
    ini_EINT4567();

    while(1)
   {
   		Led_Off(3);
   		Delay(1000);
   		Led_On(3);
   		Delay(1000);
   //   key=Key_Scan();
/*    	switch(key)
    	{
    		case 3:Led_On(1);Delay(200);Led_Off(1);break;
    		case 4:Led_On(2);Delay(200);Led_Off(2);break;
    		case 5:Led_On(3);Delay(200);Led_Off(3);break;
    		case 6:Led_On(1);Led_On(2);Led_On(3);Delay(200);Led_Off(1);Led_Off(2);Led_Off(3);break;
    		default:continue;
    	}*/
    }
}


void __irq Eint4567Isr(void)
{

	static unsigned int t = 0;
	//char key;
	unsigned char whichInt;

	whichInt = rEXTINTPND;	
   	
/*    key = Key_Scan();
    switch(key)
    {
    	case 3:Led_On(1);break;
    	case 4:Led_On(2);break;
    	case 5:Led_On(3);break;
    	case 6:Led_Off(1);Led_Off(2);Led_Off(3);break;
    	default:;
    }
*/    	
   	rI_ISPC = BIT_EINT4567;	//pengsl,清除中断位;
   	rEXTINTPND = 0xf;	
    	
   	++t;
   	if(t % 2 == 0)
   	{
   		Led_Off(2);
   	}
   	else
   	{
   		Led_On(2);
   	}

}

    
void ini_EINT4567(void)
{
	pISR_EINT4567=(unsigned)Eint4567Isr; 	//pengsl,设置外部中断入口;
	
	rINTMOD=0x0;	//中断模式:0:IRQ模式
	rINTCON=0x5;	//非向量中断,IRQ使能	0x05:非向量中断;0x01:向量中断
	
	rINTMSK=~(BIT_GLOBAL|BIT_EINT4567);	//pengsl,开中断(务必最后开中断);
	
	//PortG的相关配置见Port_Init();
	
	rI_ISPC=BIT_EINT4567;					//pengsl,清除中断位;
	rEXTINTPND = 0xf;		
}





void __irq Timer5_ISR(void) //中断服务程序
{
 // Uart_Printf("\nTimer5 start!");
 	static unsigned int t = 0;
  	rI_ISPC=BIT_TIMER5;//向里写入1,从而使对应的INTPND中的位清0 
   	
   	++t;
   	if(t % 2 == 0)
   	{
   		Led_Off(1);
   	}
   	else
   	{
   		Led_On(1);
   	}

  //Led_On(1);Led_On(2);Led_On(3);  
  
}

void initial_time5(void)
{
	rINTMSK=~(BIT_TIMER5 | BIT_GLOBAL); //将全局中断打开,并且将定时器0打开
	rINTCON=0x5;        //Non-vectored,IRQ enable,FIQ disable
	rINTMOD=0x0;        //All=IRQ mode
	pISR_TIMER5=(unsigned)Timer5_ISR;    //中断入口地址赋值
    rTCFG0=0x00ff0000;//定时器5预分频值设置为255 MCLK=64M
	rTCFG1=0x00300000;//定时器5分割值设置为16

	rTCNTB5=65535/4;     //约1s中断周期
	rTCON=0x06000000;  // 打开手动更新
	rTCON=0x05000000;  //关闭手动更新,1001 自动重载,并启动定时器0
}

⌨️ 快捷键说明

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