Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 21.03.2015, 19:51   #51
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/18
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Venom Посмотреть сообщение
Посмотри фронты. Не исключаю, что проблема в железе, например, непропай ноги у слейва. Или у него проблемы с питанием.
Перепаял пины на Стартер Кит эксп. боарде, проблема осталась
geotox вне форума   Ответить с цитированием
Старый 21.03.2015, 21:34   #52
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от geotox Посмотреть сообщение
Перепаял пины на Стартер Кит эксп. боарде, проблема осталась
Код слейва какой? Между собой как подключены МК? В фрейм-режиме (или как он точно зовется) ?
AleksBak вне форума   Ответить с цитированием
Старый 21.03.2015, 22:16   #53
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/18
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Код слейва какой? Между собой как подключены МК? В фрейм-режиме (или как он точно зовется) ?
Код писал выше, работаю не в фрейм-режиме. Соединены SDO->SDI SDI->SDO SCK->SCK конекторами.
geotox вне форума   Ответить с цитированием
Старый 21.03.2015, 22:22   #54
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

Попробуй такое:
мастер пусть каждые 50 мс гонит на слейв серию байт (например, числа 10, 11, 12, 13 + CRC ).
А слейв пусть тем временем в основном цикле читает бит приема буфера и укладывает данные в массив и как совпадет CRC - зажигает светодиод. Или смотри данные по дебаггеру.
Цель - выяснить, принимает ли данные вообще или у тебя проблема с прерыванием.
Venom вне форума   Ответить с цитированием
Старый 21.03.2015, 22:29   #55
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/18
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Venom Посмотреть сообщение
Попробуй такое:
мастер пусть каждые 50 мс гонит на слейв серию байт (например, числа 10, 11, 12, 13 + CRC ).
А слейв пусть тем временем в основном цикле читает бит приема буфера и укладывает данные в массив и как совпадет CRC - зажигает светодиод. Или смотри данные по дебаггеру.
Цель - выяснить, принимает ли данные вообще или у тебя проблема с прерыванием.
Принимал байты как в while цикле функции main, так и в прерывании - результат одинаковый. Приблизительно каждый 10 раз получает верный байт. Может у кого есть готовый код для спи?
geotox вне форума   Ответить с цитированием
Старый 21.03.2015, 23:44   #56
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от geotox Посмотреть сообщение
Принимал байты как в while цикле функции main, так и в прерывании - результат одинаковый. Приблизительно каждый 10 раз получает верный байт. Может у кого есть готовый код для спи?
Как можно в цикле while отслеживать прием данных для слейва?? Я правда не делал spi slave для МК - не было нужды, но тут без прерываний не обойтись! (не показан код прерываний). Еще надо бы посмотреть на эррату, а то мало ли. Всегда надо туда смотреть. Вот я например особо не смотрел (по диагонали просмотрел пару раз) и крупно нарвался.
Цитата:
Сообщение от geotox Посмотреть сообщение
...Может у кого есть готовый код для спи?
Микрочиповские для мастера, но может что-то там есть и для слейва.
AleksBak вне форума   Ответить с цитированием
Старый 22.03.2015, 00:16   #57
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/18
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Как можно в цикле while отслеживать прием данных для слейва?? Я правда не делал spi slave для МК - не было нужды, но тут без прерываний не обойтись! (не показан код прерываний). Еще надо бы посмотреть на эррату, а то мало ли. Всегда надо туда смотреть. Вот я например особо не смотрел (по диагонали просмотрел пару раз) и крупно нарвался.

Микрочиповские для мастера, но может что-то там есть и для слейва.
Прерывание:
Код:
void __attribute__((interrupt(IPL5AUTO), vector(_SPI1_RX_VECTOR))) SPI1Handler(void)
{
    char read;
    read = SPI1BUF;
    if (read == 0x25)
        Nop();

    LED1 = ~LED1;
    IFS3bits.SPI1RXIF = 0; //clears receive flag
}
В эрарте по спи сказано, что не развивает макс скорость, только 27МГц.
geotox вне форума   Ответить с цитированием
Старый 22.03.2015, 10:57   #58
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Приоритет, указанный в прерывании не соответствует приоритету из настройки ранее. А как мастер шлет байты? Несколько сразу или по одному только?
AleksBak вне форума   Ответить с цитированием
Старый 22.03.2015, 11:03   #59
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/18
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Приоритет, указанный в прерывании не соответствует приоритету из настройки ранее. А как мастер шлет байты? Несколько сразу или по одному только?
По одному, в цикле с дилеем на 10мс.
geotox вне форума   Ответить с цитированием
Старый 22.03.2015, 22:54   #60
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

Кстати, мультивекторное прерывание включено?
Venom вне форума   Ответить с цитированием
Старый 23.03.2015, 14:36   #61
Vint
Senior Member
 
Аватар для Vint
 
Регистрация: 08.06.2007
Сообщений: 528
Вес репутации: 838/59
Vint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to behold
По умолчанию Re: PIC32MZ

Люди, подскажите пож. рабочий
пример для 32bit режима таймера с обработчиком
прерываний ISR для MZ.
Vint вне форума   Ответить с цитированием
Старый 23.03.2015, 16:57   #62
Vint
Senior Member
 
Аватар для Vint
 
Регистрация: 08.06.2007
Сообщений: 528
Вес репутации: 838/59
Vint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to behold
По умолчанию Re: PIC32MZ

Чуток полегчало.

Пара таймер_4_5 заработала.
Пара 6_7 не хочет.
Vint вне форума   Ответить с цитированием
Старый 24.03.2015, 12:04   #63
Vint
Senior Member
 
Аватар для Vint
 
Регистрация: 08.06.2007
Сообщений: 528
Вес репутации: 838/59
Vint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to behold
По умолчанию Re: PIC32MZ

Бросил все эти хармони-ческие функции
и расписал установки всех битов вручную.
И работает и INT1 и таймера 32бит.

Но странно, один и тотже пргм. текст (в виде функций)
для таймера 4_5 работает, а для 6_7 нет.
Vint вне форума   Ответить с цитированием
Старый 24.03.2015, 12:18   #64
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

Как показывает практика, лучше всего всеми битами рулить вручную.

Гляньте по схеме, есть ли какие-то особенности таймеров 6-7. Может, тактирование включить надо
Venom вне форума   Ответить с цитированием
Старый 30.03.2015, 10:15   #65
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Всем здравствуйте.
Тоже пытаюсь прикрутить UART к DMA результат такой: флаг окончания записи блока выставляется, но есть одно огромное НО. Полученные данные записываются только один раз, далее данные не перезаписываются в массив, не меняются. UART работает как надо, проверял. Может кто, что подскажет.

Мой код:
Инициализация:
Код:
unsigned char buf[100];
    U2BRG  = 87;//115200
    U2STA  = 0;
    U2MODE   = 0x00008008; //Enable Uart for 8-bit data no parity, 1 STOP bit
    U2STASET = 0x00001410;

    DCH0SSA = (unsigned int) &U2RXREG   & 0x1FFFFFFF;  // source start address
    DCH0DSA = (unsigned int) &buf & 0x1FFFFFFF;  // destination start address
    DCH0SSIZ = 1;               // source size
    DCH0DSIZ = 80;              // destination size
    DCH0CSIZ = 1;               // cell size
    DCH0DAT = '*';              //Последовательность остановки

    DCH0ECONbits.CHSIRQ = _UART2_RX_VECTOR;  // Заполнение буфера по прерывании UART
    DCH0ECONbits.SIRQEN = 1; //
    DCH0ECONbits.PATEN   = 1; // Разрешить остановку по детектировании заданной последовательности

    DCH0CONbits.CHPATLEN = 0; //Длина последовательности остановки 1 байт
    DCH0CONbits.CHPRI    = 3; // Приоритет канала
    DCH0CONbits.CHEN     = 1; // Включаем канал DMA
    DCH0CONbits.CHAEN   = 1; // Автозапуск
