Easyelectronics.ru

Электроника для всех
Текущее время: 17 сен 2019, 01:35

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 22:20 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
В некой функции запуска задержки я вкл. SysTick: LL_SYSTICK_EnableIT()
в колбэки прощитываю нужное время и отк. SysTick: LL_SYSTICK_DisableIT()
Задача: при включёном SysTick-и попав в функцию я должен вылететь из неё.
Код:
void Delay_ms(uint32_t  ms)
{
if(ms>0)return;
далее рабочий код ......
}
Не хотелось бы ровняться по переменной ms, а по флажку SysTick_CTRL_CLKSOURCE_Msk. (вкл/выкл)
Код:
if(SysTick->CTRL==SysTick_CTRL_CLKSOURCE_Msk)return;
но не знаю правильно я так делаю?
Да если что, то кристал 103.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 22:46 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
6Ф1П писал(а):
В некой функции запуска задержки я вкл. SysTick: LL_SYSTICK_EnableIT()
в колбэки прощитываю нужное время и отк. SysTick: LL_SYSTICK_DisableIT()
Задача: при включёном SysTick-и попав в функцию я должен вылететь из неё.
Код:
void Delay_ms(uint32_t  _ms)
{
if(ms>0)return;
ms = _ms;
далее рабочий код ......
}
Не хотелось бы ровняться по переменной ms, а по флажку SysTick_CTRL_CLKSOURCE_Msk. (вкл/выкл)
Код:
if(SysTick->CTRL==SysTick_CTRL_CLKSOURCE_Msk)return;
но не знаю правильно я так делаю?
Да если что, то кристал 103.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:14 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 931
Если нужно проверять только один бит регистра, то правильно вот так
Код:
if(SysTick->CTRL & SysTick_CTRL_CLKSOURCE_Msk) return;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:31 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
Код:
if(SysTick->CTRL & SysTick_CTRL_CLKSOURCE_Msk) return;
C этой конструкцией не пашет вылетает по любому.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:33 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 931
Это не проблема конструкции :) Про то зачем ты проверяешь SysTick_CTRL_CLKSOURCE я не стал спрашивать, вопрос то не об этом был. Тебе, наверное, бит SysTick_CTRL_ENABLE нужен?

Можно ещё вот так сделать, но это на пару байт больше по ассемблерному коду получится.
Код:
if(_FLD2VAL(SysTick_CTRL_CLKSOURCE,SysTick->CTRL)) return;


Последний раз редактировалось VladislavS 11 авг 2019, 23:39, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:38 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3642
Если честно, я ничего не понял в написанном.
Системный таймер запускается и работает постоянно. В его прерывании инкрементируются и декрементируются программные счетчики, выставляются флаги готовности (завершения счета). Ничего останавливать не нужно, никаких флагов систика проверять не нужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:40 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 931
BusMaster, ну зачем прямо догмами сыпать. Ну хочет человек поиграться с SysTick - пусть поиграется. Это же не запрещено, правда?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:44 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
Я выложу полный рабочий код:
Delay_ms(1, 5) задержка откликница колбеком через 5 мс.
Delay_ms(0, 10) непосредственная задержка на 10 мс.
Код:
//------------------------------------------------ Задержка в мс.
void Delay_ms(uint8_t off, uint32_t _ms)                     
{
if(ms>0)return;
//if(SysTick->CTRL & SysTick_CTRL_CLKSOURCE_Msk) return;
  ms = _ms;
   LL_SYSTICK_EnableIT();                    // Вкл. SYSTICK
if(off>0){
//============================================ Стартовый обработчик задержки если [off >=1].


      
//============================================ Конец обработчика.
           }else{ while(ms>0){} }            // Задержка если [off =0].           
}
и сам колбек:
Код:
//------------------------------------------------ SysTick.
void  SYSTICK_Callback(void)
{
  if(ms>0) ms--; else {   
  LL_SYSTICK_DisableIT();                     // Выкл. SYSTICK
//============================================== Конечный обработчик задержки если [off >=1].
      
…      
      
//============================================== Конец обработчика.
                       }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:45 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6132
"но не знаю правильно я так делаю?"
Естественно нет.
Нельзя использовать аппаратные ресурсы для получения программной задержки. Почему "нельзя" - потому-же, почему нельзя забивать гвозди микроскопом осциллографом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 11 авг 2019, 23:53 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3642
Не, ну если топикстартер хочет поиграться, то это конечно его право. Только тогда уж правильнее "играться" с любым другим таймером, это идеологически более верно. Системный таймер - он обычно является мерой всех системных интервалов времени, потому работает безостановочно. Ну и далее - как я уже написал выше по тексту.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 12 авг 2019, 00:01 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
То есть как я понял вещь аппаратная и предназначина для внутреннего пользования и мои фантазии здесь не умесны?
К сожалению мало информации про все эти приблуды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 12 авг 2019, 00:03 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 415
Откуда: Киев
Систик используют всякие разные ОС. Лучше взять любой свободный благо их в 103 слишком много. Вот смотри специально для тебя свеженькое https://www.youtube.com/watch?v=vJ4jv3qKRw8&t=859s


Последний раз редактировалось MasterElectric 12 авг 2019, 00:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по SysTick-у?
СообщениеДобавлено: 12 авг 2019, 00:05 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3642
На систике не возбраняется делать Delay_ms, только делать это надо так, как я описал выше. Этот метод очень и очень распространен.
Можно так же сделать на любом другом свободном таймере в режиме однократного его счета (One-Pulse Mode)


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

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


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

Сейчас этот форум просматривают: AVI-crak


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB