Login

Subversion Repositories NedoOS

Rev

Rev 8 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed


#ifndef __RAM_FUNCTIONS_C
#define __RAM_FUNCTIONS_C

#include "opora.h"
#include "RamFunctions.h"

void CallRAM(uint32_t address)
{
        //unsigned char * ptr;
        //ptr=(uint32_t*)address;
        PORTE->CLRTX=0x40;
        ((void(*)(void))(address))();
        PORTE->SETTX=0x40;
}

//╘єэъЎш  фы  чряшёш юфэюую срщЄр фрээ√ї т ╬╟╙
//╧рЁрьхЄЁ√ address - рфЁхё, ё ъюЄюЁюую эхюсїюфшью чряшё√трЄ№ фрээ√х т ╬╟╙
//┬ючтЁр∙рхь√ї чэрўхэшщ эхЄ
void WriteByteToRAM(uint32_t address, unsigned char b)
{
        unsigned char * ptr = (unsigned char *)address;
        PORTE->CLRTX=0x40;
        *ptr = b;
        PORTE->SETTX=0x40;
}

//╘єэъЎш  фы  чряшёш фрээ√ї юЄ 0 фю 0x3FFFF т ╬╟╙
//╧рЁрьхЄЁ√ address - рфЁхё, ё ъюЄюЁюую эхюсїюфшью чряшё√трЄ№ фрээ√х т ╬╟╙
//                      inv - Їыру чряшёш шэтхЁёэюую чэрўхэш  т ярь Є№ ╬╟╙
//┬ючтЁр∙рхь√ї чэрўхэшщ эхЄ
void WriteDataToRAM(uint32_t address, uint32_t inv)
{
        uint32_t*       ptr;
        uint32_t        tmp;

        ptr=(uint32_t*)address;

        PORTE->CLRTX=0x40;

        if(!inv)
                for(tmp=0;tmp<0x40000;tmp++)    {
                        *ptr++ =tmp;
                }
        else
                for(tmp=0;tmp<0x40000;tmp++)    {
                        *ptr++ =(~tmp);
                }

        PORTE->SETTX=0x40;
}

//╘єэъЎш  фы  яЁютхЁъш чряшёрээ√ї фрээ√ї т ╬╟╙
//╧рЁрьхЄЁ√ address - рфЁхё, ё ъюЄюЁюую эхюсїюфшью ЄхёЄшЁютрЄ№ фрээ√х т ╬╟╙
//                      inv - Їыру яЁютхЁъш шэтхЁёэ√ї чэрўхэшщ т ярь Єш ╬╟╙
//┬ючтЁр∙рхьюх чэрўхэшх:        0 - фрээ√х т ярь Єш юЄышўр■Єё  юЄ чряшёрээ√ї
//                                                      1 - тёх фрээ√х т ярь Єш ёютярфр■Є ё чряшёрээ√ьш
uint32_t TestData(uint32_t address, uint32_t inv)
{
        uint32_t *ptr, tmp, data, res;

        ptr=(uint32_t*)address;

        PORTE->CLRTX=0x40;
        res=1;

        if(!inv)
        {
                for(tmp=0;tmp<0x40000;tmp++)
                {
                        data=*ptr++;
                        if(data!=tmp)
                        {
                                res=0;
                                break;
                        }
                }
        }
        else
        {
                for(tmp=0;tmp<0x40000;tmp++)
                {
                        data=*ptr++;
                        if(data!=(~tmp))
                        {
                                res=0;
                                break;
                        }
                }
        }

        PORTE->SETTX=0x40;
        return res;
}


#endif  //__RAM_FUNCTIONS_C