//############################################################################################################################################################# // idiBus_Chip_2560_TEST_ARDUINO // MegaCore : ATmega1280 / ATmega2560 // BOD 2.7V, Bootloader Yes(USART0), Clock External 16MHz, 115200, Programmer STK500 as ISP // board : idiBus_Chip_2560_testing_rev_0_1 //############################################################################################################################################################# // настраиваемые параметры // #define chip 1280 // 1280 or 1260 #define chip 2560 // 1280 or 1260 #define rev 5 // board revision // #define rev 7 // #define rev 8 #define time_delay_def 250 // время исполнения визуальных шагов теста, команды s, f, d #define time_delay_fast 10 #define time_delay_slow 1000 #define adc_level_med_l 1667 // уровни проверки ADC #define adc_level_med_h 2500 #define adc_level_delta 32 #define adc_level_log_0 16 #define adc_level_log_1 4080 //############################################################################################################################################################# uint16_t TIME_DALAY; String CMD; #define COMMAND_SIZE 100 char COMMAND[COMMAND_SIZE]; uint16_t TOTAL_ERROR; //############################################################################################################################################################# // базовые 0-35 #define _GPIO19 0 #define _GPIO17 1 #define _GPIO15 2 #define _GPIO13 3 #define _GPIO11 4 #define _GPIO9 5 #define _GPIO7 6 #define _GPIO5 7 #define _GPIO3 8 #define _GPIO18 9 #define _GPIO16 10 #define _GPIO14 11 #define _GPIO12 12 #define _GPIO10 13 #define _GPIO8 14 #define _GPIO6 15 #define _GPIO4 16 #define _GPIO2 17 #define _IRTD_CNTRL 18 #define _UART3_TX 19 #define _UART3_RX 20 #define _UART2_RX 21 #define _UART2_TX 22 #define _UART2_RTEN 23 #define _SSL_0 24 #define _SSL_1 25 #define _SSL_2 26 #define _GPIO0 27 #define _SG_CNTRL 28 #define _UART1_RX 29 #define _UART1_TX 30 #define _UART1_RTEN 31 #define _SSH_0 32 #define _SSH_1 33 #define _SSH_2 34 #define _GPIO1 35 // альтернативные 36-48 #define _GPIO11A 36 #define _GPIO9A 37 #define _GPIO7A 38 #define _GPIO5A 39 #define _GPIO3A 40 #define _GPIO10A 41 #define _GPIO8A 42 #define _GPIO6A 43 #define _GPIO4A 44 #define _GPIO2A 45 #define _GPIO0A 46 #define _GPIO1A 47 #define _API0A 48 // дополнительные 49-55 #define _JTAG_TCK 49 #define _JTAG_TDO 50 #define _JTAG_TMS 51 #define _JTAG_TDI 52 #define _SPI_MISO 53 #define _SPI_SCK 54 #define _SPI_MOSI 55 // незадействованные 56-73 #define _PH2 56 #define _PB0 57 #define _PB4 58 #define _PG3 59 #define _PG4 60 #define _PL2 61 #define _PL5 62 #define _PD4 63 #define _PD5 64 #define _PD6 65 #define _PJ2 66 #define _PJ3 67 #define _PJ4 68 #define _PJ5 69 #define _PJ6 70 #define _PJ7 71 #define _PF2 72 #define _PF3 73 // USART0 #define _UART0_RX 74 #define _UART0_TX 75 // ADC PK0-7 #define _API0 76 #define _API1 77 #define _API2 78 #define _API3 79 #define _API4 80 #define _API5 81 #define _API6 82 #define _API7 83 #define _LTD_SGNL 84 #define _IRTD_SGNL 85 //############################################################################################################################################################# typedef struct { // GPIOs volatile unsigned char *PORT; volatile unsigned char *PIN; volatile unsigned char *DDR; volatile unsigned char BIT; String NAME; } GPIO_type; #define GPIO_COUNT 86 GPIO_type GPIO[GPIO_COUNT]; //############################################################################################################################################################# void GPIO_INIT(void) { // базовые 0-35 GPIO[_GPIO19]= (GPIO_type) {&PORTA, &PINA, &DDRA, 0, "GPIO19"}; GPIO[_GPIO17]= (GPIO_type) {&PORTA, &PINA, &DDRA, 2, "GPIO17"}; GPIO[_GPIO15]= (GPIO_type) {&PORTA, &PINA, &DDRA, 4, "GPIO15"}; GPIO[_GPIO13]= (GPIO_type) {&PORTA, &PINA, &DDRA, 6, "GPIO13"}; GPIO[_GPIO11]= (GPIO_type) {&PORTG, &PING, &DDRG, 2, "GPIO11"}; GPIO[_GPIO9]= (GPIO_type) {&PORTC, &PINC, &DDRC, 6, "GPIO9"}; GPIO[_GPIO7]= (GPIO_type) {&PORTC, &PINC, &DDRC, 4, "GPIO7"}; GPIO[_GPIO5]= (GPIO_type) {&PORTC, &PINC, &DDRC, 2, "GPIO5"}; GPIO[_GPIO3]= (GPIO_type) {&PORTC, &PINC, &DDRC, 0, "GPIO3"}; GPIO[_GPIO18]= (GPIO_type) {&PORTA, &PINA, &DDRA, 1, "GPIO18"}; GPIO[_GPIO16]= (GPIO_type) {&PORTA, &PINA, &DDRA, 3, "GPIO16"}; GPIO[_GPIO14]= (GPIO_type) {&PORTA, &PINA, &DDRA, 5, "GPIO14"}; GPIO[_GPIO12]= (GPIO_type) {&PORTA, &PINA, &DDRA, 7, "GPIO12"}; GPIO[_GPIO10]= (GPIO_type) {&PORTC, &PINC, &DDRC, 7, "GPIO10"}; GPIO[_GPIO8]= (GPIO_type) {&PORTC, &PINC, &DDRC, 5, "GPIO8"}; GPIO[_GPIO6]= (GPIO_type) {&PORTC, &PINC, &DDRC, 3, "GPIO6"}; GPIO[_GPIO4]= (GPIO_type) {&PORTC, &PINC, &DDRC, 1, "GPIO4"}; GPIO[_GPIO2]= (GPIO_type) {&PORTG, &PING, &DDRG, 1, "GPIO2"}; GPIO[_IRTD_CNTRL]=(GPIO_type) {&PORTE, &PINE, &DDRE, 4, "IRTD_CNTRL"}; GPIO[_UART3_TX ]=(GPIO_type) {&PORTJ, &PINJ, &DDRJ, 1, "UART3_TX"}; GPIO[_UART3_RX ]=(GPIO_type) {&PORTJ, &PINJ, &DDRJ, 0, "UART3_RX"}; GPIO[_UART2_RX ]=(GPIO_type) {&PORTH, &PINH, &DDRH, 0, "UART2_RX"}; GPIO[_UART2_TX ]=(GPIO_type) {&PORTH, &PINH, &DDRH, 1, "UART2_TX"}; GPIO[_UART2_RTEN]=(GPIO_type) {&PORTH, &PINH, &DDRH, 3, "UART2_RTEN"}; GPIO[_SSL_0]= (GPIO_type) {&PORTH, &PINH, &DDRH, 4, "SSL_0"}; GPIO[_SSL_1]= (GPIO_type) {&PORTH, &PINH, &DDRH, 5, "SSL_1"}; GPIO[_SSL_2]= (GPIO_type) {&PORTH, &PINH, &DDRH, 6, "SSL_2"}; GPIO[_GPIO0]= (GPIO_type) {&PORTD, &PIND, &DDRD, 7, "GPIO0"}; GPIO[_SG_CNTRL]= (GPIO_type) {&PORTE, &PINE, &DDRE, 3, "SG_CNTRL"}; GPIO[_UART1_RX]= (GPIO_type) {&PORTD, &PIND, &DDRD, 2, "UART1_RX"}; GPIO[_UART1_TX]= (GPIO_type) {&PORTD, &PIND, &DDRD, 3, "UART1_TX"}; GPIO[_UART1_RTEN]=(GPIO_type) {&PORTL, &PINL, &DDRL, 6, "UART1_RTEN"}; GPIO[_SSH_0]= (GPIO_type) {&PORTL, &PINL, &DDRL, 7, "SSH_0"}; GPIO[_SSH_1]= (GPIO_type) {&PORTD, &PIND, &DDRD, 0, "SSH_1"}; GPIO[_SSH_2]= (GPIO_type) {&PORTD, &PIND, &DDRD, 1, "SSH_2"}; GPIO[_GPIO1]= (GPIO_type) {&PORTG, &PING, &DDRG, 0, "GPIO1"}; // альтернативные 36-48 GPIO[_GPIO11A]= (GPIO_type) {&PORTE, &PINE, &DDRE, 2, "GPIO11A"}; GPIO[_GPIO9A]= (GPIO_type) {&PORTE, &PINE, &DDRE, 7, "GPIO9A"}; GPIO[_GPIO7A]= (GPIO_type) {&PORTB, &PINB, &DDRB, 6, "GPIO7A"}; GPIO[_GPIO5A]= (GPIO_type) {&PORTG, &PING, &DDRG, 5, "GPIO5A"}; GPIO[_GPIO3A]= (GPIO_type) {&PORTH, &PINH, &DDRH, 7, "GPIO3A"}; GPIO[_GPIO10A]= (GPIO_type) {&PORTE, &PINE, &DDRE, 6, "GPIO10A"}; GPIO[_GPIO8A]= (GPIO_type) {&PORTB, &PINB, &DDRB, 5, "GPIO8A"}; GPIO[_GPIO6A]= (GPIO_type) {&PORTL, &PINL, &DDRL, 4, "GPIO6A"}; GPIO[_GPIO4A]= (GPIO_type) {&PORTB, &PINB, &DDRB, 7, "GPIO4A"}; GPIO[_GPIO2A]= (GPIO_type) {&PORTL, &PINL, &DDRL, 0, "GPIO2A"}; GPIO[_GPIO0A]= (GPIO_type) {&PORTL, &PINL, &DDRL, 3, "GPIO0A"}; GPIO[_GPIO1A]= (GPIO_type) {&PORTL, &PINL, &DDRL, 1, "GPIO1A"}; GPIO[_API0A]= (GPIO_type) {&PORTE, &PINE, &DDRE, 5, "API0A"}; // дополнительные 49-55 GPIO[_JTAG_TCK]= (GPIO_type) {&PORTF, &PINF, &DDRF, 4, "JTAG_TCK"}; GPIO[_JTAG_TDO]= (GPIO_type) {&PORTF, &PINF, &DDRF, 6, "JTAG_TDO"}; GPIO[_JTAG_TMS]= (GPIO_type) {&PORTF, &PINF, &DDRF, 5, "JTAG_TMS"}; GPIO[_JTAG_TDI]= (GPIO_type) {&PORTF, &PINF, &DDRF, 7, "JTAG_TDI"}; GPIO[_SPI_MISO]= (GPIO_type) {&PORTB, &PINB, &DDRB, 3, "SPI_MISO"}; GPIO[_SPI_SCK]= (GPIO_type) {&PORTB, &PINB, &DDRB, 1, "SPI_SCK"}; GPIO[_SPI_MOSI]= (GPIO_type) {&PORTB, &PINB, &DDRB, 2, "SPI_MOSI"}; // незадействованные 56-73 GPIO[_PH2]= (GPIO_type) {&PORTH, &PINH, &DDRH, 2, "PH2"}; GPIO[_PB0]= (GPIO_type) {&PORTB, &PINB, &DDRB, 0, "PB0"}; GPIO[_PB4]= (GPIO_type) {&PORTB, &PINB, &DDRB, 4, "PB4"}; GPIO[_PG3]= (GPIO_type) {&PORTG, &PING, &DDRG, 3, "PG3"}; GPIO[_PG4]= (GPIO_type) {&PORTG, &PING, &DDRG, 4, "PG4"}; GPIO[_PL2]= (GPIO_type) {&PORTL, &PINL, &DDRL, 2, "PL2"}; GPIO[_PL5]= (GPIO_type) {&PORTL, &PINL, &DDRL, 5, "PL5"}; GPIO[_PD4]= (GPIO_type) {&PORTD, &PIND, &DDRD, 4, "PD4"}; GPIO[_PD5]= (GPIO_type) {&PORTD, &PIND, &DDRD, 5, "PD5"}; GPIO[_PD6]= (GPIO_type) {&PORTD, &PIND, &DDRD, 6, "PD6"}; GPIO[_PJ2]= (GPIO_type) {&PORTJ, &PINJ, &DDRJ, 2, "PJ2"}; GPIO[_PJ3]= (GPIO_type) {&PORTJ, &PINJ, &DDRJ, 3, "PJ3"}; GPIO[_PJ4]= (GPIO_type) {&PORTJ, &PINJ, &DDRJ, 4, "PJ4"}; GPIO[_PJ5]= (GPIO_type) {&PORTJ, &PINJ, &DDRJ, 5, "PJ5"}; GPIO[_PJ6]= (GPIO_type) {&PORTJ, &PINJ, &DDRJ, 6, "PJ6"}; GPIO[_PJ7]= (GPIO_type) {&PORTJ, &PINJ, &DDRJ, 7, "PJ7"}; GPIO[_PF2]= (GPIO_type) {&PORTF, &PINF, &DDRF, 2, "PF2"}; GPIO[_PF3]= (GPIO_type) {&PORTF, &PINF, &DDRF, 3, "PF3"}; // USART0 GPIO[_UART0_RX]= (GPIO_type) {&PORTE, &PINE, &DDRE, 0, "UART0_RX"}; GPIO[_UART0_TX]= (GPIO_type) {&PORTE, &PINE, &DDRE, 1, "UART0_TX"}; // ADC PK0-7 GPIO[_API0]= (GPIO_type) {&PORTK, &PINK, &DDRK, 7, "API0"}; GPIO[_API1]= (GPIO_type) {&PORTK, &PINK, &DDRK, 6, "API1"}; GPIO[_API2]= (GPIO_type) {&PORTK, &PINK, &DDRK, 5, "API2"}; GPIO[_API3]= (GPIO_type) {&PORTK, &PINK, &DDRK, 4, "API3"}; GPIO[_API4]= (GPIO_type) {&PORTK, &PINK, &DDRK, 3, "API4"}; GPIO[_API5]= (GPIO_type) {&PORTK, &PINK, &DDRK, 2, "API5"}; GPIO[_API6]= (GPIO_type) {&PORTK, &PINK, &DDRK, 1, "API6"}; GPIO[_API7]= (GPIO_type) {&PORTK, &PINK, &DDRK, 0, "API7"}; GPIO[_LTD_SGNL]= (GPIO_type) {&PORTF, &PINF, &DDRF, 1, "TD_SGNL"}; GPIO[_IRTD_SGNL]= (GPIO_type) {&PORTF, &PINF, &DDRF, 0, "IRTD_SGNL"}; } //############################################################################################################################################################# uint8_t GPIO_TEST(GPIO_type *IO, uint16_t DELAY_MS) { // проверка на установление логических уровней uint8_t ERR=0; if (DELAY_MS!=0) { *IO->PORT|=(1<BIT); *IO->DDR|=(1<BIT); _delay_us(1); if ((*IO->PIN&(1<BIT))==0) { Serial.println(); Serial.print("! Error "+IO->NAME+"===0 !"); ERR++; } delay(DELAY_MS); *IO->PORT&=~(1<BIT); _delay_us(1); if ((*IO->PIN&(1<BIT))!=0) { Serial.println(); Serial.print("! Error "+IO->NAME+"===1 !"); ERR++; } } else *IO->PORT&=~(1<BIT); *IO->DDR&=~(1<BIT); TOTAL_ERROR+=ERR; return ERR; } //############################################################################################################################################################# uint8_t GPIO_TEST_SHORT(GPIO_type *IO1, GPIO_type *IO2) { // проверка на отсутствие замыкание uint8_t ERR=0; // соседний в 1 *IO2->PORT|= (1<BIT); *IO2->DDR|= (1<BIT); // тестируемый в 0, потом на вход Z *IO1->PORT&=~(1<BIT); *IO1->DDR|= (1<BIT); _delay_us(1); *IO1->DDR&=~(1<BIT); // проверка if ((*IO1->PIN&(1<BIT))!=0) { Serial.println(); Serial.print("! Error "+IO1->NAME+"==="+IO2->NAME+" !"); ERR++; } // все z *IO1->PORT&=~(1<BIT); *IO1->DDR&= ~(1<BIT); *IO2->PORT&=~(1<BIT); *IO2->DDR&= ~(1<BIT); _delay_us(5); TOTAL_ERROR+=ERR; return ERR; } //############################################################################################################################################################# uint8_t GPIO_TEST_CONNECT(GPIO_type *IO1, GPIO_type *IO2) { // проверка на замыкание для V.7 и V.8 uint8_t ERR=0; // основной в 1 *IO2->PORT|= (1<BIT); *IO2->DDR|= (1<BIT); _delay_us(1); // тестируемый на вход Z *IO1->PORT&=~(1<BIT); *IO1->DDR&= ~(1<BIT); // проверка if ((*IO1->PIN&(1<BIT))!=0) { *IO2->PORT&=~(1<BIT); *IO2->DDR|= (1<BIT); _delay_us(1); // основной в 0 if ((*IO1->PIN&(1<BIT))!=0) ERR++; } else ERR++; if (ERR!=0) { Serial.println(); Serial.print("! Error, "+IO1->NAME+" not connected to "+IO2->NAME+" !"); } // все z *IO1->PORT&=~(1<BIT); *IO1->DDR&= ~(1<BIT); *IO2->PORT&=~(1<BIT); *IO2->DDR&= ~(1<BIT); _delay_us(5); TOTAL_ERROR+=ERR; return ERR; } //############################################################################################################################################################# uint8_t ADC_CHECK(uint8_t CHANNEL, String NAME, uint16_t MED, uint16_t DELTA) { // чтение данных с АЦП uint8_t ERR=0; uint16_t DATA; uint16_t MIN=MED-DELTA; uint16_t MAX=MED+DELTA; // normal mode pinMode(CHANNEL, INPUT); delay(1); DATA=analogRead(CHANNEL)<<2; if (DATAMAX) { Serial.println(); Serial.print("! Error "+NAME+"="+String(DATA)+" mV, > "+String(MAX)+" mV !"); ERR++; } // Serial.println(NAME+String(DATA)); // pull up pinMode(CHANNEL, OUTPUT); digitalWrite(CHANNEL, HIGH); delay(1); DATA=analogRead(CHANNEL)<<2; if (DATAadc_level_log_0) { Serial.println(); Serial.print("! Error "+NAME+"="+String(DATA)+" mV, > "+String(adc_level_log_0)+" mV !"); ERR++; } // hi-z pinMode(CHANNEL, INPUT); TOTAL_ERROR+=ERR; return ERR; } //############################################################################################################################################################# void setup() { // начальная инициализация Serial.setTimeout(50); Serial.begin(115200); Serial.println("*** idiBus_Chip_"+String(chip)+"_rev_0."+String(rev)+", ready ***"); GPIO_INIT(); for (uint8_t I=0; ICOMMAND_SIZE) { Serial.println("> Error, to long command !"); CMD=""; } if (CMD.length()!=0) { CMD.toCharArray(COMMAND,COMMAND_SIZE, 0); CMD.remove(0, 1); switch (COMMAND[0]) { case '1' : { Serial.print("> Test 1 - base IO leds : "); uint16_t ERRORS=0; for (uint8_t I=0; I<=35; I++) ERRORS+=GPIO_TEST(&GPIO[I], TIME_DALAY); if (ERRORS==0) Serial.println("OK"); else { Serial.println(); Serial.println(String(ERRORS)+" ERROR !"); } break; } case '2' : { Serial.print("> Test 2 - additional IO : "); uint16_t ERRORS=0; for (uint8_t I=36; I<=48; I++) ERRORS+=GPIO_TEST(&GPIO[I], TIME_DALAY); if (ERRORS==0) Serial.println("OK"); else { Serial.println(); Serial.println(String(ERRORS)+" ERROR !"); } break; } case '3' : { Serial.print("> Test 3 - programming IO : "); uint16_t ERRORS=0; for (uint8_t I=49; I<=55; I++) ERRORS+=GPIO_TEST(&GPIO[I], 1); if (ERRORS==0) Serial.println("OK"); else { Serial.println(); Serial.println(String(ERRORS)+" ERROR !"); } break; } case '4' : { Serial.print("> Test 4 - unused IO : "); uint16_t ERRORS=0; for (uint8_t I=56; I<=73; I++) ERRORS+=GPIO_TEST(&GPIO[I], 1); if (ERRORS==0) Serial.println("OK"); else { Serial.println(); Serial.println(String(ERRORS)+" ERROR !"); } break; } case '5' : { Serial.print("> Test 5 - ADC : "); uint16_t ERRORS=0; ERRORS+=ADC_CHECK(A8, "API7", adc_level_med_h, adc_level_delta); ERRORS+=ADC_CHECK(A9, "API6", adc_level_med_l, adc_level_delta); ERRORS+=ADC_CHECK(A10, "API5", adc_level_med_h, adc_level_delta); ERRORS+=ADC_CHECK(A11, "API4", adc_level_med_l, adc_level_delta); ERRORS+=ADC_CHECK(A12, "API3", adc_level_med_h, adc_level_delta); ERRORS+=ADC_CHECK(A13, "API2", adc_level_med_l, adc_level_delta); ERRORS+=ADC_CHECK(A14, "API1", adc_level_med_h, adc_level_delta); ERRORS+=ADC_CHECK(A15, "API0", adc_level_med_l, adc_level_delta); ERRORS+=ADC_CHECK(A0, "IRTD_SGNL", adc_level_med_h, adc_level_delta); ERRORS+=ADC_CHECK(A1, "LTD_SGNL", adc_level_med_l, adc_level_delta); if (ERRORS==0) Serial.println("OK"); else { Serial.println(); Serial.println(String(ERRORS)+" ERROR !"); } break; } case '6' : { Serial.print("> Test 6 - shorted IO : "); uint16_t ERRORS=0; // pins 1-26 ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO5], &GPIO[_UART0_RX]); //ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART0_RX], &GPIO[_UART0_TX]); //ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART0_TX], &GPIO[_GPIO11]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO11], &GPIO[_SG_CNTRL]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SG_CNTRL], &GPIO[_IRTD_CNTRL]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_IRTD_CNTRL], &GPIO[_API0A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API0A], &GPIO[_GPIO10A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO10A], &GPIO[_GPIO9A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO9A], &GPIO[_GPIO10A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART2_RX], &GPIO[_UART2_TX]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART2_TX], &GPIO[_UART2_RX]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART2_RTEN], &GPIO[_SSL_0]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SSL_0], &GPIO[_SSL_1]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SSL_1], &GPIO[_SSL_2]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SSL_2], &GPIO[_PB0]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PB0], &GPIO[_SPI_SCK]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SPI_SCK], &GPIO[_SPI_MOSI]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SPI_MOSI], &GPIO[_SPI_MISO]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SPI_MISO], &GPIO[_PB4]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PB4], &GPIO[_GPIO8A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO8A], &GPIO[_GPIO7A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO7A], &GPIO[_GPIO4]); // pins 26-51 ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO4], &GPIO[_GPIO3]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO3], &GPIO[_PG3]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PG3], &GPIO[_PG4]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO2A], &GPIO[_GPIO1A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO1A], &GPIO[_PL2]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PL2], &GPIO[_GPIO0A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO0A], &GPIO[_GPIO6A]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO6A], &GPIO[_PL5]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PL5], &GPIO[_UART1_RTEN]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART1_RTEN], &GPIO[_SSH_0]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SSH_0], &GPIO[_SSH_1]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SSH_1], &GPIO[_SSH_2]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_SSH_2], &GPIO[_UART1_RX]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART1_RX], &GPIO[_UART1_TX]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART1_TX], &GPIO[_PD4]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PD4], &GPIO[_PD5]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PD5], &GPIO[_PD6]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PD6], &GPIO[_GPIO0]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO0], &GPIO[_GPIO1]); // pins 51-76 ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO1], &GPIO[_GPIO2]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO2], &GPIO[_GPIO3]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO3], &GPIO[_GPIO4]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO4], &GPIO[_GPIO5]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO5], &GPIO[_GPIO6]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO6], &GPIO[_GPIO7]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO7], &GPIO[_GPIO8]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO8], &GPIO[_GPIO9]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO9], &GPIO[_GPIO10]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART3_RX], &GPIO[_UART3_TX]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_UART3_TX], &GPIO[_PJ2]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PJ2], &GPIO[_PJ3]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PJ3], &GPIO[_PJ4]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PJ4], &GPIO[_PJ5]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PJ5], &GPIO[_PJ6]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PJ6], &GPIO[_GPIO11]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO11], &GPIO[_GPIO12]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO12], &GPIO[_GPIO13]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO13], &GPIO[_GPIO14]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO14], &GPIO[_GPIO15]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO15], &GPIO[_GPIO16]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO16], &GPIO[_GPIO17]); // pins 76-97 ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO17], &GPIO[_GPIO18]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO18], &GPIO[_GPIO19]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_GPIO19], &GPIO[_PJ7]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API0], &GPIO[_API1]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API1], &GPIO[_API2]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API2], &GPIO[_API3]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API3], &GPIO[_API4]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API4], &GPIO[_API5]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API5], &GPIO[_API6]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API6], &GPIO[_API7]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_API7], &GPIO[_JTAG_TDI]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_JTAG_TDI], &GPIO[_JTAG_TDO]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_JTAG_TDO], &GPIO[_JTAG_TMS]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_JTAG_TMS], &GPIO[_JTAG_TCK]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_JTAG_TCK], &GPIO[_PF3]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PF3], &GPIO[_PF2]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_PF2], &GPIO[_LTD_SGNL]); ERRORS+=GPIO_TEST_SHORT(&GPIO[_LTD_SGNL], &GPIO[_IRTD_SGNL]); if (ERRORS==0) Serial.println("OK"); else { Serial.println(); Serial.println(String(ERRORS)+" ERROR !"); } break; } case '7' : { Serial.print("> Test 7 - connected additional IO : "); uint16_t ERRORS=0; // pins 1-26 if (rev==8) ERRORS+=GPIO_TEST_CONNECT(&GPIO[_API0A], &GPIO[_API0]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO0A], &GPIO[_GPIO0]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO1A], &GPIO[_GPIO1]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO2A], &GPIO[_GPIO2]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO3A], &GPIO[_GPIO3]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO4A], &GPIO[_GPIO4]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO5A], &GPIO[_GPIO5]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO6A], &GPIO[_GPIO6]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO7A], &GPIO[_GPIO7]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO8A], &GPIO[_GPIO8]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO9A], &GPIO[_GPIO9]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO10A], &GPIO[_GPIO10]); ERRORS+=GPIO_TEST_CONNECT(&GPIO[_GPIO11A], &GPIO[_GPIO11]); if (ERRORS==0) Serial.println("OK"); else { Serial.println(); Serial.println(String(ERRORS)+" ERROR !"); } break; } case 'f' : { TIME_DALAY=time_delay_fast; Serial.println("> Set fast speed "+String(TIME_DALAY)+" ms"); break; } case 'd' : { TIME_DALAY=time_delay_def; Serial.println("> Set default speed "+String(TIME_DALAY)+" ms"); break; } case 's' : { TIME_DALAY=time_delay_slow; Serial.println("> Set slow speed "+String(TIME_DALAY)+" ms"); break; } case 'A' : { Serial.println("> Run all tests"); switch (rev) { case 5 : { CMD="13456"+CMD; break; } case 7 : { CMD="1234567"+CMD; break; } case 8 : { CMD="1234567"+CMD; break; } default : { CMD="1234567"+CMD; break; } } break; } case 'R' : { Serial.println("> Repeat tests"); CMD=CMD+"R"+CMD; break; } case 'P' : { Serial.println("> Pause 1000 ms"); _delay_ms(1000); break; } case 'B' : { Serial.println("> Break all tests"); CMD=""; break; } case 'E' : { if (TOTAL_ERROR==0) Serial.println("> OK, no ERROR"); else Serial.println("> Total ERROR="+String(TOTAL_ERROR)+" !"); TOTAL_ERROR=0; break; } case 'H' : { Serial.println("*****************************************************************"); Serial.println("Help:"); Serial.println("1 - base IO leds"); Serial.println("2 - additional IO"); Serial.println("3 - programming IO"); Serial.println("4 - unused IO"); Serial.println("5 - ADC"); Serial.println("6 - shorted IO"); Serial.println("7 - connected additional IO"); Serial.println("f - Set fast speed"); Serial.println("d - Set default speed"); Serial.println("s - Set slow speed"); Serial.println("A - Run all tests"); Serial.println("R - Repeat tests"); Serial.println("P - Pause 1000 ms"); Serial.println("B - Break all tests"); Serial.println("E - print TOTAL_ERROR"); Serial.println("H - help"); Serial.println("*****************************************************************"); break; } default : { Serial.println("> Error, use command : 1, 2, 3, 4, 5, 6, 7, f, s, d, A, R, P, B, E, H - help"); break; } } } } //#############################################################################################################################################################