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

📄 main.c

📁 4510下的串口扩展
💻 C
字号:
//***************************************************************************************************
//WorkGroup:		Institute of Automation,Chinese Academy of Sciences
//File Name:		main.c
//Description: 		Timer Interrupt Testting. 
//Author:		JuGuang,Lee
//Last Date&Time:	2003-10-20	10:59
//***************************************************************************************************	

#include "s3c4510b_add.h"
#include "c554.h"
void c554(void);
unsigned Install_Handle(unsigned routine,unsigned *vector);
//__irq Key word, TP004--Page 312
void __irq IRQHandler(void);

void Main(void)
{
	BYTE i;
	unsigned *irqvec=(unsigned*)0x18;
	*((volatile unsigned long *) 0x3ff5000) = 0x000000;
	Install_Handle((unsigned)IRQHandler,irqvec);
	*((volatile unsigned long *) 0x3ff3008) = 0x000c49;
	*((volatile unsigned long *) 0x3ff5004) = 0x000318;		//int0
	INTMSK=0x1ffffc;						//open int0					
 	delay(10);

	*((volatile unsigned char *) (0x2200002+0x30)) = 0xaf;
	delay(10);
	*((volatile unsigned char *) (0x2200002+0x30)) = 0xa9|0x00;
	*((volatile unsigned char *) (0x2200004+0x30)) = 0x08;  
	*((volatile unsigned char *) (0x2200003+0x30)) = 0x83;    
         *((volatile unsigned char *) (0x2200000+0x30)) = BAUDBASE;  
	*((volatile unsigned char *) (0x2200001+0x30)) = 0;
	*((volatile unsigned char *) (0x2200003+0x30)) = 0x03;
	*((volatile unsigned char *) (0x2200001+0x30)) = 0x01; 
	delay(10);


	*((volatile unsigned char *) (0x2200002+0x28)) = 0xaf;
	delay(10);
	*((volatile unsigned char *) (0x2200002+0x28)) = 0xa9|0x00;
	*((volatile unsigned char *) (0x2200004+0x28)) = 0x08;  
	*((volatile unsigned char *) (0x2200003+0x28)) = 0x83;    
         *((volatile unsigned char *) (0x2200000+0x28)) = BAUDBASE;  
	*((volatile unsigned char *) (0x2200001+0x28)) = 0;
	*((volatile unsigned char *) (0x2200003+0x28)) = 0x03;
	*((volatile unsigned char *) (0x2200001+0x28)) = 0x01; 
	delay(10);

          	 
	IIR = *((volatile unsigned char *) (0x2200008));

			
//	Init_St554(0x06);
//	Init_St554(0x05);	  
	while(1);	
}

void __irq IRQHandler(void)
{
	unsigned char chan[8];
	BYTE k;
	BYTE i,adder;
	adder = INTPND;
	for(k=0;k<8;k++)
	{
		chan[k] = RXdata(k); 
		chan[k] = chan[k] & 0x04;
	}
	i = ((*((volatile unsigned char *) (0x2200002+0x28))) & 0x04);	
	if(adder == 0x02)
	{
		INTPND=INTPND|0x0002;
	
		if(chan[5] == 0x04)
		{
//			*((volatile unsigned char *) 0x2200028) = chan[5];
//			*((volatile unsigned char *) 0x2200028) = chan[6];
			I = *((volatile unsigned char *) 0x2200028);
			*((volatile unsigned char *) 0x2200028) = I;
//			*((volatile unsigned char *) 0x2200028) = adder ;
		}

		if(chan[6] == 0x04)
		{
//			*((volatile unsigned char *) 0x2200030) = chan[5];
//			*((volatile unsigned char *) 0x2200030) = chan[6];
			I = *((volatile unsigned char *) 0x2200030);
			*((volatile unsigned char *) 0x2200030) = I;
//			*((volatile unsigned char *) 0x2200030) = adder ;
		}
	
	}
	if (adder == 0x01)
	{
		INTPND=INTPND|0x0001;
		*((volatile unsigned char *) 0x22000030) = (*((volatile unsigned char *) (0x2200002+0x30)));
		I = *((volatile unsigned char *) 0x2200030);
		*((volatile unsigned char *) 0x2200030) = (*((volatile unsigned char *) (0x2200002+0x30)));
		*((volatile unsigned char *) 0x2200030) = I;
	}	
/*	
		if(chan[1] == 0x01)
		{
			I = *((volatile unsigned char *) 0x2200008);
			*((volatile unsigned char *) 0x2200008) = I;
		}
		if(chan[2] == 0x01)
		{
			I = *((volatile unsigned char *) 0x2200010);
			*((volatile unsigned char *) 0x2200010) = I;
		}
		if(chan[3] == 0x01)
		{
			I = *((volatile unsigned char *) 0x2200018);
			*((volatile unsigned char *) 0x2200018) = I;
		}
*/


}
unsigned Install_Handle(unsigned routine,unsigned *vector)
{
	unsigned vec,oldvect;
	vec=((routine-(unsigned)vector-0x8)>>2);
	vec=0xea000000|vec;
	oldvect=*vector;
	*vector=vec;
	return(oldvect);
}
void Init_St554(BYTE channel)
{
	*((volatile unsigned char *) (0x2200002+(channel<<3))) = 0xaf;
	delay(10);
	*((volatile unsigned char *) (0x2200002+(channel<<3))) = 0xa9|0x00;
	*((volatile unsigned char *) (0x2200004+(channel<<3))) = 0x08;  
	*((volatile unsigned char *) (0x2200003+(channel<<3))) = 0x83;    
         *((volatile unsigned char *) (0x2200000+(channel<<3))) = BAUDBASE;  
	*((volatile unsigned char *) (0x2200001+(channel<<3))) = 0;
	*((volatile unsigned char *) (0x2200003+(channel<<3))) = 0x03;
	*((volatile unsigned char *) (0x2200001+(channel<<3))) = 0x01; 
	delay(10);          	 
	IIR = *((volatile unsigned char *) (0x2200000+(channel<<3)));
}
BYTE RXdata(BYTE p_channel)
{
	return (*((volatile unsigned char *) ((0x2200002+(p_channel<<3)))));	
}

void delay(WORD num)
{
    while(num--);
}

⌨️ 快捷键说明

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