Subversion Repositories pentevo

Rev

Rev 601 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. #include "_global.h"
  2. #include "_output.h"
  3. #include "_ps2k.h"
  4. #include "_screen.h"
  5. #include "_uart.h"
  6. #include "_pintest.h"
  7. #include "_t_dram.h"
  8. #include "_t_video.h"
  9. #include "_t_beep.h"
  10. #include "_t_zxkbd.h"
  11. #include "_t_ps2k.h"
  12. #include "_t_ps2m.h"
  13. #include "_t_rs232.h"
  14. #include "_t_sd.h"
  15. #include <avr/interrupt.h>
  16. #include <util/delay_basic.h>
  17.  
  18. extern uint_farptr_t fpgadat1;
  19.  
  20. //-----------------------------------------------------------------------------
  21.  
  22. void nothing(void)
  23. {
  24.  asm volatile ("nop");
  25. }
  26.  
  27. //-----------------------------------------------------------------------------
  28.  
  29. PGM_VOID_P hndl_menu_main[8] PROGMEM = {Test_PS2Keyb,
  30.                                         Test_ZXKeyb,
  31.                                         Test_PS2Mouse,
  32.                                         Test_Beep,
  33.                                         Test_Video,
  34.                                         Test_RS232,
  35.                                         Test_SD_MMC,
  36.                                         nothing};
  37.  
  38. const MENU_DESC menu_main PROGMEM = {
  39.   6,3,26,8,
  40.   Test_DRAM,
  41.   1000,
  42.   hndl_menu_main,
  43.   str_menu_main
  44. };
  45.  
  46. //-----------------------------------------------------------------------------
  47.  
  48. void TestFpgaExchange(void)
  49. {
  50.  u8 i, curr, prev;
  51.  curr=random8();
  52.  fpga_reg(SCR_ATTR,curr);
  53.  i=0;
  54.  do
  55.  {
  56.   prev=~curr;
  57.   curr=random8();
  58.   if (fpga_same_reg(curr)!=prev)
  59.   {
  60.    print_mlmsg(mlmsg_someerrors);
  61.    while (1)
  62.    {
  63.     u16 j, errors;
  64.     errors=0;
  65.     j=50000;
  66.     do
  67.     {
  68.      prev=~curr;
  69.      curr=random8();
  70.      if (fpga_same_reg(curr)!=prev) errors++;
  71.     }while (--j);
  72.     print_mlmsg(mlmsg_spi_test);
  73.     print_dec16(errors);
  74.    }
  75.   }
  76.  }while (--i);
  77. }
  78.  
  79. //-----------------------------------------------------------------------------
  80.  
  81. void PowerStatus(PGM_U8_P *mlmsg)
  82. {
  83.  print_mlmsg(mlmsg);
  84.  print_msg(msg_power_pg);
  85.  u8 ch;
  86.  ch='0';
  87.  if (PINC&(1<<PC5)) ch++;
  88.  put_char(ch);
  89.  print_msg(msg_power_vcc5);
  90.  ch='0';
  91.  if (PINF&(1<<PF0)) ch++;
  92.  put_char(ch);
  93. }
  94.  
  95. //-----------------------------------------------------------------------------
  96.  
  97. void PowerUp(void)
  98. {
  99.  PowerStatus(mlmsg_statusof_crlf);
  100.  u8 i;
  101.  i=PINF&(1<<PF0);
  102.  if ( (i==0) || ((PINC&(1<<PC5))==0) )
  103.  {
  104.   if (i==0)
  105.   {
  106.    print_mlmsg(mlmsg_power_on);
  107.    while ((PINF&(1<<PF0))==0)
  108.     PowerStatus(mlmsg_statusof_cr);
  109.   }
  110.   i=170;
  111.   do
  112.    PowerStatus(mlmsg_statusof_cr);
  113.   while (--i);
  114.  }
  115. }
  116.  
  117. //-----------------------------------------------------------------------------
  118.  
  119. int main(void)
  120. {
  121.  cli();
  122.  MCUCSR=0;
  123.  _EEGET(mode1,ee_mode1);
  124.  _EEGET(lang,ee_lang);
  125.  if (lang>=TOTAL_LANG) lang=0;
  126.  
  127.  PinTest();                                     // проверка ножек ATMEGA128
  128.                                                 // активирует вывод через UART без буфера FIFO
  129.  // configure pins
  130.  PORTG = 0b11111111;
  131.  DDRG  = 0b00000000;
  132.  
  133.  PORTF = 0b00001000;
  134.  DDRF  = 0b00001000;
  135.  
  136.  PORTE = 0b11110011;
  137.  DDRE  = 0b00000000;
  138.  
  139.  PORTD = 0b11111111;
  140.  DDRD  = 0b00000000;
  141.  
  142.  PORTC = 0b11011111;
  143.  DDRC  = 0b00000000;
  144.  
  145.  PORTB = 0b11111001;
  146.  DDRB  = 0b10000111;
  147.  
  148.  PORTA = 0b11111111;
  149.  DDRA  = 0b00000000;
  150.  
  151.  PowerUp();
  152.  
  153.  print_mlmsg(mlmsg_cfgfpga);
  154.  load_fpga(GET_FAR_ADDRESS(fpgadat1));          //инициализация SPI и загрузка FPGA
  155.  SPCR=(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA); // SPI reinit
  156.  print_mlmsg(mlmsg_done1);
  157.  
  158.  TestFpgaExchange();
  159.  print_msg(msg_ok);
  160.  
  161.  _delay_loop_2(553); // 200 us
  162.  uart_init();
  163.  ps2k_init();
  164.  timers_init();
  165.  EICRB|=(1<<ISC61)|(0<<ISC60);
  166.  EIMSK|=(1<<INT6);
  167.  sei();
  168.  
  169.  fpga_reg(SCR_MODE,mode1&0b10000000);
  170.  fpga_reg(INT_CONTROL,0b00000000);
  171.  
  172.  ps2k_detect_kbd();
  173.  
  174.  fpga_reg(MTST_CONTROL,0b00000001);
  175.  
  176.  print_msg(msg_ready);
  177.  ps2k_setsysled();
  178.  
  179.  while (1) scr_menu(&menu_main);
  180. }
  181.  
  182. //-----------------------------------------------------------------------------
  183.