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

📄 new1.c

📁 Cirrus Logic公司的EP7312的定时器T1的使用源码
💻 C
字号:
/******************************

通过Arm内启动方式Load到内存中运行
打开网口,通过Tftp向SDRAM下载程序
结束后写入Flash中

********************************/

#include "ioregs.h" 
#include "cs8900.h"

void init_uart1(void)
{

IO_UBRLCR1 = (IO_UBRLCR1 & ~BRDIV) | BR_9600;
IO_UBRLCR1 = IO_UBRLCR1 | FIFOEN;
IO_UBRLCR1 = (IO_UBRLCR1 & ~WRDLEN) | (3<<WRDLEN_SHIFT);
IO_SYSCON1 |=  UART1EN;
}

void init_uart2(void)
{

IO_UBRLCR1 = (IO_UBRLCR1 & ~BRDIV) | BR_115200;
IO_UBRLCR1 = IO_UBRLCR1 | FIFOEN;
IO_UBRLCR1 = (IO_UBRLCR1 & ~WRDLEN) | (3<<WRDLEN_SHIFT);
IO_SYSCON1 |=  UART1EN;
}


static unsigned char get_char(void)
{
	while (IO_SYSFLG1 & URXFE1);
	return IO_UARTDR1 & 0xff;
}

static void put_char(unsigned char data)
{
/*
	if(data=='\n')
	{
		while (IO_SYSFLG1 & UTXFF1);
		IO_UARTDR1 = '\r';
	}
	else 
	{
		while (IO_SYSFLG1 & UTXFF1);
		IO_UARTDR1 = data;
	}
*/
		while (IO_SYSFLG1 & UTXFF1);
		IO_UARTDR1 = data;
}



static void put_num8(unsigned char i)
{
		put_char(((((i>>4) & 0x0f)  + '0')> '9' )? ((i>>4) & 0x0f) +'0'+7 : ((i>>4) & 0x0f) +'0' );
		put_char((((i & 0x0f)  + '0')> '9' )? (i & 0x0f) +'0'+7 : (i & 0x0f) +'0' );
}

static void put_num16(int i)
{
		put_num8((unsigned char)(( i>>8) & 0xff));
		put_num8( (unsigned char) (i & 0xff));
}

static void put_num32(long i)
{
		put_num16((unsigned int)(( i>>16) & 0xffff));
		put_num16( (unsigned int) (i & 0xffff));
}
#define SYS_(offset)	(*(volatile unsigned long*)(offset))
#define SYSC_(offset)	(*(volatile unsigned char*)(offset))

void init_lcd()
{
	unsigned long address;
	unsigned long data;
	
	address=0x800002c0;
	data=0xf032695f;
	SYS_(address)=data;

	address=0x80000540;
	data=0x76543210;
	SYS_(address)=data;

	address=0x80000580;
	data=0xfedcba98;
	SYS_(address)=data;

	address=0x80000100;
	data=0x00001110;
	SYS_(address)=data;

//	address=0x80000000;
//	data=0x03000000;
//	SYS_(address)=data;
	
	

		
}

void init_dram()
{
	unsigned long addressx;
	unsigned long addressy;
	for(addressy=0;addressy<16;addressy++)
		for(addressx=0;addressx<800;addressx+=8)
		{
			SYS_(0xc0000000+addressy*1600+addressx)=0xfedcba98;
			SYS_(0xc0000000+addressy*1600+addressx+4)=0x76543210;
		}


}
void mymain(void);
void put_string(char *sp);



//void __irq t1_irq(void)

void t1_irq(void)
{
	volatile unsigned long address;
	volatile unsigned char data;

	address=0x80000003;
	data=SYSC_(address);
	data=data^0x01;
	SYSC_(address)=data;

}

void  C_vMain(void)
{

	unsigned char i;
	unsigned short j;	
	init_uart2();

	init_lcd();

	init_dram();

	while(1)
	{
		i=get_char();
		if(i==0xaa)
		{
			j=get_reg(0);
			put_num16(j);
//			put_char(j/256);
//			put_char(j%256);
	
			j=get_reg(2);
			put_num16(j);
//			put_char(j/256);
//			put_char(j%256);
						
		}
		else if(i==0x79)
			mymain();
		else put_char(i);
	}


}

void put_string(char *sp)
{
	unsigned int i=0;
	while(sp[i]!=0)
		put_char(sp[i++]);
	 	
}



void mymain(void)
{
// Declare your local variables here
unsigned char scomm,sdata;
unsigned long address;
unsigned long data;
unsigned char *addrp;
unsigned char *datap;


addrp=(unsigned char*)&address;
datap=(unsigned char*)&data;

init_uart2();
put_string("ok!\n");	//Start String


while (1)
    {
      // Place your code here
	scomm=get_char();
	if(scomm==0xff)
	  	{
	  	scomm=get_char();
	  	if(scomm!=0xff)
	  		switch(scomm){
		  				  		
		  		case 0xa0:addrp[0]=sdata;put_string("Set Addr0:");put_num32(address);put_string("h\n");break;
				case 0xa1:addrp[1]=sdata;put_string("Set Addr1:");put_num32(address);put_string("h\n");break;
				case 0xa2:addrp[2]=sdata;put_string("Set Addr2:");put_num32(address);put_string("h\n");break;
				case 0xa3:addrp[3]=sdata;put_string("Set Addr3:");put_num32(address);put_string("h\n");break;		  		

				case 0xc0:datap[0]=sdata;put_string("Set Word0:");put_num32(data);put_string("h\n");break;
				case 0xc1:datap[1]=sdata;put_string("Set Word1:");put_num32(data);put_string("h\n");break;
				case 0xc2:datap[2]=sdata;put_string("Set Word2:");put_num32(data);put_string("h\n");break;
				case 0xc3:datap[3]=sdata;put_string("Set Word3:");put_num32(data);put_string("h\n");break;




				case 0xd0:put_string("Read Word:");put_num32(SYS_(address));put_string("h at ");put_num32(address);put_string("h\n");break;					
				case 0xe0:SYS_(address)=data;put_string("Write Word:");put_num32(data);put_string("h at ");put_num32(address);put_string("h\n");break;					
				case 0xd1:put_string("Read Word:");put_num32(SYS_(address));put_string("h at ");put_num32(address);put_string("h\n");address++;break;					
				case 0xe1:SYS_(address)=data;put_string("Write Word:");put_num32(data);put_string("h at ");put_num32(address);put_string("h\n");address++;break;					
				case 0xd2:put_string("Read Word:");put_num32(SYS_(address));put_string("h at ");put_num32(address);put_string("h\n");address--;break;					
//				case 0xe2:SYS_(address)=data;put_string("Write Word:");put_num32(data);put_string("h at ");put_num32(address);put_string("h\n");address--;break;					




		  		default:put_string("Not Support!\n");
		  		}
		else sdata=0xff;
		}
	else sdata=scomm;
	}

}

⌨️ 快捷键说明

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