📄 new1.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 + -