Top secrets sources NedoPC pentevo

Rev

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

#include "_global.h"
#include "_output.h"
#include "_uart.h"
#include <util/delay_basic.h>

//-----------------------------------------------------------------------------

void PinTest(void)
{
 u8 err, tmp;

 err=0;                                         // ¯à®¢¥àª  ­®¦ª¨ UART TX
 PORTD|=(1<<PD3);
 _delay_loop_1(3);
 if (!(PIND&(1<<PD3))) err|=0x01;
 PORTD&=~(1<<PD3);
 DDRD|=(1<<PD3);
 _delay_loop_1(3);
 if (PIND&(1<<PD3)) err|=0x02;
 DDRD&=~(1<<PD3);

 if (err)                                       // ¯à®¡«¥¬ë á ­®¦ª®© UART TX
 {                                              // å ®â¨ç¥áª¨ ¬¨£ ¥¬ á¢.¤¨®¤®¬
  DDRB|=(1<<PB7);
  while (1)
  {
   PORTB&=~(1<<PB7);                            // led off
   if (random8()&0x01) PORTB|=(1<<PB7);        // led on
   _delay_loop_2(0x6c00);
  }
 }
                                                // ¯à®¡«¥¬ á ­®¦ª¨ UART TX ­¥â -
 directuart_init();                             // - § ¤¥©áâ¢ã¥¬ UART ¡¥§ ¡ãä¥à  FIFO
 directuart_crlf();
 directuart_crlf();
 directuart_crlf();
 print_msg(msg_title1);
 print_short_vers();
 print_mlmsg(mlmsg_pintest);
                                                // ¯à®¢¥àª  ­®¦¥ª. 1 íâ ¯.
 PORTA=0b01010101;
 DDRA =0b10101010;
 PORTB=0b10000010;
 DDRB =0b00000101;
 PORTC=0b00010101;
 DDRC =0b00001010;
 PORTD|= (1<<PD5);
 DDRD &=~(1<<PD5);
 PORTE|= (1<<PE0);
 DDRE &=~(1<<PE0);
 PORTE&=~(1<<PE1);
 DDRE |= (1<<PE1);
 PORTG=0b00010101;
 DDRG =0b00001010;
 _delay_loop_2(276); // 100 us

 err=0;
 tmp=PINA;
 if (tmp!=0b01010101) err|=0x01;
 tmp=PINB;
 if ((tmp&0b10000111)!=0b10000000) err|=0x02;
 tmp=PINC;
 if ((tmp&0b00011111)!=0b00010101) err|=0x04;
 if (!(PIND&(1<<PD5))) err|=0x08;
 tmp=PINE;
 if ((tmp&0b00000011)!=0b00000001) err|=0x10;
 tmp=PING;
 if ((tmp&0b00011111)!=0b00010101) err|=0x20;
                                                // ¯à®¢¥àª  ­®¦¥ª. 2 íâ ¯.
 PORTA=0b10101010;
 DDRA =0b01010101;
 PORTB=0b00000101;
 DDRB =0b10000010;
 PORTC=0b00001010;
 DDRC =0b00010101;
 PORTD&=~(1<<PD5);
 DDRD |= (1<<PD5);
 PORTE&=~(1<<PE0);
 DDRE |= (1<<PE0);
 PORTE|= (1<<PE1);
 DDRE &=~(1<<PE1);
 PORTG=0b00001010;
 DDRG =0b00010101;
 _delay_loop_2(276); // 100 us

 tmp=PINA;
 if (tmp!=0b10101010) err|=0x01;
 tmp=PINB;
 if ((tmp&0b10000111)!=0b00000101) err|=0x02;
 tmp=PINC;
 if ((tmp&0b00011111)!=0b00001010) err|=0x04;
 if (PIND&(1<<PD5)) err|=0x08;
 tmp=PINE;
 if ((tmp&0b00000011)!=0b00000010) err|=0x10;
 tmp=PING;
 if ((tmp&0b00011111)!=0b00001010) err|=0x20;
                                                // ¨â®£, ¯¥ç âì १ã«ìâ â 
 if (err)
 {
  u16 ptr;
  ptr=0x0020;
  while (ptr<0x003c) *(u8*)(ptr++)=0;
  ptr=0x0061;
  while (ptr<0x0066) *(u8*)(ptr++)=0;
  print_mlmsg(mlmsg_pintest_error);
  if (err&0x01) print_msg(msg_pintest_pa);
  if (err&0x02) print_msg(msg_pintest_pb);
  if (err&0x04) print_msg(msg_pintest_pc);
  if (err&0x08) print_msg(msg_pintest_pd);
  if (err&0x10) print_msg(msg_pintest_pe);
  if (err&0x20) print_msg(msg_pintest_pg);
  print_mlmsg(mlmsg_halt);
  while (1) {}
 }
 else
 {
  print_mlmsg(mlmsg_pintest_ok);
 }
}

//-----------------------------------------------------------------------------