Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3 Все  След.
Автор Сообщение
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 07:22 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
Попробовал собрать чтото из примеров, вот что получилось
Код:
void Init_TIMER(void)
{
   RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER1, ENABLE);
        TIMER_BRGInit(MDR_TIMER1,TIMER_HCLKdiv1);

         TIMER_CntStructInit(&TIM1Init);

 
   TIM1Init.TIMER_IniCounter = 0;
        TIM1Init.TIMER_Prescaler                = 0x0000; // 200 kHz
        TIM1Init.TIMER_Period                   = 0x0028; //
        TIM1Init.TIMER_CounterMode              = TIMER_CntMode_ClkFixedDir;
        TIM1Init.TIMER_CounterDirection         = TIMER_CntDir_Up;
        TIM1Init.TIMER_EventSource              = TIMER_EvSrc_None;
        TIM1Init.TIMER_FilterSampling           = TIMER_FDTS_TIMER_CLK_div_1;
        TIM1Init.TIMER_ARR_UpdateMode           = TIMER_ARR_Update_Immediately;
        TIM1Init.TIMER_ETR_FilterConf           = TIMER_Filter_1FF_at_TIMER_CLK;
        TIM1Init.TIMER_ETR_Prescaler            = TIMER_ETR_Prescaler_None;
        TIM1Init.TIMER_ETR_Polarity             = TIMER_ETRPolarity_NonInverted;
        TIM1Init.TIMER_BRK_Polarity             = TIMER_BRKPolarity_NonInverted;

        TIMER_CntInit(MDR_TIMER1, &TIM1Init);
   
        NVIC_EnableIRQ(Timer1_IRQn);
 
   NVIC_SetPriority(Timer1_IRQn, 0);
   
        TIMER_ITConfig(MDR_TIMER1, TIMER_STATUS_CNT_ARR, ENABLE);


         TIMER_Cmd(MDR_TIMER1, ENABLE);
   
}
void Timer1_IRQHandler(void)
{

flag = 0x01;

  TIMER_ClearFlag(MDR_TIMER1, TIMER_STATUS_CNT_ARR_EVENT);
   MDR_TIMER1->CNT = 0x0;
 
}



В итоге прерывания работают, таймер тоже.
Но нет той частоты которую устанавливаю
Вместо ожидаемых 200 кГц - 10 кГц
Основной цикл не должен столько жрать по времени
Код:
while (1)
      {
         if(flag == 0x01)
         {flag &= ~0x01;
            if(state == 0x01)
            {
               
               PORT_ResetBits(MDR_PORTF, PORT_Pin_0);
               state &= ~0x01;
            }
               else
               {
                  PORT_SetBits(MDR_PORTF, PORT_Pin_0);
               
                  state |= 0x01;
               }
            
         }
      }


Подскажите пожалуйста дело в настройках таймера?
Еще смущает некоторый факт - я питаю МК от стабилизатора LP2985AIM5-3.3, ко всем портам питания подведены 0.1 мкФ
Однако верхняя планка питания - не высокочастотная маленькая помеха а низкочастотная пила
Вопрос не совсем к моей плате поскольку такая помеха стала усиливатся при увеличении исполняемой нагрузки, т.е когда работа с портами - ничего страшного и потребление почти 0, когда работа с таймером на кГц частотах потребление 10-20 и возникает пила.
Может быть нужно обложится емкостями по портам питания?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 10:16 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 389
Откуда: ПКК "Миландр"
Иван_К10 писал(а):
Основной цикл не должен столько жрать по времени

По обрывку кода точно не скажешь, но судя по всему таймер работает на частоте ядра, т.к. - делители везде единичные (TIMER_HCLKdiv1, TIMER_Prescaler = 0x0000). Следовательно прерывания таймера срабатывают каждые 40 тактов ядра (TIMER_Period = 0х28). 12 тактов ядра уходит на вход в прерывание, там еще флаг поставить надо, сбросить флаг события таймера и выполнить ненужное присвоение MDR_TIMER1->CNT = 0x0 (при окончании периода CNT автоматом сам сбрасывается в 0 и считает снова вверх). Осталось ли что-то на основной цикл не понятно.

Про таймер - https://startmilandr.ru/doku.php/doc:doclist:timers

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 11:32 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
Поставил еще 1 мкФ и пила исчезла, уровни хорошие
Однако проблема с тактированием осталась
Я предполагаю что работаю от внутреннего генератора, и значения делителя частоты и периода ставлю относительно 8 МГц, т.е 0,125 микросек

Основной код теперь это пустой while, дергаю ножку в обработчике
Порты поставил на MAX_FAST

Но какие значения я бы не ставил в периоде, максимальная частота переключения ножки в обработчике 30 кГц...
Такого никогда не встречал ни с одним МК, вообще не пойму как такое возможно
Может это из-за SPL?
Вопрос - что нужно сделать чтобы можно было получить на порте 1986ВЕ93У частоту переключения пина не менее 250 кГц ?

Может необходимо ставить внешний кварц и далее его умножать???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 11:44 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
попробовал без таймера в цикле while переключать ножку - 50 кГц
Видимо это из-за SPL...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 13:11 
Не в сети

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 55
Иван_К10 писал(а):
Вопрос - что нужно сделать чтобы можно было получить на порте 1986ВЕ93У частоту переключения пина не менее 250 кГц ?