Код обработки и вывода в RS485:
Код:
        if(DCH0INTbits.CHBCIF)
        {
            DCH0INT = 0;
            LED_RED = 1;
            LED_GRN = 0;
            TX_UART2(&buf);
            while (!U2STAbits.TRMT);
            LED_RED = 0;
            LED_GRN = 1;
        }
dj_miles вне форума   Ответить с цитированием
Старый 30.03.2015, 13:41   #66
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
...UART работает как надо, проверял...
Как проверяли, что "работает как надо"? В смысле отправляет данные как надо? Тогда понятно. Посмотрите на эррату этого вонючего UART-а (самая последняя). Почему они так напакостили с этими UART-ами (не только в MZ, но и чуть ранее) - не пойму. И что-то все молчат. Бывают случаи (например GSM модули) когда очень трудно приспособиться к такому поведению UART-а.
AleksBak вне форума   Ответить с цитированием
Старый 30.03.2015, 13:54   #67
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

С уартом они накосячили, да.
+ при использовании уарта всё равно стабильно у меня каналы I2S меняются местами. Причем случайно так получается. Закономерность найти не могу. Переинициализация не всегда помогает.

Но вообще странно, что УАРТ у уважаемого dj_miles зависает.
Первая мысль - а сколько байт Вы отсылаете в уарт? Может, там либо нет закрывающего символа? и нужен ли CHAEN в при таком режиме работы?
И какого состояние битов ошибок УАРТА?
Venom вне форума   Ответить с цитированием
Старый 30.03.2015, 14:24   #68
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Спасибо, что откликнулись.

По поводу проверки: включаю прерывание по RX UART принимаю строку длинной от 80 до 100 байт, сравниваю все ок. Выключаю прерывание, включаю DMA, и ничего. После первого приема DMA от UART данные в приемном буфере не меняются. Накинул на ногу RX контроллера еще один трансивер в ПК данные идут, все ок, но это просто для контроля данных приходящих.

Байты не отсылаю, а принимаю. Данные приходят раз в секунду, длиной от 80 до 100 байт на скорости 115200.

Для контроля ошибок UART и DMA использую соответствующие прерывания. Ошибок не возникает.

ERRATA читал, у меня самая первая ривизия, но ведь он работал стабильно без траблов, если DMA не юзать.
dj_miles вне форума   Ответить с цитированием
Старый 30.03.2015, 14:26   #69
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Venom Посмотреть сообщение
Но вообще странно, что УАРТ у уважаемого dj_miles зависает.
Да вот и непонятно зависает он или нет.

Цитата:
Сообщение от Venom Посмотреть сообщение
Может, там либо нет закрывающего символа?
Что за символ?
dj_miles вне форума   Ответить с цитированием
Старый 30.03.2015, 14:32   #70
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

Смотри через дебаггер биты переполнения буфера УАРТа и прочие ошибки в том числе и в ДМА.

я об этом символе
Код:
DCH0DAT = '*';              //Последовательность остановки
Venom вне форума   Ответить с цитированием
Старый 30.03.2015, 14:39   #71
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Venom Посмотреть сообщение
Смотри через дебаггер биты переполнения буфера УАРТа и прочие ошибки в том числе и в ДМА.
Смотрю так нет все ок, ошибок не возникает.

Цитата:
Сообщение от Venom Посмотреть сообщение
я об этом символе
Код:
DCH0DAT = '*';              //Последовательность остановки
Символ ловиться правильно, проверял.

Блин так почему он заново не хочет записать новые данные?!!!!

Запускал прерывания по приему всего блока, работает, значит что-то она принимает. А если принимает почему не перезаписывает в буфер?!
dj_miles вне форума   Ответить с цитированием
Старый 30.03.2015, 14:40   #72
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
Спасибо, что откликнулись.

