Миландр

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

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу 1 2 »
Автор Сообщение
 Заголовок сообщения: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-03 17:42 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
Добрый день! Я впал в ступор. Использую интерфейс SSP1 на выводах PF0 - PF3 в режиме мастера для связи с радио модулем CC1120. Внешний кварц на 8 МГц, HCLK = 8 МГц (пока использую без умножения), скорость SSP 1 МГц (пробовал меньше больше роли не играет), Среда программирования KEIL.
Так вот когда я загружаю программу под отладчиком, то все прекрасно работает. При записи байта информации в порт SSP получаем (рис.1) 8 тактовых сигналов CLK = 1 мкс (1МГц) , получаю корректный ответ.
Вложение:
Комментарий к файлу: рис.1 - Сигнал CLK при работе под отладчиком
[ attachment ]
ssp_with_debug.png [ 18.66 КБ | 1739 просмотров ]
Если программа стартует при подаче питания, то происходит для меня совершенно непонятное, при записи в порт SSP байта возникает (рис.2 (при делителе времени 10 мкс), рис.3 (общий вид при делителе 200 мкс)) 33 тактовых сигнала CLK = 32 мкс (примерно 31,25 кГц) (КАК и ОТКУДА???)
Вложение:
Комментарий к файлу: рис.2 - размер такта CLK без отладчика
[ attachment ]
ssp_no_debug1.png [ 17.01 КБ | 1739 просмотров ]
Вложение:
Комментарий к файлу: рис.3 - общий вид CLK без отладчика
[ attachment ]
ssp_no_debug2.bmp [ 440.68 КБ | 1739 просмотров ]
При этом если менять настройки делителей SSP то под отладчиком, все корректно отрабатывает, без отладчика всегда картина одинаковая, частота CLK всегда 31,25 кГц и на один байт информации 33 импульса.

Кто-нибудь сталкивался с такой проблемой?


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-04 00:11 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 249
Организация: StartMilandr.ru
Пропишите первой же строкой в main()
PER_CLOCK = OxFFFFFFFF
Это именно то, что оставляет после себя отладчик.
Если заработает, то убирайте лишние биты и ищите какое тактирование забыли включить при настройке периферии.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-04 09:47 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
StartMilandr писал(а): *
Пропишите первой же строкой в main()
PER_CLOCK = OxFFFFFFFF
Это именно то, что оставляет после себя отладчик.
Если заработает, то убирайте лишние биты и ищите какое тактирование забыли включить при настройке периферии.
К сожалению не помогло.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-04 12:42 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 249
Организация: StartMilandr.ru
Отладчик делает вот это:
int Init (unsigned long adr, unsigned long clk, unsigned long fnc) 
{
  PER_CLOCK = 0xFFFFFFFF;                 // Enable all 
  ICER0 = 0xFFFFFFFF;                     // Disable all interrupts

  BKP_REG_0F = HSI_ON;
  while (!(BKP_REG_0F & HSI_RDY)) {}      // Wait Ready from HSI
 
  CPU_CLOCK = 0x00000000;                 // CPU_CLOCK from HSI

  return (0);
}

int UnInit (unsigned long fnc) {
   PER_CLOCK = 0xFFFFFFFF;
   FLASH_CMD = 0x0;
  return (0);
}
ну и сам по себе дает некоторую задержку перед стартом вашего кода. Большего влияния на МК отладчик не оказывает.
Стоит проверить как подключен BUcc, иногда бывает с ним проблема, когда наблюдается зависимость от наличия отладчика - viewtopic.php?p=27111#p27111


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-07 11:13 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 306
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
obdt писал(а): *
Добрый день! Я впал в ступор. Использую интерфейс SSP1 на выводах PF0 - PF3 в режиме мастера для связи с радио модулем CC1120. Внешний кварц на 8 МГц, HCLK = 8 МГц (пока использую без умножения), скорость SSP 1 МГц (пробовал меньше больше роли не играет), Среда программирования KEIL.
Так вот когда я загружаю программу под отладчиком, то все прекрасно работает. При записи байта информации в порт SSP получаем (рис.1) 8 тактовых сигналов CLK = 1 мкс (1МГц) , получаю корректный ответ.
ssp_with_debug.png

Если программа стартует при подаче питания, то происходит для меня совершенно непонятное, при записи в порт SSP байта возникает (рис.2 (при делителе времени 10 мкс), рис.3 (общий вид при делителе 200 мкс)) 33 тактовых сигнала CLK = 32 мкс (примерно 31,25 кГц) (КАК и ОТКУДА???)
ssp_no_debug1.pngssp_no_debug2.bmp

При этом если менять настройки делителей SSP то под отладчиком, все корректно отрабатывает, без отладчика всегда картина одинаковая, частота CLK всегда 31,25 кГц и на один байт информации 33 импульса.

