From 63371f37f87b8d0e08d19ad12367a3fa10f83a6f Mon Sep 17 00:00:00 2001 From: Katya Date: Mon, 4 Mar 2024 17:20:01 +0300 Subject: [PATCH] Adding examples sketches for idiBus --- .../idiBus_tests/idiBus_Common_Test.ino | 583 ++++++++++++++++++ 1 file changed, 583 insertions(+) create mode 100644 libraries/idiBusMaster/examples/idiBus_tests/idiBus_Common_Test.ino diff --git a/libraries/idiBusMaster/examples/idiBus_tests/idiBus_Common_Test.ino b/libraries/idiBusMaster/examples/idiBus_tests/idiBus_Common_Test.ino new file mode 100644 index 0000000..ee7fbe2 --- /dev/null +++ b/libraries/idiBusMaster/examples/idiBus_tests/idiBus_Common_Test.ino @@ -0,0 +1,583 @@ +//############################################################################################################################################################# +// 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; } + } + } +} +//############################################################################################################################################################# \ No newline at end of file