Subversion Repositories pentevo

Rev

Rev 437 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. #include "pins.h"
  5. #include "mytypes.h"
  6.  
  7. #include "main.h"
  8. #include "atx.h"
  9. #include "rs232.h"
  10. #include "zx.h"
  11.  
  12. //if want Log than comment next string
  13. #undef LOGENABLE
  14.  
  15. volatile UWORD atx_counter;
  16.  
  17. void wait_for_atx_power(void)
  18. {
  19.         UBYTE j = MCUCSR;
  20.  
  21.         //clear status register
  22.         MCUCSR = 0;
  23.  
  24. #ifdef LOGENABLE
  25.         char log_ps2keyboard_parse[] = "MC..\r\n";
  26.         log_ps2keyboard_parse[2] = ((j >> 4) <= 9 )?'0'+(j >> 4):'A'+(j >> 4)-10;
  27.         log_ps2keyboard_parse[3] = ((j & 0x0F) <= 9 )?'0'+(j & 0x0F):'A'+(j & 0x0F)-10;
  28.         to_log(log_ps2keyboard_parse);
  29. #endif
  30.  
  31.         //check power
  32.         if ( (nCONFIG_PIN & (1<<nCONFIG)) == 0 )
  33.         {
  34.                 //if not external reset
  35.                 //then wait for atx power on button (SOFTRESET)
  36.                 if ( !(j & ((1<<JTRF)|(1<<WDRF)|(1<<BORF)|(1<<EXTRF))) ||
  37.                          (j & (1<<PORF)) )
  38.                 while( SOFTRES_PIN&(1<<SOFTRES) );
  39.  
  40.                 //switch on ATX power
  41.                 ATXPWRON_PORT |= (1<<ATXPWRON);
  42.  
  43.                 //1 sec delay
  44.                 j=50;
  45.                 do _delay_ms(20); while(--j);
  46.         }
  47.  
  48.         //init port F
  49.         PORTF = 0b11111000;
  50.         //clear counter
  51.         atx_counter = 0;
  52. }
  53.  
  54. void atx_power_task(void)
  55. {
  56.         static UWORD last_count = 0;
  57.         UBYTE j = 50;
  58.  
  59.         if ( atx_counter > 1700 )
  60.         {
  61.                 if ( ( SOFTRES_PIN & (1<<SOFTRES) ) == 0 )
  62.                 {
  63.                         //atx power off button pressed (~5 sec)
  64.  
  65.                         //switch off atx power
  66.                         ATXPWRON_PORT &= ~(1<<ATXPWRON);
  67.                 }
  68.                 else
  69.                 {
  70.                         //enable hard reset
  71.                         flags_register |= FLAG_HARD_RESET;
  72.                 }
  73.         }
  74.  
  75.         if ( ( last_count > 0 ) && ( atx_counter == 0 ) )
  76.         {
  77.                 //soft reset (reset Z80 only)
  78.                 zx_spi_send(SPI_RST_REG, 0, 0x7F);
  79.         }
  80.         last_count = atx_counter;
  81.  
  82.         if ( ( nCONFIG_PIN & (1<<nCONFIG) ) == 0 )
  83.         {
  84.                 //power down
  85.  
  86.                 //power led off (timer output disconnect from led pin)
  87.                 TCCR2 &= ~((1<<COM20)|(1<<COM21));
  88.  
  89.                 //wait for button released
  90.                 while (  ( SOFTRES_PIN & (1<<SOFTRES) ) == 0 );
  91.  
  92.                 //1 sec delay
  93.                 do _delay_ms(20); while(--j);
  94.  
  95.                 last_count = 0;
  96.  
  97.                 //enable hard reset
  98.                 flags_register |= FLAG_HARD_RESET;
  99.         }
  100. }
  101.