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

📄 main.c

📁 关于ARM7的AT91FR40162的启动小程序
💻 C
字号:
#include "Common.h"

U8 gCPLD[8];

void WriteCPLD_byte(U8 index, U8 data)
{
	PIO_CODR = 1<<23;
	gCPLD[index] = data;
	PIO_CODR = ~data;
	PIO_SODR = data | 1<<23;
	PIO_CODR = 1<<23;
}

void WriteCPLD_bit(U8 index, U8 bit, U8 stat)
{
}

void Sys_init(void)
{
	AIC_IDCR = 0xFFFFFFFF;	// disable all interrupts
	PS_PCER  = 0x10;			// Enable Parallel IO Clock
//	PIO_PER  = 0x008007F0;	// use P4-P10,P23 for I/O
	PIO_PER  = 0xFFFFFFFF;	// use P4-P10,P23 for I/O
	PIO_ODR  =~0x008007F0;	// use all others for input
	PIO_OER  = 0x008007F0;	// use P4-P10,P23 for output
	US0_init(115200);
}

U16 AD_getdata(U8 channel)
{
	U8 msa,mse,data_h,data_l;
	msa=channel%8;
	if(channel<8)
		mse=1;
	else if(channel<16)
		mse=2;
	else
		mse=4;
	PIO_CODR = 1<<23;
	PIO_CODR = 7<<4;		PIO_SODR = mse<<4;
	PIO_CODR = 7<<8;		PIO_SODR = 2<<8;
	PIO_SODR = 1<<23;
	PIO_CODR = 1<<23;
	PIO_CODR = 7<<4;		PIO_SODR = msa<<4;
	PIO_CODR = 7<<8;		PIO_SODR = 1<<8;
	PIO_SODR = 1<<23;
	Delay_us(20);
	PIO_CODR = 1<<23;
	PIO_CODR = 2<<4;		PIO_CODR = 7<<8;
	PIO_SODR = 1<<23;
	Delay_us(1);
	PIO_CODR = 1<<23;
	PIO_CODR = 3<<4;		PIO_SODR = 2<<4;
	PIO_CODR = 7<<8;
	PIO_SODR = 1<<23;
	Delay_us(1);
	data_l = ((PIO_PDSR>>16)&0x1F) | ((PIO_PDSR>>24)&0xE0);
	PIO_CODR = 1<<23;
	PIO_SODR = 3<<4;
	PIO_CODR = 7<<8;
	PIO_SODR = 1<<23;
	Delay_us(1);
	data_h = ((PIO_PDSR>>16)&0x1F) | ((PIO_PDSR>>24)&0xE0);
	return (data_h<<8)+data_l;
}

void HPLED1_control(U32 stat)
{
	if(stat==0){
		PIO_CODR = (1<<23);
		PIO_CODR = (1<<8 | 1<<9 | 1<<10 | 1<<6);
		PIO_SODR = (1<<23);
		PIO_CODR = (1<<23);
	}else{
		PIO_CODR = (1<<23);
		PIO_CODR = (1<<8 | 1<<9 | 1<<10);
		PIO_SODR = (1<<6 | 1<<23);
		PIO_CODR = (1<<23);
	}
}

void Light(U32 stat)
{
	if(stat==0){
		PIO_CODR = (1<<23);
		PIO_CODR = (1<<7 | 1<<8);
		PIO_SODR = (1<<9 | 1<<10 | 1<<23);
		PIO_CODR = (1<<23);
	}else{
		PIO_CODR = (1<<23);
		PIO_CODR = (1<<8);
		PIO_SODR = (1<<9 | 1<<10 | 1<<7 | 1<<23);
		PIO_CODR = (1<<23);
	}
}

//U8 AD_index[]={0,2,5,6,7};
U8 AD_index[]={5,0,7,6};

void Main(void)
{
	int i,j;
	int stat=0;
	int ch='0';
	U16 data;
	U32 sum[4];
//	U8 channel=16;
//	int index=0,count=0;
	Sys_init();
/*
	while(1){
		Light(0);
		HPLED1_control(0);
		Delay_us(4000000);
		Light(1);
		HPLED1_control(1);
		Delay_us(4000000);
	}
	while(1){	// AD采集
		data=AD_getdata(channel);
		channel++;
		if(channel>=24)
			channel=16;
		US0_THR = data%256;  Delay_us(200);
		US0_THR = data/256;  Delay_us(200);
		US0_THR = channel-16;			Delay_us(600);
		Delay_us(1000000);
	}
*/
/*
//	data=AD_getdata(0);
	while(1){
		data=AD_getdata(AD_index[index]);
//		data=AD_getdata(0);
		US0_THR = data%256;  Delay_us(200);
		US0_THR = data/256;  Delay_us(200);
		index++;
		if(index==4){
			index=0;
			US0_THR = 0x00;  Delay_us(200);
			US0_THR = 0x80;  Delay_us(200);
		}
		count++;
		if(count==1200){
			count=0;
			Light(stat);
			if(stat==0){
				US0_THR = 0x01;  Delay_us(200);
			}else{
				US0_THR = 0x02;  Delay_us(200);
			}
			US0_THR = 0x80;  Delay_us(200);

//			HPLED1_control(stat);
			stat=1-stat;
		}
	}
*/
	while(1){
		Delay_us(470000);
		sum[0]=sum[1]=sum[2]=sum[3]=0;
		for(i=0; i<10; i++){
			for(j=0; j<4; j++){
				data=AD_getdata(AD_index[j]);
				sum[j]+=data;
				Delay_us(500);
			}
		}
		if(stat==0){
			US0_THR = 0x01;  Delay_us(200);
		}else{
			US0_THR = 0x02;  Delay_us(200);
		}
		US0_THR = 0x80;  Delay_us(200);
		for(i=0; i<4; i++){
			sum[i]/=10;
			US0_THR = sum[i]%256;  Delay_us(200);
			US0_THR = sum[i]/256;  Delay_us(200);
		}
		Light(stat);
		stat=1-stat;
	}

	while(1){	// 自动发送数据
		US0_THR = ch;
		ch++;
		if(ch>'9')
			ch='0';
		Delay_us(1000000);
		HPLED1_control(stat);
		stat=1-stat;
	}
	while(1){	// 自动回应数据
		if(US0_CSR & 1){
			US0_THR = US0_RHR+1;
		}
	}
}

⌨️ 快捷键说明

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