Кто-нибудь сталкивался с такой проблемой?
Здравствуйте!

Обратите, пожалуйста, внимание, что чаще всего эта проблема связана с очередностью включения тактирования и инициализации в программе. Детальнее данная ошибка описана в отдельной статье информационного портала отдела технической поддержки компании Миландр . На основании информации из статьи попробуйте, пожалуйста, привести изделие в рабочее состояние. В случае, если сделать это у Вас не получится, прикрепите, пожалуйста, минимальный проект с наличием данной ошибки для анализа. Спасибо.

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


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-10 20:04 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
Добрый день! Пока все по прежнему, все советы посмотрел, попробовал, не помогает. Также есть проблема с запуском PLL, не включается, но пока я решил его просто не использовать.
Пока не совсем понимаю, что я делаю не так или это проблема внешняя?
Вложение:
Комментарий к файлу: Минимальный проект, на котором достигается данный эффект
TestPrj.rar [343.13 КБ]
8 скачиваний


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-10 23:42 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 249
Организация: StartMilandr.ru
Попробуйте вообще закомментировать InitCPU(), пусть всё остается от HSI работать.
А то в InitCPU() настраивается PLL, но сама PLL даже не включается... и не ожидается ее готовность.
Если не поможет, то можно дальше смотреть.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-11 00:47 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
StartMilandr писал(а): *
Попробуйте вообще закомментировать InitCPU(), пусть всё остается от HSI работать.
А то в InitCPU() настраивается PLL, но сама PLL даже не включается... и не ожидается ее готовность.
Если не поможет, то можно дальше смотреть.
Я, честно говоря, не любитель использовать SPL, как то предпочитаю настраивать точно по регистрам, чтобы не ловить лишних ошибок. Но в этом случае не моя прихоть. В initCPU я не настраиваю PLL, все что касается PLL закомментировано. Но функцию RST_CLK_CPU_PLLconfig приходится вызывать, потому настройку CPU_C1_SEL в регистре CPU_CLOCK зачем то запихнули в эту функцию. С вариациями источников тактирования я уже экспериментировал, не помогает.

Дополнение:

Проблема решилась методом бубна. Закомментировал SSP_DeInit(MDR_SSP1) и все стало хорошо!
Вот непонятно, что там так портится, что вместо 8 тактов CLK получается 33 такта и на другой частоте. Хотя под отладчиком ничего не меняется, как будет время выведу состояние регистров SSP1 без отладчика, интересно посмотреть.
	//SSP_DeInit(MDR_SSP1);
	SSP_StructInit(&SPI_InitStructure);
	
	SPI_InitStructure.SSP_Mode = SSP_ModeMaster;
	/* initialize the SSP_WordLength member */
	SPI_InitStructure.SSP_WordLength = SSP_WordLength8b;
  	/* Initialize the SSP_SPO member */
  	SPI_InitStructure.SSP_SPO = SSP_SPO_Low;
  	/* Initialize the SSP_SPH member */
  	SPI_InitStructure.SSP_SPH = SSP_SPH_1Edge;
  	/* Initialize the SSP_FRF member */
  	SPI_InitStructure.SSP_FRF = SSP_FRF_SPI_Motorola;
  	/* Initialize the SSP max speed */
  	SPI_InitStructure.SSP_CPSDVSR = 8;
  	SPI_InitStructure.SSP_SCR = 0;
	
	SSP_Init(MDR_SSP1, &SPI_InitStructure);
	SSP_BRGInit(MDR_SSP1, SSP_HCLKdiv1);
	SSP_Cmd(MDR_SSP1, ENABLE);
Осталась еще одна непонятная проблема, не включается PLL, хотя пробовал брать код инициализации CPU из статьи (по рекомендации описанной ниже), не помогает.
Lampadov писал(а): *
Здравствуйте!

Обратите, пожалуйста, внимание, что чаще всего эта проблема связана с очередностью включения тактирования и инициализации в программе. Детальнее данная ошибка описана в отдельной статье информационного портала отдела технической поддержки компании Миландр . На основании информации из статьи попробуйте, пожалуйста, привести изделие в рабочее состояние. В случае, если сделать это у Вас не получится, прикрепите, пожалуйста, минимальный проект с наличием данной ошибки для анализа. Спасибо.

Лирическое отступление: Вот не соврать лет шесть работал с процессорами 1986ВЕ1Т, вообще проблем никаких особых не возникало, а здесь вроде суть, по большому счету, та же, но какие то вроде бы понятные вещи доставляют неудобства. Веселье началось с первого дня, как только решил поморгать светодиодом, а он выведен на порт B где пины JTAG_A, а нюансы работы с портами совмещенными с JTAG, сразу так в документации я не видел, пришлось выводить из ступора через JTAG_B. Ладно, это все лирика) Всем спасибо за советы.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-11 17:51 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 249
Организация: StartMilandr.ru
SSP_DeInit() вроде никак не должен был помочь...

