реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> STM8 как правильно сделать функцию Delay
-AZ-
сообщение Dec 15 2015, 13:20
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-09-15
Пользователь №: 88 488



Кто плотно сталкивался с подобной задачей, как правильно написать универсальную функцию Delay для STM8
Пробывал такой вариант, так вот uS до 7-10 не чувствует, да и перевести в сон процессор нельзя...насколько понимаю если уводить в сон, то только по прерыванию делать?
Кто как реализовывает?

Код
void delays_init (void)
{
  CLK_PCKENR1_bit.PCKEN12 = 1;
  TIM4_PSCR_bit.PSC = 0x01;    
  TIM4_EGR_bit.UG = 1;        
  TIM4_CR1_bit.CEN = 1;      
}

void delay_us (unsigned char us)
{
  TIM4_CNTR = 0;
  while (TIM4_CNTR < us);  
}

void delay_ms (unsigned int ms)
{
  ms = ms<<2;
  while (ms--) delay_us(250);
}


Сообщение отредактировал IgorKossak - Dec 15 2015, 19:17
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 15 2015, 18:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



А каким местом STM8 относится к ARM??
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 15 2015, 19:18
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Перенёс.
Go to the top of the page
 
+Quote Post
uriy
сообщение Dec 16 2015, 05:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



микросекундные задержки я делаю просто бесполезным циклом.
Для миллисекундных у меня все время заведен TIM4 с прерыванием каждые 1 мс и инкрементом переменной внутри.
Go to the top of the page
 
+Quote Post
-AZ-
сообщение Dec 16 2015, 07:30
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-09-15
Пользователь №: 88 488



Цитата(uriy @ Dec 16 2015, 08:43) *
микросекундные задержки я делаю просто бесполезным циклом.
Для миллисекундных у меня все время заведен TIM4 с прерыванием каждые 1 мс и инкрементом переменной внутри.


А пустой цикл, как подгоняете под реальное время? Замерами на ноге? Или...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 16 2015, 11:19
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



да. задержки дело мутное. smile3046.gif
пришлось на таймерах делать через compare
TIM4 как и у всех - 1мс системный тик. Это уже стандарт, можно сказать.
А с другой стороны, нафиг этот delay нужен, если можно в прерывании дергать ногами. Для детерминированности времени реакции - придется организовывать вызов фунции по указателю.

Go to the top of the page
 
+Quote Post
-AZ-
сообщение Dec 16 2015, 14:13
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-09-15
Пользователь №: 88 488



Цитата(_Pasha @ Dec 16 2015, 14:19) *
да. задержки дело мутное. smile3046.gif
пришлось на таймерах делать через compare
TIM4 как и у всех - 1мс системный тик. Это уже стандарт, можно сказать.
А с другой стороны, нафиг этот delay нужен, если можно в прерывании дергать ногами. Для детерминированности времени реакции - придется организовывать вызов фунции по указателю.


С задержками 1 и т.д. мс согласен TIM4 наверное лучший вариант, с прерыванием или без по ситуации.
А как делать правельные задержки 1nS или 7nS колхозить с циклами nop ?
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 16 2015, 14:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(phenixs @ Dec 16 2015, 17:13) *
А как делать правельные задержки 1nS или 7nS колхозить с циклами nop ?

1nS - это одна наносекунда? Хотите задержать сигнал на 1 наносекунду - пропустите его через проводник длиной 20 см biggrin.gif
Go to the top of the page
 
+Quote Post
-AZ-
сообщение Dec 16 2015, 14:26
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-09-15
Пользователь №: 88 488



Цитата(scifi @ Dec 16 2015, 17:19) *
1nS - это одна наносекунда? Хотите задержать сигнал на 1 наносекунду - пропустите его через проводник длиной 20 см biggrin.gif

mS - милисекунда
uS - микросекунда
nS - наносекунда

насчет nS загнул, имел в виду uS

Сообщение отредактировал phenixs - Dec 16 2015, 14:27
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 16 2015, 14:35
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Когда требуемая задержка приближается по длительности к одному такту, её приходится набирать нопами. Причём, если требуется точность, то непременно на ассемблере.
Go to the top of the page
 
+Quote Post
-AZ-
сообщение Dec 16 2015, 14:39
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-09-15
Пользователь №: 88 488



Цитата(scifi @ Dec 16 2015, 17:35) *
Когда требуемая задержка приближается по длительности к одному такту, её приходится набирать нопами. Причём, если требуется точность, то непременно на ассемблере.


и индивидульно для каждого проекта(F_CPU b т.д.)-?
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 16 2015, 14:48
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(phenixs @ Dec 16 2015, 17:39) *
и индивидульно для каждого проекта(F_CPU b т.д.)-?

Видимо, да.
Только что у Вас за проекты такие, что везде нужно микросекундные задержки пихать? У меня, к примеру, крайне редко такая необходимость появляется.
Go to the top of the page
 
+Quote Post
-AZ-
сообщение Dec 16 2015, 15:11
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-09-15
Пользователь №: 88 488



Цитата(scifi @ Dec 16 2015, 17:48) *
Видимо, да.
Только что у Вас за проекты такие, что везде нужно микросекундные задержки пихать? У меня, к примеру, крайне редко такая необходимость появляется.


Пример - стандартный SPI, после опускания CN надо ждать MISO, по факту приходит сразу, а вдруг...., и сколько ждать ???, надо ставить микросекунд 10-15, точность не нужна но пустой цикл надо гонять получается....
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 16 2015, 20:09
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(phenixs @ Dec 16 2015, 18:11) *
Пример - стандартный SPI, после опускания CN надо ждать MISO, по факту приходит сразу, а вдруг...., и сколько ждать ???, надо ставить микросекунд 10-15, точность не нужна но пустой цикл надо гонять получается....

CN - это SCK? Сколько ждать - написано в даташите. Читайте, и будет вам щастя.
Go to the top of the page
 
+Quote Post
Spider
сообщение Dec 17 2015, 14:23
Сообщение #15


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



В stm8 вообще сложно добиться нужных задержек даже с nop, в виду особенностей работы внутреннего конвейера.
Много интересного описано тут.
с картинками и пояснениями.
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 04:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016