Использовать вывод CLK одного из блоков SSP.
В режиме мастер записывать 0xFF в передающее FIFO.
SSP будет генерировать тактовые импульсы на выводе CLK.
Скорость SSP_CLK, Hz:
SSP_CLK = HCLK / (2^SSP_BRG) / (CPSR * (SCR + 1));
BRG=[0,1,2,...,7];
CPSR=[2,4,6,8,...,254];
SCR=[0,1,2,...,255].

При HCLK=HSE=8MHz, BRG=1, CPSR=4, SCR=3:
250000 = 8000000 / (2 ^ 1) / (4 * (3 + 1))

Для корпуса Н16.48-1В SSP1_CLK на выводе PF1


Последний раз редактировалось Sergey3141592 2019-авг-14 13:46, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 13:28 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
прошу прощения, я имел ввиду не аппаратно получить а программно, т.е с использованием более высокого тактового сигнала для периферии
Как я понимаю 1986ВЕ93У позволяет умножать HSI так же как HSE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 13:55 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1322
Откуда: Тула
Иван_К10 писал(а):
попробовал без таймера в цикле while переключать ножку - 50 кГц
Видимо это из-за SPL...

Всё верно.
Вы бы хоть посмотрели как реализованы PORT_Set/ResetBits();, прикинули сколько тактов займёт выполнение этих ф-ций и соотнесли со своим пожеланием программно дёргать ногой 250000 тыс. раз в секунду на сложно устроенном ядре и проце при тактовой 8 МГц.
Попробуйте так:
Код:
void Timer1_IRQHandler(void)
{
  MDR_TIMER1->STATUS=0; // не ставить последней строкой
  MDR_PORTF->RXTX ^= PORT_Pin_0;
}

а основной цикл - пустой.

_________________
сочувствующий…


Последний раз редактировалось prostoRoman 2019-авг-14 13:57, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 13:56 
Не в сети

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 55
А что конкретно вы хотите сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 13:58 
Не в сети

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 55
prostoRoman писал(а):
Иван_К10 писал(а):
попробовал без таймера в цикле while переключать ножку - 50 кГц
Видимо это из-за SPL...

Всё верно.
Вы бы хоть посмотрели как реализованы PORT_Set/ResetBits();, прикинули сколько тактов займёт выполнение этих ф-ций и соотнесли со своим пожеланием программно дёргать ногой 250000 тыс. раз в секунду на сложно устроенном ядре и проце при тактовой 8 МГц.
Попробуйте так:
Код:
void Timer1_IRQHandler(void)
{
  MDR_TIMER1->STATUS=0; // не ставить последней строкой
  MDR_PORTF->RXTX ^= PORT_Pin_0;
}

а основной цикл - пустой.


Не успеет все равно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 13:59 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1322
Откуда: Тула
Sergey3141592 писал(а):
Не успеет все равно.

Успеет. Или будет очень близко ;)

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 15:00 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
не успел, 96 кГц, но это уже радует
Как же без SPL сделать проект...
Пробовал с Проект 1, к сожалению не смог победить ошибки компиляции
По поводу задачи, она простая. Мне нужно 8 управляемых шимов с частотами до 250 кГц, кварц внешний в принципе можно припаять, площадки и кондеры на случай острой необходимости предусмотрены


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 15:10 
Не в сети

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 55
Иван_К10 писал(а):
не успел, 96 кГц, но это уже радует


Я выиграл.

Может лучше плис для этой задачи подойдет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 15:31 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
это точно, но я ее не рассматривал для таких небольших частот вообще
И уже поздно, потом я думаю если я поставлю внешний кварц и далее его умножу то у меня системный тик будет быстрее и соответственно даже с SPL я смогу подстроить по осцилу нужные частоты


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 15:48 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
Попробовал, все равно 30 кГц
Прошу проверить настройку клока 40 МГц

Код:
                RST_CLK_DeInit();
      RST_CLK_HSEconfig(RST_CLK_HSE_ON);
      if (RST_CLK_HSEstatus() == ERROR) while (1);
      RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul5);
      RST_CLK_CPU_PLLcmd(ENABLE);
      if (RST_CLK_CPU_PLLstatus() == ERROR) while (1);
      RST_CLK_CPU_PLLuse(ENABLE);
      RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
      RST_CLK_CPU_PLLconfig (RST_CLK_CPU_PLLsrcHSIdiv2,0);      
      RST_CLK_PCLKcmd((RST_CLK_PCLK_RST_CLK),ENABLE);


Поставил внешний кварц 8МГц и делаю из него 40 МГц


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: keil 5.28+ MT-LINK + 1986ВЕ93У
СообщениеДобавлено: 2019-авг-14 16:41 
Не в сети

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 24
Вот настройка которая выдает все таки даже 500 кГц!)

Код:
RST_CLK_DeInit();
      RST_CLK_HSEconfig(RST_CLK_HSE_ON);
      if (RST_CLK_HSEstatus() == ERROR) while (1);
      RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul5);
      RST_CLK_CPU_PLLcmd(ENABLE);
      if (RST_CLK_CPU_PLLstatus() == ERROR) while (1);
      RST_CLK_CPU_PLLuse(ENABLE);
      RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);



Всем спасибо за поддержку!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3 Все  След.

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


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

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


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

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