Мне смутно помнится, что я сталкивался с подобным поведением и дело было именно в каком-то тактировании.
Порылся и нашел у себя в библиотеке упоминание - https://github.com/StartMilandr/MDR_Pac ... /MDR_SSP.h
//  Требуется предварительное формирование частоты SSP_Clock и включение тактирования блока от этой частоты.
void MDR_SSP_Init  (MDR_SSP_Type *SSPx, MDR_SSP_Config *cfg);
Есть предположение, что пока SSP_Clock на блок не подан то и настройка его не проходит правильно. Попробуйте SSP_BRGInit() вызывать перед SSP_DeInit() и SSP_Init().
Думаю регистры работают от частоты PER_CLOCK, а сам блок и его теневые регистры на SSP_Clock. Если SSP_Clock не подан, то запись из обычных регистров в теневые не проходит.
Что-то такое...


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-15 10:59 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
StartMilandr писал(а): *
SSP_DeInit() вроде никак не должен был помочь...

....................................................................................................

Есть предположение, что пока SSP_Clock на блок не подан то и настройка его не проходит правильно. Попробуйте SSP_BRGInit() вызывать перед SSP_DeInit() и SSP_Init().
Думаю регистры работают от частоты PER_CLOCK, а сам блок и его теневые регистры на SSP_Clock. Если SSP_Clock не подан, то запись из обычных регистров в теневые не проходит.
Что-то такое...
Да, все верно, так и есть. Надо сначала подавать SSP_Clock, тогда все правильно работает!


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-16 10:47 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 306
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
obdt писал(а): *
StartMilandr писал(а): *
Попробуйте вообще закомментировать InitCPU(), пусть всё остается от HSI работать.
А то в InitCPU() настраивается PLL, но сама PLL даже не включается... и не ожидается ее готовность.
Если не поможет, то можно дальше смотреть.
Я, честно говоря, не любитель использовать SPL, как то предпочитаю настраивать точно по регистрам, чтобы не ловить лишних ошибок. Но в этом случае не моя прихоть. В initCPU я не настраиваю PLL, все что касается PLL закомментировано. Но функцию RST_CLK_CPU_PLLconfig приходится вызывать, потому настройку CPU_C1_SEL в регистре CPU_CLOCK зачем то запихнули в эту функцию. С вариациями источников тактирования я уже экспериментировал, не помогает.

Дополнение:

Проблема решилась методом бубна. Закомментировал SSP_DeInit(MDR_SSP1) и все стало хорошо!
Вот непонятно, что там так портится, что вместо 8 тактов CLK получается 33 такта и на другой частоте. Хотя под отладчиком ничего не меняется, как будет время выведу состояние регистров SSP1 без отладчика, интересно посмотреть.
	//SSP_DeInit(MDR_SSP1);
	SSP_StructInit(&SPI_InitStructure);
	
	SPI_InitStructure.SSP_Mode = SSP_ModeMaster;
	/* initialize the SSP_WordLength member */
	SPI_InitStructure.SSP_WordLength = SSP_WordLength8b;
  	/* Initialize the SSP_SPO member */
  	SPI_InitStructure.SSP_SPO = SSP_SPO_Low;
  	/* Initialize the SSP_SPH member */
  	SPI_InitStructure.SSP_SPH = SSP_SPH_1Edge;
  	/* Initialize the SSP_FRF member */
  	SPI_InitStructure.SSP_FRF = SSP_FRF_SPI_Motorola;
  	/* Initialize the SSP max speed */
  	SPI_InitStructure.SSP_CPSDVSR = 8;
  	SPI_InitStructure.SSP_SCR = 0;
	
	SSP_Init(MDR_SSP1, &SPI_InitStructure);
	SSP_BRGInit(MDR_SSP1, SSP_HCLKdiv1);
	SSP_Cmd(MDR_SSP1, ENABLE);
Осталась еще одна непонятная проблема, не включается PLL, хотя пробовал брать код инициализации CPU из статьи (по рекомендации описанной ниже), не помогает.
Lampadov писал(а): *
Здравствуйте!

Обратите, пожалуйста, внимание, что чаще всего эта проблема связана с очередностью включения тактирования и инициализации в программе. Детальнее данная ошибка описана в отдельной статье информационного портала отдела технической поддержки компании Миландр . На основании информации из статьи попробуйте, пожалуйста, привести изделие в рабочее состояние. В случае, если сделать это у Вас не получится, прикрепите, пожалуйста, минимальный проект с наличием данной ошибки для анализа. Спасибо.

Лирическое отступление: Вот не соврать лет шесть работал с процессорами 1986ВЕ1Т, вообще проблем никаких особых не возникало, а здесь вроде суть, по большому счету, та же, но какие то вроде бы понятные вещи доставляют неудобства. Веселье началось с первого дня, как только решил поморгать светодиодом, а он выведен на порт B где пины JTAG_A, а нюансы работы с портами совмещенными с JTAG, сразу так в документации я не видел, пришлось выводить из ступора через JTAG_B. Ладно, это все лирика) Всем спасибо за советы.
Здравствуйте!

По основной проблеме: тактирование блока всегда должно задаваться перед настройкой его конфигурации, будьте, пожалуйста, внимательны.

>> Осталась еще одна непонятная проблема, не включается PLL, хотя пробовал брать код инициализации CPU из статьи (по рекомендации описанной ниже), не помогает.

Подскажите, пожалуйста, после включения блока PLL флаг PLL_CPU_RDY в регистре CLOCK_STATUS взводится корректно? К PLL единственное требование: на блок должна приходить частота не менее 6 МГц и не более 16 МГц, что регламентировано предельно допустимыми характеристиками микросхемы. Убедитесь, пожалуйста, что данное требование выполняется, и если флаг PLL_CPU_RDY устанавливается, будьте, пожалуйста, внимательны при настройке узлов CPU_C1, CPU_C2 и CPU_C3, если мы говорим о формировании частоты CPU_CLK - см. рисунок 28 "Структурная блок-схема формирования тактовой частоты" актуальной версии спецификации. Спасибо.

Важно отметить, что код из статьи "Наиболее частые ошибки программирования" для настройки тактирования отрабатывает на микроконтроллере 1986ВЕ1Т правильно.

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


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-17 10:26 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 532
Цитата:
К PLL единственное требование: на блок должна приходить частота не менее 6 МГц и не более 16 МГц
Ну еще должно быть питание аналоговых цепей, поскольку PLL, как я помню, работает именно от аналогового питания. Если разведено (или подключено) питание только цифры (не планировали использовать АЦП,ЦАП компаратор) то не стартанет.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-18 23:01 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
редактор писал(а): *
Цитата:
К PLL единственное требование: на блок должна приходить частота не менее 6 МГц и не более 16 МГц
Ну еще должно быть питание аналоговых цепей, поскольку PLL, как я помню, работает именно от аналогового питания. Если разведено (или подключено) питание только цифры (не планировали использовать АЦП,ЦАП компаратор) то не стартанет.
Надо проверить, питание только по цифре


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-18 23:12 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
Lampadov писал(а): *
Здравствуйте!

По основной проблеме: тактирование блока всегда должно задаваться перед настройкой его конфигурации, будьте, пожалуйста, внимательны.
Спасибо, буду внимателен, но почему то в примере находящемся в Software pack для Keil MDK 5 для МК 1986ВЕ9х,1Т,3Т,4У_v1.5.3.pack\Examples\MDR1986VE9x\MDR32F9Q2_EVAL\SSP\SPI_FullDuplex\ написано так как я и пробовал изначально:
  /* 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);....
и т.д. 
Странновато как то, получается пример не рабочий, или кто-то тоже не внимателен. Спасибо.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с SSP на 1986ВЕ92У
СообщениеДобавлено: 2021-июн-18 23:19 
Не в сети

Зарегистрирован: 2014-дек-16 12:15
Сообщения: 19
Lampadov писал(а): *

Подскажите, пожалуйста, после включения блока PLL флаг PLL_CPU_RDY в регистре CLOCK_STATUS взводится корректно? К PLL единственное требование: на блок должна приходить частота не менее 6 МГц и не более 16 МГц, что регламентировано предельно допустимыми характеристиками микросхемы. Убедитесь, пожалуйста, что данное требование выполняется, и если флаг PLL_CPU_RDY устанавливается, будьте, пожалуйста, внимательны при настройке узлов CPU_C1, CPU_C2 и CPU_C3, если мы говорим о формировании частоты CPU_CLK - см. рисунок 28 "Структурная блок-схема формирования тактовой частоты" актуальной версии спецификации. Спасибо.

Важно отметить, что код из статьи "Наиболее частые ошибки программирования" для настройки тактирования отрабатывает на микроконтроллере 1986ВЕ1Т правильно.
Изначально стоял кварц на 16 МГц, не приходит PLL_CPU_RDY, поставили 8 МГц, ситуация не поменялась, видимо есть у нас ошибка. Но HSE_RDY устанавливается стабильно.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу 1 2 »

Часовой пояс: UTC+03:00


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

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


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

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB