recv.c

来自「tigersharc ts101 LINK口数据传输程序」· C语言 代码 · 共 131 行

C
131
字号

#include "utils.h"
#include "TSLinkDrv.h"
#include <stdio.h>

#define BUFFER_LENGTH 32768
#define CLOCK_RATE 300
#define REPEAT_TIME 1000

int Buffer[BUFFER_LENGTH];
int FrameCount = 0;

void MakeBuffer()
{
	int i;
	
	for(i = 0; i < BUFFER_LENGTH; i++)
		Buffer[i] = 0x5a5a0000 + i;
}

bool CheckBuffer()
{
	int i;
	
	for(i = 0; i < BUFFER_LENGTH; i++)
	{
		if(Buffer[i] != 0x5a5a0000 + i)
			return false;
	}
	
	return true;
}

void main()
{
	bool IsSender;
	int LinkID;
	int LinkSpeed;
	unsigned int StartTime, EndTime, Duration;
	float Speed;
	int i, count;
	bool VerifyOK;
	
	__builtin_sysreg_write(__SYSCON, 0x1A79E7);
	__builtin_sysreg_write(__SDRCON, 0x5213);
	
	IsSender = false;
		
	LinkID = 1;
	LinkSpeed = 1;
		
	switch(LinkSpeed)
	{
	case 0:
		LinkInit(LinkID, LINK_SPEED_0);
		break;
	case 1:
		LinkInit(LinkID, LINK_SPEED_1);
		break;
	case 2:
		LinkInit(LinkID, LINK_SPEED_2);
		break;
	case 3:
		LinkInit(LinkID, LINK_SPEED_3);
		break;
	default:
		break;
	}

	if(IsSender)
	{
		//send
		VerifyOK = true;
		MakeBuffer();
 		init_timer(0, 0xffff, 0xffffffff);
		StartTime = start_timer(0);	
		LinkSendDMAW(LinkID, (void*)Buffer, BUFFER_LENGTH);
		EndTime = stop_timer(0);	
		Duration = StartTime - EndTime;		
		Speed = 4 * BUFFER_LENGTH * CLOCK_RATE / (float)Duration;

		//recv
		for(count = 0; count < REPEAT_TIME; count++)
		{
			LinkRecvDMAW(LinkID, (void*)Buffer, BUFFER_LENGTH);	
			if(!CheckBuffer())
			{
				VerifyOK = false;
				break;
			}
			LinkSendDMAW(LinkID, (void*)Buffer, BUFFER_LENGTH);
			FrameCount++;
		}
		if(VerifyOK)
			printf("Verify OK. Speed = %f\n", Speed);
		else
			printf("Verify Error.\n");
	}
	else
	{
		VerifyOK = true;
		//recv
		LinkRecvDMAW(LinkID, (void*)Buffer, BUFFER_LENGTH);	
		
		if(!CheckBuffer())
			VerifyOK = false;

						
		//send	
		for(count = 0; count < REPEAT_TIME; count++)
		{
			LinkSendDMAW(LinkID, (void*)Buffer, BUFFER_LENGTH);
			LinkRecvDMAW(LinkID, (void*)Buffer, BUFFER_LENGTH);	
			if(!CheckBuffer())
			{
				VerifyOK = false;
				break;
			}
			FrameCount++;
		}
		if(VerifyOK)
			printf("Verify OK.\n");
		else
			printf("Verify Error.\n");
	}

}



⌨️ 快捷键说明

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