По поводу проверки: включаю прерывание по RX UART принимаю строку длинной от 80 до 100 байт, сравниваю все ок. Выключаю прерывание, включаю DMA, и ничего. После первого приема DMA от UART данные в приемном буфере не меняются. Накинул на ногу RX контроллера еще один трансивер в ПК данные идут, все ок, но это просто для контроля данных приходящих.

Байты не отсылаю, а принимаю. Данные приходят раз в секунду, длиной от 80 до 100 байт на скорости 115200.

Для контроля ошибок UART и DMA использую соответствующие прерывания. Ошибок не возникает.

ERRATA читал, у меня самая первая ривизия, но ведь он работал стабильно без траблов, если DMA не юзать.
Еще раз - этот кривой UART продолжает отсылать данные, в то время как его приемник давно сбрендил от переполнения и ничего больше не воспринимает извне и соотв-но не дает сигнала либо на прерывание(если оно используется), либо DMA если он используется. Почитайте эррату еще раз и поймете что надо делать.
AleksBak вне форума   Ответить с цитированием
Старый 30.03.2015, 14:41   #73
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Еще раз - этот кривой UART продолжает отсылать данные, в то время как его приемник давно сбрендил от переполнения и ничего больше не воспринимает извне. Почитайте эррату еще раз и поймете что надо делать.

Попробую после каждого приема UART выключать и потом заново инициализировать.
dj_miles вне форума   Ответить с цитированием
Старый 30.03.2015, 15:08   #74
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Попробовал после передачи принятых данных в ПК сделать следующее:
Код:
        i=100;
        while(i--) buf[i] = 0; //очистили буфер
        
        U2BRG  = 0;
        U2STA  = 0;
        U2MODE   = 0;
        
        DelayMs(10);
        
        U2BRG  = 87;//(int)(40000000/(4*115201)); 164000 = 61 115200 = 87
        U2STA  = 0;
        U2MODE   = 0x00008008; //Enable Uart for 8-bit data no parity, 1 STOP bit
        U2STASET = 0x00001410;
Результат тот же, только теперь шлет все нули.
dj_miles вне форума   Ответить с цитированием
Старый 30.03.2015, 22:31   #75
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
Попробовал после передачи принятых данных в ПК сделать следующее:
Код:
        i=100;
        while(i--) buf[i] = 0; //очистили буфер
 
        U2BRG  = 0;
        U2STA  = 0;
        U2MODE   = 0;
 
        DelayMs(10);
 
        U2BRG  = 87;//(int)(40000000/(4*115201)); 164000 = 61 115200 = 87
        U2STA  = 0;
        U2MODE   = 0x00008008; //Enable Uart for 8-bit data no parity, 1 STOP bit
        U2STASET = 0x00001410;
Результат тот же, только теперь шлет все нули.
Постарайтесь как-то поточнее описывать проблему. Это очень поможет в первую очередь Вам. Я как понял, что тут происходит:
1. принимаем данные извне (из компа например) в UART контроллера с помощью DMA (DMA принятые данные собирает в буфер);
2. после приема первой партии данных (опять-таки с помощью DMA) дальнейшие данные не принимаются контроллером(хотя отправка продолжает работать и делается вывод, что все работает нормально);
И причем теперь тогда здесь эти слова (ваши не мои):
Цитата:
Попробовал после передачи принятых данных в ПК сделать следующее:
я так и не пойму. Честно. Тут же английским по белому в эррате написано и тут также я вроде указал, что проблема в ПРИЕМНОМ буфере UART. Теряется его синхронизация (проще говоря "башку сносит") от того что данные не вовремя с FIFO забираются. Чуть опоздал - и все! И поможет только выключение/включение модуля несколько раз (ни фига оно не помогает как выясняется - по крайней мере у меня так).
AleksBak вне форума   Ответить с цитированием
Ответ

Метки
dma, interrupt, pic32mz, spi, uart


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
появились датащиты на PIC32MZ EC Алексей Продукция MICROCHIP 154 16.03.2015 10:43


Часовой пояс GMT +3, время: 03:01.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot