
#include "..\inc\OPORA\opora.h"
#include "..\inc\CONFIG\config.h"
#include "..\inc\ROM\RomFunctions.h"

uint32_t tmp;

int main()
{
	CoreClockConfig();
	PortsConfig();
	ExternalBusConfig();
	
	//начинаем тестирование первого сектора
	EraseSectorToROM(0);
	//запись первого тестового вектора в первый сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM(tmp,tmp);
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+(tmp<<2))!=tmp)
		{
			PORTD->SETTX=1<<7;
			while(1);
		}
	
	EraseSectorToROM(0);
	//запись второго тестового вектора в первый сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM(tmp,(~tmp));
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+(tmp<<2))!=(~tmp))
		{
			PORTD->SETTX=1<<8;
			while(1);
		}
	//тестирование первого сектора завершено
	EraseSectorToROM(0);
/************************************************************************
************************************************************************/
//начинаем тестирование второго сектора
	EraseSectorToROM(1);
	//запись первого тестового вектора во второй сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM(tmp+0x10000,tmp);
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+((tmp+0x10000)<<2))!=tmp)
		{
			PORTD->SETTX=1<<7;
			while(1);
		}
	
	EraseSectorToROM(1);
	//запись второго тестового вектора во второй сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM((tmp+0x10000),(~tmp));
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+((tmp+0x10000)<<2))!=(~tmp))
		{
			PORTD->SETTX=1<<8;
			while(1);
		}
	//тестирование второго сектора завершено
	EraseSectorToROM(1);
/************************************************************************
************************************************************************/
//начинаем тестирование третьего сектора
	EraseSectorToROM(2);
	//запись первого тестового вектора в третий сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM(tmp+0x20000,tmp);
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+((tmp+0x20000)<<2))!=tmp)
		{
			PORTD->SETTX=1<<7;
			while(1);
		}
	
	EraseSectorToROM(2);
	//запись второго тестового вектора в третий сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM((tmp+0x20000),(~tmp));
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+((tmp+0x20000)<<2))!=(~tmp))
		{
			PORTD->SETTX=1<<8;
			while(1);
		}
	//тестирование третьего сектора завершено
	EraseSectorToROM(2);
/************************************************************************
************************************************************************/
//начинаем тестирование четвертого сектора
	EraseSectorToROM(3);
	//запись первого тестового вектора в четвертый сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM(tmp+0x30000,tmp);
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+((tmp+0x30000)<<2))!=tmp)
		{
			PORTD->SETTX=1<<7;
			while(1);
		}
	
	EraseSectorToROM(3);
	//запись второго тестового вектора в четвертый сектор
	for(tmp=0;tmp<0x10000;tmp++)	WriteWordToROM((tmp+0x30000),(~tmp));
	//проверка, что все данные правильно записались
	for(tmp=0;tmp<0x10000;tmp++)
		if(*(uint32_t*)(0x60000000+((tmp+0x30000)<<2))!=(~tmp))
		{
			PORTD->SETTX=1<<8;
			while(1);
		}
	//тестирование четвертого сектора завершено
	EraseSectorToROM(3);
/************************************************************************
************************************************************************/
//тест закончен
	
	PORTD->SETTX=1<<10;
	while(1);
}





