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

📄 main.c

📁 源程序是在VisualDSP环境下开发出来的
💻 C
📖 第 1 页 / 共 2 页
字号:
	{
		case 0:		memcpy(g_nParameters,g_nParaCruise,NUMOFPARAMETERS);break;
		case 1:		memcpy(g_nParameters,g_nParaHSI,NUMOFPARAMETERS);break;
		case 2:		memcpy(g_nParameters,g_nParaAPR,NUMOFPARAMETERS);break;
		case 3:		memcpy(g_nParameters,g_nParaFAN,NUMOFPARAMETERS);break;
		default:	break;
	}
	temp=(temp>>8)&0xf;
	if(temp>=0&&temp<5&&temp!=g_nCurrentChannel)
		SoftReset(temp);
	return;
}

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

** 函数名:ClearOutputBuffer

** 输 入: 无

** 输 出: 无

** 功能描述:将输出缓冲区清空,即擦除屏幕上叠加上的字符

** 作 者:

** 日 期:2003.01.22

** 修改人:

** 日 期:2003.05.25

** 版 本:

****************************************************************/
void ClearOutputBuffer(void)
{
g_nNumOfResult=g_nNumOfToBeRotated=g_nNumOfRotatedResult=g_nNumOfHorizontalLine=0;
return;
}


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

** 函数名:Show

** 输 入: 无

** 输 出: 无

** 功能描述:将生成好的图形写入片外帧缓存

** 作 者:

** 日 期:2003.01.22

** 修改人:

** 日 期:2003.05.25

** 版 本:

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

void Show(void)
{
	asm_showhorizontalline();
	asm_showresult();
	asm_showrotatedresult();
return;
}




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

** 函数名:IRQ0interrupt

** 输 入: 无

** 输 出: 无

** 功能描述:IRQ0的中断服务子程序,配置DMA11用于FIFO到SRAM的数据输入

** 作 者:

** 日 期:2003.06.25

** 修改人:

** 日 期:2003.06.25

** 版 本:

****************************************************************/
void IRQ0interrupt(int useless)
{
	int* pCurrentBufferIn;
	asm("#include <def21160.h>");
	//关闭双核
	asm("BIT CLR MODE1 PEYEN;\
		USTAT1=ASTAT;	");
	asm("r0=0x4000;\
		DM(DMAC11)=r0;");
	if(g_bWithoutBG)
	{//如果没有背景	
		//计算当前行在片外输入帧存中的地址
		g_pInLineAddress=g_pCurrentBufferIn+g_nCurrentLineIn*WIDTHIN;	
		asm("r0=dm(_g_pInLineAddress);\
			dm(EI11)=r0;\
			r0=_g_xBackGroundColor;\
			dm(II11)=r0;\
			r0=0;\
			dm(IM11)=r0;\
			R1=2;\
			dm(EM11)=r1;\
			r0=360;\
			dm(C11)=r0;\
			dm(EC11)=r0;\
			r0=0x405;\
			dm(DMAC11)=r0;\
			ASTAT=USTAT1;");
	}
	else
	{//如果需要叠加上前级输入的背景
		g_pInLineAddress=g_pCurrentBufferIn+g_nCurrentLineIn*WIDTHIN-(WIDTHIN*OFFSETY+OFFSETX);	
		asm("r0=dm(_g_pInLineAddress);\
			R1=2;\
			dm(EI11)=r0;\
			dm(EM11)=r1;\
			r0=360;\
			dm(EC11)=r0;\
			r0=0xa801;\
			dm(DMAC11)=r0;\
			BIT SET FLAGS FLG0;\
			ASTAT=USTAT1;");
	}
	//当前行计数器加2,(因为是隔行输入)
	if((g_nCurrentLineIn+=2)>HEIGHTIN)	g_nCurrentLineIn=1;
	//如果到了一帧的结尾,片外的三个帧缓存相互切换。原本输入的变为叠加的,
	//原本叠加的变为输出的,输出的变为输入的。g_bBeginCompute=1通知主程序开始计算新的一帧
	else if(g_nCurrentLineIn==HEIGHTIN)	
	{
		if((g_nBlinkCounter-=1)<g_nBlinkVanishTime)g_nBlinkCounter=g_nBlinkExistTime;
		g_nCurrentLineIn=0;g_bBeginCompute=1;
		pCurrentBufferIn=g_pCurrentBufferIn;
		g_pCurrentBufferIn=g_pCurrentBufferOut;
		g_pCurrentBufferOut=g_pCurrentBufferOutput;
		g_pCurrentBufferOutput=pCurrentBufferIn;
		g_nCurrentLineOut=0;
	}
	return;			
}

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

** 函数名:EP1interrupt

** 输 入: 无

** 输 出: 无

** 功能描述:DMA11的中断服务子程序,配置DMA12用于SRAM到FIFO的数据输出

** 作 者:

** 日 期:2003.06.25

** 修改人:

** 日 期:2003.06.25

** 版 本:

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

void EP1interrupt(int useless)
{
	asm("#include <def21160.h>");
	asm("BIT CLR MODE1 PEYEN;\
		USTAT1=ASTAT;	");
	//拉低FLAG0,通知CPLD停止发出DMA所需的控制信号
	asm("BIT CLR FLAGS FLG0;");
	asm("r0=0x4000;\
		DM(DMAC12)=r0;");
	asm("r0=dm(_g_pOutLineAddress);\
		R1=2;\
		dm(EI12)=r0;\
		dm(EM12)=r1;\
		r0=360;\
		dm(EC12)=r0;\
		r0=0xa805;\
		dm(DMAC12)=r0;\
		BIT SET FLAGS FLG1;\
		ASTAT=USTAT1;");
	//当前行在片外输出帧存中的地址向后移一行
	g_pOutLineAddress+=WIDTHIN;	
	//如果到了输出帧存的末尾,则移到输出帧存的开始再输出一遍。
	if(++g_nCurrentLineOut>=HEIGHTOUT)
	{	
		g_nCurrentLineOut=0;g_pOutLineAddress=g_pCurrentBufferOut;
	}
	return;
}



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

** 函数名:EP2interrupt

** 输 入: 无

** 输 出: 无

** 功能描述:DMA12的中断服务子程序,清除FLAG1标记以结束DMA

** 作 者:

** 日 期:2003.06.25

** 修改人:

** 日 期:2003.06.25

** 版 本:

****************************************************************/
void EP2interrupt(int useless)
{
	asm("#include <def21160.h>");
	//拉低FLG1通知CPLD向后级的一行数据传送完毕
	asm("bit clr FLAGS FLG1;");

	return;
}


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

** 函数名:IRQ2interrupt

** 输 入: 无

** 输 出: 无

** 功能描述:IRQ2的中断服务子程序,每帧产生一次。在正常情况下每次中断时的
			g_nCurrentLineIn应相同,如果中断时的g_nCurrentLineIn
			有变化,说明有异常情况发生,如视频信号中断或中断后重新接通
			,此时将g_bChangeChannel置为1,主程序检测到g_bChangeChannel
			为1后会调用SoftReset()重新初始化。

** 全局变量:g_bChangeChannel

** 作 者:

** 日 期:2003.06.25

** 修改人:

** 日 期:2003.06.25

** 版 本:

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

void IRQ2interrupt(int useless)
{
	static int nLineInOfFirstTime;
	if(g_bChangeChannel)
	{
		//记录下第一次中断时的g_nCurrentLineIn
		nLineInOfFirstTime=g_nCurrentLineIn;
		g_bChangeChannel=false;
	}
	else
	{
		//如果g_nCurrentLineIn与第一次中断时的不同,将g_bChangeChannel置为1,主程序检测到后会重新初始化
		if(nLineInOfFirstTime!=g_nCurrentLineIn)
			{
				g_bChangeChannel=true;
			}
	}
	return;
}

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

** 函数名:LP0interrupt

** 输 入: 无

** 输 出: 无

** 功能描述:链路口0的中断服务子程序,配置链路口0以读入下一次的参数

** 作 者:

** 日 期:2003.06.25

** 修改人:

** 日 期:2003.06.25

** 版 本:

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

void LP0interrupt(int useless)
{
	asm(	"#include <def21160.h>");
	asm(	"#include <hddamacros.h>");
	asm(	"BIT CLR MODE1 PEYEN;\
			USTAT1=ASTAT;		");

	asm("	R0=0X2C688;\
			DM(LAR)=R0;\
			R0=0;\
			dm(LCTL0)=R0;		");
	if(!g_bChangeChannel)
		g_bCurrentParaBuf=!g_bCurrentParaBuf;
	if(g_bCurrentParaBuf)
	{
		asm("r0=_g_nParaBuf1;");
	}
	else
	{
		asm("R0=_g_nParaBuf0;");
	}
	asm("	DM(II4)=R0;\
			R0=1;\
			DM(IM4)=R0;\
			R0=1;\
			DM(C4)=R0;\
			R0=0X203;\
			DM(LCTL0)=R0;");


	asm("	ASTAT=USTAT1;");
	return;	
}

⌨️ 快捷键说明

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