?? rio.c.bak
字號(hào):
#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("錯(cuò)位!!! \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("錯(cuò)位!!! \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();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -