Миландр

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

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




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

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 27
Организация: ООО Энейс
Попробовал собрать чтото из примеров, вот что получилось
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
Сообщения: 462
Организация: Milandr
Откуда: ПКК "Миландр"
Иван_К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

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


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

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 27
Организация: ООО Энейс
Поставил еще 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
Сообщения: 27
Организация: ООО Энейс
попробовал без таймера в цикле while переключать ножку - 50 кГц
Видимо это из-за SPL...


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

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 86
Организация: частное лицо
Иван_К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
Сообщения: 27
Организация: ООО Энейс
прошу прощения, я имел ввиду не аппаратно получить а программно, т.е с использованием более высокого тактового сигнала для периферии
Как я понимаю 1986ВЕ93У позволяет умножать HSI так же как HSE


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

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1404
Откуда: Тула
Иван_К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
Сообщения: 86
Организация: частное лицо
А что конкретно вы хотите сделать?


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

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 86
Организация: частное лицо
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
Сообщения: 1404
Откуда: Тула
Sergey3141592 писал(а):
Не успеет все равно.
Успеет. Или будет очень близко ;)

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


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

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


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

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

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


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

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


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

Зарегистрирован: 2019-июн-05 21:54
Сообщения: 27
Организация: ООО Энейс
Попробовал, все равно 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
Сообщения: 27
Организация: ООО Энейс
Вот настройка которая выдает все таки даже 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+03:00


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

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


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

Перейти: 

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