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

📄 rio.c.bak

📁 dsp program
💻 BAK
字号:
#include <std.h>
#include <csl_irq.h>
#include <stdio.h>
#include <csl_irq.h>  
#include "reg1.h"


#define TX_RAM		0x80000000
#define TX_Ctrl_Reg	0x80040000
#define	RX_RAM		0x60000000
#define RX_Ctrl_Reg 0x60040000
#define	BUF_SZ		0x100
#define true		1
#define	false		0
#define	Inc			1
#define	Dec			0

void MGT_Reset();
void MGT_Start();
void FillData();
void CompareData();
void PrintResult();
void timer0_start();
interrupt void EX5_ISR();
interrupt void Timer0_ISR();

//Global Variable
int PingPong = Inc, Err_Flag = false, Comp_Flag = true, disorder = false;
int Total_times = 0, Err_times = 0, Errors = 0, int_times = 0;
short Pre_Data[256], Current_Data[256];

main()
{

	int  i;
	
	//interrupt enable
	CSR |= 0x1;	
	IER |= 0x4023;
	ISR = 0;
	
	T0CTL = 0;
	T0PRD = 0x7fff;
	
	
	/* initialize the CSL library */
//	CSL_init();
	
	  /* Let's disable/clear related interrupts just in case they are pending */
  /* fram a previous run of the program.                                  */  
//	IRQ_reset(IRQ_EVT_EDMAINT);
	

  /* Enable the related interrupts */
//  IRQ_enable(IRQ_EVT_EDMAINT);

  	//Reset MGT
	MGT_Reset();


	for (i = 0; i <= 0x10000; i++)
	{
		Total_times++;
		disorder = false;
		//Fill new Data
		FillData();
		
		//Reset MGT
		MGT_Reset();

		//start MGT
		//MGT_Start();		
		timer0_start();

		//wait for finishing comparation
		while(true)
		{
			if (Comp_Flag == false)
				break;		
		}
		Comp_Flag = true;

		
		if( Err_Flag )
		{
			Err_Flag = false;
			Err_times++;
			PrintResult();
		
		}			
		
	}
		
}


void MGT_Reset()
{
	//reset MGT_tx
	*(unsigned volatile int *)TX_Ctrl_Reg = 0;
	*(unsigned volatile int *)TX_Ctrl_Reg = 1;
	*(unsigned volatile int *)TX_Ctrl_Reg = 0;
	//reset MGT_rx
	*(unsigned volatile int *)RX_Ctrl_Reg = 0;
	*(unsigned volatile int *)RX_Ctrl_Reg = 1;
	*(unsigned volatile int *)RX_Ctrl_Reg = 0;
}

void FillData()
{
	//fill data into the TX ram
	int i, j;
	if ( PingPong )
	{	
		//Increase from 0 to 0x7ff 
		i = 0;
		
		for (j = 0; j < BUF_SZ; j++)
		{
		    *((unsigned volatile short *)TX_RAM + j) = i++;
		}
		
		PingPong = Dec;
	}
	else
	{	
		//Decrease from 0x7ff to 0
		i = 0xff;
		//from 0x0 to 0xff filled with 0
		
		for (j = 0; j < BUF_SZ; j++)
		{
		    *((unsigned volatile short *)TX_RAM + j) = i--;		    	
		}
		
		PingPong = Inc;
	}
}

void MGT_Start()
{
	//start MGT TX
	*(unsigned volatile int *)TX_Ctrl_Reg = 0x0;
	*(unsigned volatile int *)TX_Ctrl_Reg = 0x2;
	*(unsigned volatile int *)TX_Ctrl_Reg = 0x0;
}

void CompareData()
{
	int j;
	short Data_Receive;
	
	Errors = 0;
	
	if (PingPong == Dec )
	{
		//error occur
		for ( j = 0; j < BUF_SZ; j++)
		{
			Data_Receive = *((unsigned volatile short *)RX_RAM + j);

			if ( Data_Receive != j )
			{
				Current_Data[Errors] = Data_Receive;
				Pre_Data[Errors] = j;

				Err_Flag = true;
				Errors++;


			}			

		}

	}
	else
	{
		//error occur
		for ( j = 0; j < BUF_SZ; j++)
		{
			Data_Receive = *((unsigned volatile short *)RX_RAM + j);
			
			if ( Data_Receive != (0xff - j) )
			{
				Current_Data[Errors] = Data_Receive;
				Pre_Data[Errors] = 0xff - j;

				Err_Flag = true;
				Errors++;
			}
			
			
		}

	}
	
	// Errors don't occur then store Data
/*	if (Err_Flag == false)
	{
			for( i = 0; i <= 3; i++)
			{
				Pre_Data[i] = *((unsigned volatile short *)RX_RAM + i);
			}
			
			for( i = 0; i <= 3; i++)
			{
				Pre_Data[i + 4] = *((unsigned volatile short *)RX_RAM + 0xff8/2 + i);
			}		
	}
*/
}	


void PrintResult()
{
	int i;
	printf("Error!!  Total_times = %d        Err_Times = %d \n", Total_times, Err_times);			
	printf("Pre:  ");			
/*	for( i = 0; i <= 7; i++)
	{
		printf("0x%x	", Pre_Data[i]);
	}
	printf("\n");	
*/	
	if ( Errors > 10 )
	{
		Errors = 10;
	}
	if ( PingPong == Dec )
	{
		printf("Increase:  \n");
		if ( disorder == true )
		{
			printf("错位!!! \n");
		}
		for( i = 0; i < Errors; i++)
		{
			printf("0x%x:      0x%x  --->  0x%x \n", Pre_Data[i]*2, Pre_Data[i], Current_Data[i]);
		}
		printf("\n");	
	}
	else
	{
		printf("Decrease \n");
		if ( disorder == true )
		{
			printf("错位!!! \n");
		}
		for( i = 0; i < Errors; i++)
		{
			printf("0x%x:      0x%x  --->  0x%x \n", (0xff-Pre_Data[i])*2, Pre_Data[i], Current_Data[i]);
		}		
		printf("\n");
	}

}	


void timer0_start()
{
	T0CTL=0x000002c0;
}		


interrupt void EX5_ISR()
{
	CompareData();
	Comp_Flag = false;
}

interrupt void Timer0_ISR()
{
	//start MGT
	MGT_Start();
}

⌨️ 快捷键说明

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