Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-сен-26 16:02

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-15 09:32 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Здравствуйте!
Недавно появилась плата 1986ВЕ92У. Сразу после мигания светодиодов решил попробовать интерфейс CAN. Прочитал спецификацию, просмотрел примеры из SPL и написал соответствующий код. Вроде все верно. Конечно, мог и ошибиться, но хоть убей не вижу где. Столкнулся с тем, что запрограммированный контроллер не выдает сигналы на соответствующих портах. Может кто кто подскажет где я мог ошибиться? Моя задача проста, увидеть на приемнике что что-то приходит. Код программы представлен ниже:
Код:
#include "MDR32Fx.h"
#include "MDR32F9Qx_config.h"
#include "MDR32F9Qx_can.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_it.h"
__IO uint32_t rx_buf = 0;
__IO uint32_t tx_buf = 1;
void Can_Init(void){
  MDR_RST_CLK->PER_CLOCK |= (1UL << 21);

  MDR_PORTA->FUNC   |= ((2 << 6*2) | (2 << 7*2));
  MDR_PORTA->ANALOG |= ((1 << 6  ) | (1 << 7  ));
  MDR_PORTA->PD    &=~ ((1 << 6  ) | (1 << 7  ));
  MDR_PORTA->PWR    |= ((3 << 6*2) | (3 << 7*2));

  MDR_RST_CLK->PER_CLOCK |= (1UL << 0);
  MDR_RST_CLK->CAN_CLOCK = (0
  |(0 << 8)
  |(1 << 24)
  |(0 << 25));

  MDR_CAN1->BITTMNG = (1|(1 << 16)|(1 << 19)|(2 << 22)|(3 << 25)|(0 << 27));
  MDR_CAN1->CONTROL = ((1 << 0)|(1 << 3)|(1 << 4));
  /* Enable CAN1 interrupt */
  NVIC_EnableIRQ(CAN1_IRQn);

  /* Enable CAN1 GLB_INT and RX_INT interrupts */
  CAN_ITConfig( MDR_CAN1, CAN_IT_GLBINTEN | CAN_IT_RXINTEN | CAN_IT_TXINTEN, ENABLE);

  /* Enable CAN1 interrupt from receive buffer */
  CAN_RxITConfig( MDR_CAN1 ,(1<<rx_buf), ENABLE);
  /* Enable CAN1 interrupt from transmit buffer */
  CAN_TxITConfig( MDR_CAN1 ,(1<<tx_buf), ENABLE);
  /* receive buffer enable */
  CAN_Receive(MDR_CAN1, rx_buf, DISABLE);
}
static PORT_InitTypeDef PortInit;           
   
void LedPinGfg (void)
{
   PORT_DeInit(MDR_PORTC);
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);
PortInit.PORT_Pin   = PORT_Pin_1;
PortInit.PORT_OE    = PORT_OE_OUT;
PortInit.PORT_FUNC= PORT_FUNC_PORT; 
PortInit.PORT_MODE= PORT_MODE_DIGITAL;
PortInit.PORT_SPEED = PORT_SPEED_SLOW;
PORT_Init(MDR_PORTC, &PortInit);
  }

int main(void)
{
   Can_Init();
   LedPinGfg ();
  CAN_TxMsgTypeDef TxMsg;

  /* transmit */
  TxMsg.IDE     = CAN_ID_STD;
  TxMsg.DLC     = 0x04;
  TxMsg.PRIOR_0 = DISABLE;
  TxMsg.ID      = 0x05;
  TxMsg.Data[1] = 0;
  TxMsg.Data[0] = 0x12345678;
   for(int i=0;i<10000;i++){};
  while(1){
      CAN_Transmit(MDR_CAN1, tx_buf, &TxMsg);
      for(int i=0;i<3000000;i++);
      PORT_SetBits(MDR_PORTC, PORT_Pin_1);
      for(int i=0;i<100000;i++);
      PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
   }
}


Частично код из калькулятора(Расчет скорости передачи при условии ), частично из примера.
Для исключения возможности возникновения ошибок выставил биты ROP и SAP в регистре MDR_CAN1->CONTROL.
Буду крайне признателен за помощь!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-16 08:51 
Не в сети

Зарегистрирован: 2017-июл-14 15:02
Сообщения: 26
Откуда: АО "ПКК Миландр"
Открыть Недавно появилась плата 1986ВЕ92У.
Lumpa писал(а):
Здравствуйте!
Недавно появилась плата 1986ВЕ92У. Сразу после мигания светодиодов решил попробовать интерфейс CAN. Прочитал спецификацию, просмотрел примеры из SPL и написал соответствующий код. Вроде все верно. Конечно, мог и ошибиться, но хоть убей не вижу где. Столкнулся с тем, что запрограммированный контроллер не выдает сигналы на соответствующих портах. Может кто кто подскажет где я мог ошибиться? Моя задача проста, увидеть на приемнике что что-то приходит. Код программы представлен ниже:
Код:
#include "MDR32Fx.h"
#include "MDR32F9Qx_config.h"
#include "MDR32F9Qx_can.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_it.h"
__IO uint32_t rx_buf = 0;
__IO uint32_t tx_buf = 1;
void Can_Init(void){
  MDR_RST_CLK->PER_CLOCK |= (1UL << 21);

  MDR_PORTA->FUNC   |= ((2 << 6*2) | (2 << 7*2));
  MDR_PORTA->ANALOG |= ((1 << 6  ) | (1 << 7  ));
  MDR_PORTA->PD    &=~ ((1 << 6  ) | (1 << 7  ));
  MDR_PORTA->PWR    |= ((3 << 6*2) | (3 << 7*2));

  MDR_RST_CLK->PER_CLOCK |= (1UL << 0);
  MDR_RST_CLK->CAN_CLOCK = (0
  |(0 << 8)
  |(1 << 24)
  |(0 << 25));

  MDR_CAN1->BITTMNG = (1|(1 << 16)|(1 << 19)|(2 << 22)|(3 << 25)|(0 << 27));
  MDR_CAN1->CONTROL = ((1 << 0)|(1 << 3)|(1 << 4));
  /* Enable CAN1 interrupt */
  NVIC_EnableIRQ(CAN1_IRQn);

  /* Enable CAN1 GLB_INT and RX_INT interrupts */
  CAN_ITConfig( MDR_CAN1, CAN_IT_GLBINTEN | CAN_IT_RXINTEN | CAN_IT_TXINTEN, ENABLE);

  /* Enable CAN1 interrupt from receive buffer */
  CAN_RxITConfig( MDR_CAN1 ,(1<<rx_buf), ENABLE);
  /* Enable CAN1 interrupt from transmit buffer */
  CAN_TxITConfig( MDR_CAN1 ,(1<<tx_buf), ENABLE);
  /* receive buffer enable */
  CAN_Receive(MDR_CAN1, rx_buf, DISABLE);
}
static PORT_InitTypeDef PortInit;           
   
void LedPinGfg (void)
{
   PORT_DeInit(MDR_PORTC);
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);
PortInit.PORT_Pin   = PORT_Pin_1;
PortInit.PORT_OE    = PORT_OE_OUT;
PortInit.PORT_FUNC= PORT_FUNC_PORT; 
PortInit.PORT_MODE= PORT_MODE_DIGITAL;
PortInit.PORT_SPEED = PORT_SPEED_SLOW;
PORT_Init(MDR_PORTC, &PortInit);
  }

int main(void)
{
   Can_Init();
   LedPinGfg ();
  CAN_TxMsgTypeDef TxMsg;

  /* transmit */
  TxMsg.IDE     = CAN_ID_STD;
  TxMsg.DLC     = 0x04;
  TxMsg.PRIOR_0 = DISABLE;
  TxMsg.ID      = 0x05;
  TxMsg.Data[1] = 0;
  TxMsg.Data[0] = 0x12345678;
   for(int i=0;i<10000;i++){};
  while(1){
      CAN_Transmit(MDR_CAN1, tx_buf, &TxMsg);
      for(int i=0;i<3000000;i++);
      PORT_SetBits(MDR_PORTC, PORT_Pin_1);
      for(int i=0;i<100000;i++);
      PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
   }
}


Частично код из калькулятора(Расчет скорости передачи при условии ), частично из примера.
Для исключения возможности возникновения ошибок выставил биты ROP и SAP в регистре MDR_CAN1->CONTROL.
Буду крайне признателен за помощь!
Закрыть


Здравствуйте! В строке Вы разрешаете прерывание передачи от буфера 1:
/* Enable CAN1 interrupt from transmit buffer */
CAN_TxITConfig( MDR_CAN1 ,(1<<tx_buf), ENABLE);
Прерывание передачи возникает только от включенного буфера, поэтому, когда происходит отправка сообщения:
CAN_Transmit(MDR_CAN1, tx_buf, &TxMsg);
буфер включается, выполняется отправка одного сообщения, после чего флаг запроса на отправку сообщения сбрасывается (TX_REQ=0, регистр MDR_CAN1->BUF_CON[1]) и возникает прерывание.
Таким образом, пока флаг TX_REQ=0, будет возникать прерывание. В Вашем случае после отправки сообщения программа переходит в обработчик прерывания void CAN1_IRQHandler(), после чего там и остаётся. Вопрос по работе прерывания передачи поднимался в теме: viewtopic.php?f=33&t=3832 .
Также проверьте, установлены ли на отладочной плате перемычки XP15(SLEW RATE) и XP16(CAN LOAD).

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-16 09:15 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Здравствуйте! Спасибо!
Как я понял из спецификации для отправки необязательно использовать прерывание, и в моем случае достаточно просто убрать функцию CAN_TxITConfig( MDR_CAN1 ,(1<<tx_buf), ENABLE);(так как я ей не пользуюсь), верно?
Цитата:
В Вашем случае после отправки сообщения программа переходит в обработчик прерывания void CAN1_IRQHandler(), после чего там и остаётся.

В этом я сомневаюсь, т.к. светодиод не перестает мигать (В программе между передачами то загорается то погасает светодиод).
Цитата:
Также проверьте, установлены ли на отладочной плате перемычки XP15(SLEW RATE) и XP16(CAN LOAD).

Перемычки установлены. Остается единственный вопрос: перемычка XP15(SLEW RATE), если код будет сконфигурирован на скорость передачи отличную от 125 и 500 перемычка не устанавливается? если так, то какой в ней смысл?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-16 10:32 
Не в сети

Зарегистрирован: 2017-июл-14 15:02
Сообщения: 26
Откуда: АО "ПКК Миландр"
Цитата:
Как я понял из спецификации для отправки необязательно использовать прерывание, и в моем случае достаточно просто убрать функцию CAN_TxITConfig( MDR_CAN1 ,(1<<tx_buf), ENABLE);(так как я ей не пользуюсь), верно?

Верно, для отправки необязательно использовать прерывание передачи. В Вашем случае, убрав функцию CAN_TxITConfig( MDR_CAN1 ,(1<<tx_buf), передача будет осуществляться, так как прерывания передачи запрещены.
Цитата:
Цитата:
В Вашем случае после отправки сообщения программа переходит в обработчик прерывания void CAN1_IRQHandler(), после чего там и остаётся.

В этом я сомневаюсь, т.к. светодиод не перестает мигать (В программе между передачами то загорается то погасает светодиод).

В коде Вы не указали, как именно у Вас реализованы обработчики прерывания:
#include "MDR32F9Qx_it.h"
Если функция обработчика прерывания CAN1_IRQHandler() не реализована, либо пустая, то программа самостоятельно не сможет выйти из прерывания.
Цитата:
Перемычки установлены. Остается единственный вопрос: перемычка XP15(SLEW RATE), если код будет сконфигурирован на скорость передачи отличную от 125 и 500 перемычка не устанавливается? если так, то какой в ней смысл?

Перемычка XP15(SLEW RATE) позволяет выбрать крутизну фронтов передаваемых импульсов интерфейсной микросхемы путем изменения нагрузки на линии RS. На отладочной плате в качестве приемопередатчика интерфейса CAN используется микросхема ATA6660 компании Atmel. Если не устанавливать перемычку XP15, микросхема ATA6660 перейдёт в режим Standby Mode. Подробнее можете прочитать в спецификации на микросхему.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-16 10:54 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Удалил функцию CAN_TxITConfig, установил перемычки, но ничего не вышло.
Цитата:
Если функция обработчика прерывания CAN1_IRQHandler() не реализована, либо пустая, то программа самостоятельно не сможет выйти из прерывания.

Подпрограмма прерывания была пустая и не смотря на это микроконтроллер не зависал в нем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-16 11:23 
Не в сети

Зарегистрирован: 2017-июл-14 15:02
Сообщения: 26
Откуда: АО "ПКК Миландр"
Как Вы проверяете сигнал на линии CAN? Если осциллографом, то возможно из-за больших промежутков времени между передачами пакетов, Вам не удаётся отловить сигнал. Попробуйте уменьшить время между передачами пакетов:
while(1){
CAN_Transmit(MDR_CAN1, tx_buf, &TxMsg);
for(int i=0;i<5000;i++);
CAN_Transmit(MDR_CAN1, tx_buf, &TxMsg);
for(int i=0;i<5000;i++);
}

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-16 13:05 
Не в сети

Зарегистрирован: 2017-июл-14 15:02
Сообщения: 26
Откуда: АО "ПКК Миландр"
Также в Вашем случае возможно проявление ошибки 0017 errata, т.к. при конфигурировании скорости работы в регистре BITMING значение фазового сегмента 2 (SEG2) установлено меньше значения максимального шага подстройки SJW для восстановления синхронизации, в следствие чего возможна остановка передатчика CAN. Попробуйте использовать следующие настройки:
MDR_CAN1->BITTMNG = (1|(1 << 16)|(3 << 19)|(2 << 22)|(1 << 25)|(0 << 27));

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-мар-28 18:04 
Не в сети

Зарегистрирован: 2013-фев-20 16:57
Сообщения: 22
Lumpa писал(а):
Перемычки установлены. Остается единственный вопрос: перемычка XP15(SLEW RATE), если код будет сконфигурирован на скорость передачи отличную от 125 и 500 перемычка не устанавливается? если так, то какой в ней смысл?


Если нужна максимальная скорость 1Мбит/с , то надо соединить центральный контакт XP15 с землей, если нужна другая скорость отличная от максимальной или 125, 500, то подключить резистор соответствующего номинала по таблице из описания на CAN трансивер. Впрочем, на коротких линиях это не важно, можно настраивать CAN трансивер и на большую скорость. Лог.1 или не подключение входа RS микросхемы CAN трансивера переводит микросхему в состояние ожидания с пониженным энергопотреблением.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-апр-06 10:42 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Здравствуйте! Возможно, данная информация будет кому-нибудь полезной.
Появился осциллограф и все встало на свои места. Оказывается, несмотря на короткое расстояние, независимо от положения перемычки, передние фронты у выходного сигнала ужасно завалены. Проблема не решается даже с подтяжкой напрямую к земле. Возможно, проблема с установленным CAN преобразователем именно на используемой мной платой, но факт остается фактом, на скорости 500Кбит/с передача невозможна. При конфигурации скорости 10Кбит/с фронты также завалены, но относительно длительности импульса это становится не столь существенно. Использовал внешний преобразователь MCP2551, с ним таких проблем не наблюдал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-апр-06 12:19 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 73
Lumpa
Активно использовал интерфейс CAN в ряде проектов на МК 1986ВЕ91Т, 1986ВЕ92У и К1986ВЕ92Qi на скоростях 250 и 500 кбит/с. Расстояние достигало 25 м. Использовал в том числе и отладочные платы. Никаких проблем не было.
Также в учебных целях использую CAN-сеть из 11 абонентов, проложенную с помощью обычной компьютерной витой пары. Всё прекрасно работает с отладочными платами К1986ВЕ92Qi.
Думаю, что проблема где-то в программе. В первую очередь проверьте, как тактируется МК. Совершенно необходимо, чтобы тактирование было от HSE (на внешнем кварце). На HSI работать не будет.

Также прикладываю свой пример для отладочной платы К1986ВЕ92Qi, в котором показано, как работать с CAN-сетью автомобиля (читаем обороты коленвала и скорость автомобиля и отображаем их на ЖКИ). В примере предусмотрена возможность имитации автомобиля: контроллер сам же и отвечает на свои запросы. Некоторые подробности описаны в файлах main.c и can.h.


Вложения:
CAN avto.rar [414.01 КБ]
Скачиваний: 61
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-май-24 15:52 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Здравствуйте! Подскажите, нужно ли обновлять буфер приемника CAN? ниже представлена подпрограмма прерывания по приему пакета сообщений по интерфейсу CAN.
Код:
void CAN1_IRQHandler(void)//Подпрограмма прерывания по приему пакета CAN
{
   CAN_RxMsgTypeDef RxMessage;
   RxMessage.Data[0]=0;
   RxMessage.Rx_Header.DLC=0;
   CAN_GetRawReceivedData(MDR_CAN1, 1, &RxMessage);
      if (RxMessage.Rx_Header.DLC==1)
      {
         PORT_SetBits(MDR_PORTC, PORT_Pin_0);
         if(  RxMessage.Data[0]==0x55)
            {
               PORT_SetBits(MDR_PORTC, PORT_Pin_1);
               
            }
         if( RxMessage.Data[0]==0x10)
            {
                                        PORT_SetBits(MDR_PORTC, PORT_Pin_2);
            }
         if( RxMessage.Data[0]==0xAA)
            {
               PORT_ResetBits(MDR_PORTC, PORT_Pin_0);
            }
      }
      if (RxMessage.Rx_Header.DLC==2)
      {
         
         PORT_ResetBits(MDR_PORTC, PORT_Pin_0);
         PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
         PORT_ResetBits(MDR_PORTC, PORT_Pin_2);
      }
   CAN_ITClearRxTxPendingBit(MDR_CAN1, 1, CAN_STATUS_RX_READY);
      
}

Вопрос в следующем: Если сначалал присылавть пакеты зажигая светодиоды, все работает. Если после этого присылать сообщения большей длинны то светодиоды гаснут, это тоже работает. НО! Если после этого попробовать снова зажечь светодиоды, ничего не получается, только PORT_Pin_0 загорается, т.е. первое условие выполняется, а вот последующие нет. Может быть такое что в регистре RxMessage.Data[0] накапливается мусор, или что то инвертируется? Вроде перед записью обнуляю его, но все же... Буду признателен за помощь!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-авг-20 08:59 
Не в сети

Зарегистрирован: 2018-мар-20 09:55
Сообщения: 13
Здравствуйте! Хочу задать вопрос на тему передачи пакетов по интерфейсу CAN, думаю данная тема будет наиболее оптимальна.

Проблема заключается в следующем, при передаче одного байта данных происходит многократная отправка некоторых байт, таких как 0x0f,0x41,0xbc и т.д. Т.е. приемник(USB bus CAN марафоновский) отображает на мониторе пк некоторые сообщения однократно, а некоторые многократно. Программа элементарная, в цикле поочередно происходит отправка пакета, после чего выставляется задержка. Пробовал передачу 2ух байт данных в одном пакете, результат аналогичный, т.е. некоторые пакеты передаются корректно, а некоторые повторяются многократно, и программное отключение не помогает. Закономерности, среди многократно отправляемых байт, не наблюдается. Грешил на то, что иногда приемник не подтверждает получение пакета, в следствии чего при инициализации интерфейса CAN выставил биты для подтверждения собственных принятых пакетов (3,4 биты). Скорость передачи 10КБит/с. Может у кого-то было что то похожее? Надеюсь на Вашу помощь!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-авг-20 09:18 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
Посмотрите эту ветку форума, возможно поможет в отладке.
viewtopic.php?f=33&t=168&p=4836&hilit=%D1%82%D0%B5%D0%BD%D0%B5%D0%B2%D0%BE%D0%B9#p4836

Файл еррата на сайте - https://ic.milandr.ru/products/mikrokon ... /#docs_tab

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-авг-23 11:20 
Не в сети

Зарегистрирован: 2018-мар-20 09:55
Сообщения: 13
Спасибо, за ответ! Пробовал с отключением буфера, с отключением самого интерфейса, результата не получил. Пробовал на 2ух контроллерах, результат аналогичный. По итогу, так и не разобрался с причиной проблемы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CAN 1986ВЕ92У
СообщениеДобавлено: 2018-авг-23 12:43 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
Во вложении пример, в котором два микроконтроллера обмениваются байтом по шине CAN. Лишних байт не приходит.


Вложения:
Комментарий к файлу: Пример обмена байтом по CAN
Пример CAN (угадайка).zip [2.58 МБ]
Скачиваний: 14

_________________
Отдел технической поддержки support@milandr.ru
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB