Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: SSP 1986BE9x(1986BE92Y rev3)
СообщениеДобавлено: 2018-май-14 09:23 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Здравствуйте! Наверняка кто то связывал 2 миландра друг с другом по SSP, а точнее по SPI от Motorola. Не могу понять в чем дело. Основа программы это пример, который работает без нареканий. А вот если разделить эту программу на 2 части для мастера и для слейва что то не получается. Дебажил обе программы, мастер все передает, но ничего не получает в ответ от слейв устройства. А вот слейв устройство просто не распознает входное сообщение, просто висит в цикле опроса приемника. Общая земля есть, конфигурацию интерфейсов не меня. Может что лишнее закоментировал? Обе программы в аттече.


Вложения:
TryTo2SPI.rar [3.51 МБ]
Скачиваний: 39
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SSP 1986BE9x(1986BE92Y rev3)
СообщениеДобавлено: 2018-май-14 13:25 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 159
Откуда: ПКК "Миландр"
Встречал такую реализацию, проект не без ошибок, но вроде работал.
https://github.com/StartMilandr/5.1-SPI_VE92_VE1_Echo

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SSP 1986BE9x(1986BE92Y rev3)
СообщениеДобавлено: 2018-май-14 15:44 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 73
Тоже выложу свой пример. По интерфейсу SPI выполняется передача данных между двумя отладочными платами К1986ВЕ92QI. Одна плата выступает в качестве мастера, другая - слейва.
Некоторые подробности см. в файле main.c.
А вообще при отладке цифровых интерфейсов неплохо бы обзавестись вот таким логическим анализатором: Saleae Logic Analyzer. Его китайские клоны стоят копейки. Процесс отладки упрощается радикально.


Вложения:
SPI.zip [415.27 КБ]
Скачиваний: 42
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SSP 1986BE9x(1986BE92Y rev3)
СообщениеДобавлено: 2018-май-21 09:57 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Огромное спасибо за представленные примеры. Но хотелось бы разобраться с библиотечными примерами, да и те программы которые я пытаюсь написать гораздо примитивнее. Например, почему в библиотечном примере, при конфигурации интерфейсов регистр CPSDVSR устанавливается по разному, не смотря на то что тактирование обоих модулей одинаковое? Разве он не определяет скорость обмена данными?
Код:
SSP_BRGInit(MDR_SSP1,SSP_HCLKdiv16);
  SSP_BRGInit(MDR_SSP2,SSP_HCLKdiv16);

  /* SSP1 MASTER configuration ------------------------------------------------*/
  SSP_StructInit (&sSSP);

  sSSP.SSP_SCR  = 0x10;
  sSSP.SSP_CPSDVSR = 2;
  sSSP.SSP_Mode = SSP_ModeMaster;
  sSSP.SSP_WordLength = SSP_WordLength16b;
  sSSP.SSP_SPH = SSP_SPH_1Edge;
  sSSP.SSP_SPO = SSP_SPO_Low;
  sSSP.SSP_FRF = SSP_FRF_SPI_Motorola;
  sSSP.SSP_HardwareFlowControl = SSP_HardwareFlowControl_SSE;
  SSP_Init (MDR_SSP1,&sSSP);

  /* SSP2 SLAVE configuration ------------------------------------------------*/
  sSSP.SSP_SPH = SSP_SPH_1Edge;
  sSSP.SSP_SPO = SSP_SPO_Low;
  sSSP.SSP_CPSDVSR = 12;
  sSSP.SSP_Mode = SSP_ModeSlave;
  SSP_Init (MDR_SSP2,&sSSP);

  /* Enable SSP1 */
  SSP_Cmd(MDR_SSP1, ENABLE);
  /* Enable SSP2 */
  SSP_Cmd(MDR_SSP2, ENABLE);

И еще один вопрос, разве если удалить часть конфигурации SSP1, загрузить полученную программу в плату и подключить ее к МК с другим МК в которой программа из библиотечного примера, передача не будет осуществляться? Например, вторую программу записать так:

Код:
#ifdef __CC_ARM
int main(void)
#else
void main(void)
#endif
{
   RST_CLK_DeInit();
  RST_CLK_CPU_PLLconfig (RST_CLK_CPU_PLLsrcHSIdiv2,0);
  /* Enable peripheral clocks --------------------------------------------------*/
  RST_CLK_PCLKcmd((RST_CLK_PCLK_RST_CLK | RST_CLK_PCLK_SSP1 | RST_CLK_PCLK_SSP2),ENABLE);
  RST_CLK_PCLKcmd((RST_CLK_PCLK_PORTF | RST_CLK_PCLK_PORTD), ENABLE);
   LedPinGfg ();
  /* Init NVIC */
  SCB->AIRCR = 0x05FA0000 | ((uint32_t)0x500);
  SCB->VTOR = 0x08000000;
  /* Disable all interrupt */
  NVIC->ICPR[0] = 0xFFFFFFFF;
  NVIC->ICER[0] = 0xFFFFFFFF;
  /* Disable all DMA request */
  MDR_DMA->CHNL_REQ_MASK_CLR = 0xFFFFFFFF;
  MDR_DMA->CHNL_USEBURST_CLR = 0xFFFFFFFF;
  /* Reset PORTD settings */
  PORT_DeInit(MDR_PORTD);
  /* Reset PORTF settings */
  PORT_DeInit(MDR_PORTF);
  /* Configure SSP2 pins: FSS, CLK, RXD, TXD */
  /* Configure PORTD pins 2, 3, 5, 6 */
  PORT_InitStructure.PORT_Pin   = (PORT_Pin_2 | PORT_Pin_3 | PORT_Pin_5);
  PORT_InitStructure.PORT_OE    = PORT_OE_IN;
  PORT_InitStructure.PORT_FUNC  = PORT_FUNC_ALTER;
  PORT_InitStructure.PORT_MODE  = PORT_MODE_DIGITAL;
  PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
  PORT_Init(MDR_PORTD, &PORT_InitStructure);
  PORT_InitStructure.PORT_OE    = PORT_OE_OUT;
  PORT_InitStructure.PORT_Pin   = (PORT_Pin_6);
  PORT_Init(MDR_PORTD, &PORT_InitStructure);
  /* Configure SSP1 pins: FSS, CLK, RXD, TXD */
   /* Configure PORTF pins 0, 1, 2, 3*/
  PORT_InitStructure.PORT_Pin   = (PORT_Pin_3);
  PORT_InitStructure.PORT_OE    = PORT_OE_IN;
  PORT_Init(MDR_PORTF, &PORT_InitStructure);
  PORT_InitStructure.PORT_Pin   = (PORT_Pin_0 | PORT_Pin_1 | PORT_Pin_2);
  PORT_InitStructure.PORT_OE    = PORT_OE_OUT;
  PORT_Init(MDR_PORTF, &PORT_InitStructure);
  /* Init RAM */
  Init_RAM (DstBuf1, BufferSize);
  Init_RAM (SrcBuf1, BufferSize);
  Init_RAM (DstBuf2, BufferSize);
  Init_RAM (SrcBuf2, BufferSize);
  /* Reset all SSP settings */
  SSP_DeInit(MDR_SSP1);
  SSP_DeInit(MDR_SSP2);
// SSP_BRGInit(MDR_SSP1,SSP_HCLKdiv16);
  SSP_BRGInit(MDR_SSP2,SSP_HCLKdiv16);
  /* SSP1 MASTER configuration ------------------------------------------------*/
  SSP_StructInit (&sSSP);
  sSSP.SSP_SCR  = 0x10;
  sSSP.SSP_CPSDVSR = 2;
  sSSP.SSP_WordLength = SSP_WordLength16b;
  sSSP.SSP_FRF = SSP_FRF_SPI_Motorola;
  sSSP.SSP_HardwareFlowControl = SSP_HardwareFlowControl_SSE;
  /* SSP2 SLAVE configuration ------------------------------------------------*/
   sSSP.SSP_SPH = SSP_SPH_1Edge;
  sSSP.SSP_SPO = SSP_SPO_Low;
  sSSP.SSP_Mode = SSP_ModeSlave;
  SSP_Init (MDR_SSP2,&sSSP);
  /* Enable SSP2 */
  SSP_Cmd(MDR_SSP2, ENABLE);
  SSP_SendData(MDR_SSP2, 0x19CE);
   /* Wait for SPI2 data reception */
  while (SSP_GetFlagStatus(MDR_SSP2, SSP_FLAG_RNE) == RESET)
    {
    }
  /* Read SPI2 received data */
  DstBuf2[1] = SSP_ReceiveData(MDR_SSP2);
   if (DstBuf2[1]==0xFB73)
   {
      PORT_SetBits(MDR_PORTC, PORT_Pin_1);
   }
   else{
      PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
   }
  while(1)
  {
  }
}


К слову, в примерах, комментарии к конфигурации портов для SSP перепутаны номера SSP1 и SSP2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SSP 1986BE9x(1986BE92Y rev3)
СообщениеДобавлено: 2018-май-21 12:59 
Не в сети

Зарегистрирован: 2018-мар-01 11:21
Сообщения: 14
Еще раз здравствуйте! В итоге получилось! Ошибка была как раз в вышеупомянутых портах. Дело в том, что в документе readme, который находится в папке с примером SSP, напутаны и перепутаны SSP1 и SSP2. В итоге потратил очень много времени на поиск ошибки, а он лежал на поверхности. В самой программе никакой путаницы не было, а вот в сопутствующем документе была. Исправьте, пожалуйста. Это уже не первый пример в котором допущены неточности. Похожая ошибка в комментариях была в одном из примерах UART.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

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


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

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


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

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