//---------------------------
// Програама приема-передачи 4096 байт
// по интефейсу SPI для C8051F067.
//---------------------------------
#include "C8051F060.h"
//---------------------
unsigned char k,INB;
unsigned char xdata INARRAY[1024];  //Входной массив, принимаемый из F320.
//unsigned char xdata OUTARRAY[1024]; //Выходной массив, передаваемый в F320.
unsigned short i;
//sbit MISO_SPI  = P0^3;
//--------------
void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}
//----------------------
void SPI_Init()
{
    SFRPAGE   = SPI0_PAGE;
    SPI0CFG   = 0x40;
    SPI0CN    = 0x0d;//0x01-3wire,0x0d-4wire;
    SPI0CKR   = 0x02; //si8663(321), si8642(381), EFM8UB1- Ok
//    SPI0CKR   = 0x03;// adum7642(321) - ok

//24 MHZ:0x02-4MHZ,0x03-3MHZ,0x04-2.4MHZ,5-2MHZ
//    MISO_SPI=1;
}
//------------------------
void Port_IO_Init()
{
    // P0.0  -  TX0 (UART0), Push-Pull,  Digital
    // P0.1  -  RX0 (UART0), Open-Drain, Digital
    // P0.2  -  SCK  (SPI0), Push-Pull,  Digital
    // P0.3  -  MISO (SPI0), Open-Drain, Digital
    // P0.4  -  MOSI (SPI0), Push-Pull,  Digital
    // P0.5  -  Unassigned,  Open-Drain, Digital
    // P0.6  -  Unassigned,  Open-Drain, Digital
    // P0.7  -  Unassigned,  Push-Pull,  Digital

    // P1,P2  -  Unassigned,  Open-Drain, Digital
//---------------------------
    SFRPAGE   = CONFIG_PAGE;
    P0MDOUT   = 0xb5;
    XBR0      = 0x06;
    XBR2      = 0x40;
}
//----------------
// Внешний генератор 24000000 Гц
//-----------------------
void Oscillator_Init()
{
    int i = 0;
    SFRPAGE   = CONFIG_PAGE;
    SFRPAGE   = CONFIG_PAGE;
    SFRPAGE   = CONFIG_PAGE;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);
    while ((OSCXCN & 0x80) == 0);
    CLKSEL    = 0x01;
    OSCICN    = 0x00;
}
//-------------------------------
void outspi(unsigned char byte) {
//----------
   NSSMD0=0;    //4-wire
//----------
   SPI0DAT=byte;  // Вывод байта по SPI.
   while (!SPIF); // Ожидание окончания вывода байта
//----------
   NSSMD0=1;      //4-wire
//----------
   SPIF=0;        // Сброс флага окончания передачи.
   }
//-----------------
   unsigned char inspi() {
   unsigned char byte;
//--------
   NSSMD0=0;      //4-wire
//---------
   SPI0DAT=0x0f;  // Ввод байта в микроконтроллер.
   while (!SPIF); // Ожидание окончания ввода байта
//----------
   NSSMD0=1;      //4-wire
//----------
   SPIF=0;        // Сброс флага окончания приема.
   byte=SPI0DAT;
   return(byte);
   }
//----------------
/**************************************************/
void main(void)
 {
    Reset_Sources_Init();
    SPI_Init();
    Port_IO_Init();
    Oscillator_Init();

    SFRPAGE   = SPI0_PAGE;
//----------------
START:
//----------------
   while (inspi() != 0x40);
//---------------------------------------------
   for (k=0;k<4;k++) {
       for (i=0;i<1024;i++) {     // Приняли
           INARRAY[i]=inspi();    // входной массив
            }                     // INARRAY[i] 1024 байт
    }                             // 4 раза.
//---------------------------------------------------
   //for (i=0;i<64;i++) {           // Изменили во
   //   INARRAY[1023-i]=INARRAY[i]; // входном массиве
   //    }                          // последние 64 байта.
//-------------------------------------------------------

   for (k=0;k<4;k++) {            // Вывели

     //  for (i=0;i<1024;i++) {     // измененный
     //  outspi(INARRAY[i]);        // выходной массив
     //       }                     // INTARRAY[i].

       for(i=1024;i!=0;i--){   //Передача в C8051F381
        outspi(INARRAY[i-1]);  //масиива INARRAY[i]
        }                      //в обратном порядке.
    }                             // 4 раза.
//-------------------------------------------------------
  goto START;
//----------------
   } // от Main
