Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #include "_global.h"
  2. #include "_screen.h"
  3. #include "_ps2k.h"
  4. #include <avr/interrupt.h>
  5.  
  6. //-----------------------------------------------------------------------------
  7.  
  8. u8 mode1, lang, int6vect=0;
  9. u8 flags1=0; // .0 - put_char вызывает directuart_putchar
  10.              // .1 - put_char вызывает uart_putchar
  11.              // .2 - put_char вызывает scr_putchar
  12.              // .3 - лог обмена SD в RS-232
  13.              // .4 - RS-232 RTS/CTS flow control
  14. volatile u8 newframe;
  15. volatile u16 mscounter;
  16. u8 _rnd[4]={0x53,0x65,0x45,0x64};
  17. u8 megabuffer[2048];
  18.  
  19. //-----------------------------------------------------------------------------
  20.  
  21. u8 ee_dummy[2] EEMEM = {0x54,0x53};
  22. u8 ee_mode1[1] EEMEM = {0xff};
  23. u8 ee_lang[1] EEMEM = {0};
  24.  
  25. //-----------------------------------------------------------------------------
  26. //выбор текущего регистра FPGA
  27. void fpga_sel_reg(u8 reg)
  28. {
  29.  SetSPICS();
  30.  SPDR=reg;
  31.  while ( !(SPSR&(1<<SPIF)) );
  32. }
  33.  
  34. //-----------------------------------------------------------------------------
  35. //обмен с регистрами в FPGA
  36. u8 fpga_reg(u8 reg, u8 data)
  37. {
  38.  SetSPICS();
  39.  SPDR=reg;
  40.  while ( !(SPSR&(1<<SPIF)) );
  41.  ClrSPICS();
  42.  SPDR=data;
  43.  while ( !(SPSR&(1<<SPIF)) );
  44.  SetSPICS();
  45.  return SPDR;
  46. }
  47.  
  48. //-----------------------------------------------------------------------------
  49. //обмен без установки регистра
  50. u8 fpga_same_reg(u8 data)
  51. {
  52.  ClrSPICS();
  53.  SPDR=data;
  54.  while ( !(SPSR&(1<<SPIF)) );
  55.  SetSPICS();
  56.  return SPDR;
  57. }
  58.  
  59. //-----------------------------------------------------------------------------
  60.  
  61. void timers_init(void)
  62. {
  63.  // timer3
  64.  TCCR3A=(0<<WGM31)|(0<<WGM30);
  65.  TCCR3B=(0<<WGM33)|(1<<WGM32)|(0<<CS32)|(0<<CS31)|(1<<CS30);
  66.  OCR3A=11058; // 0x2B32
  67.  ETIMSK|=(1<<OCIE3A);
  68. }
  69.  
  70. //-----------------------------------------------------------------------------
  71. // in: timeout - таймайт, мс (1..16383)
  72. void set_timeout_ms(u16 *storehere, u16 timeout)
  73. {
  74.  u16 tmp;
  75.  cli();
  76.  tmp=mscounter;
  77.  sei();
  78.  *storehere=(tmp+timeout)|0x8000;
  79. }
  80.  
  81. //-----------------------------------------------------------------------------
  82.  
  83. u8 check_timeout_ms(u16 *storedhere)
  84. {
  85.  if (!((*storedhere)&0x8000)) return 1;
  86.  u16 tmp;
  87.  cli();
  88.  tmp=mscounter;
  89.  sei();
  90.  tmp-=*storedhere;
  91.  if (!(tmp&0x4000))
  92.  {
  93.   *storedhere=0;
  94.   return 1;
  95.  }
  96.  return 0;
  97. }
  98.  
  99. //-----------------------------------------------------------------------------
  100.  
  101. void toggle_vga(void)
  102. {
  103.  mode1^=0b10000000;
  104.  fpga_reg(SCR_MODE,mode1&0b10000000);
  105.  _EEPUT(ee_mode1,mode1);
  106. }
  107.  
  108. //-----------------------------------------------------------------------------
  109.  
  110. void save_lang(void)
  111. {
  112.  _EEPUT(ee_lang,lang);
  113. }
  114.  
  115. //-----------------------------------------------------------------------------
  116.