-=az=- 0 15 декабря, 2015 Опубликовано 15 декабря, 2015 (изменено) · Жалоба Кто плотно сталкивался с подобной задачей, как правильно написать универсальную функцию 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); } Изменено 15 декабря, 2015 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 15 декабря, 2015 Опубликовано 15 декабря, 2015 · Жалоба А каким местом STM8 относится к ARM?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 15 декабря, 2015 Опубликовано 15 декабря, 2015 · Жалоба Перенёс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба микросекундные задержки я делаю просто бесполезным циклом. Для миллисекундных у меня все время заведен TIM4 с прерыванием каждые 1 мс и инкрементом переменной внутри. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба микросекундные задержки я делаю просто бесполезным циклом. Для миллисекундных у меня все время заведен TIM4 с прерыванием каждые 1 мс и инкрементом переменной внутри. А пустой цикл, как подгоняете под реальное время? Замерами на ноге? Или... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба да. задержки дело мутное. :smile3046: пришлось на таймерах делать через compare TIM4 как и у всех - 1мс системный тик. Это уже стандарт, можно сказать. А с другой стороны, нафиг этот delay нужен, если можно в прерывании дергать ногами. Для детерминированности времени реакции - придется организовывать вызов фунции по указателю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба да. задержки дело мутное. :smile3046: пришлось на таймерах делать через compare TIM4 как и у всех - 1мс системный тик. Это уже стандарт, можно сказать. А с другой стороны, нафиг этот delay нужен, если можно в прерывании дергать ногами. Для детерминированности времени реакции - придется организовывать вызов фунции по указателю. С задержками 1 и т.д. мс согласен TIM4 наверное лучший вариант, с прерыванием или без по ситуации. А как делать правельные задержки 1nS или 7nS колхозить с циклами nop ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба А как делать правельные задержки 1nS или 7nS колхозить с циклами nop ? 1nS - это одна наносекунда? Хотите задержать сигнал на 1 наносекунду - пропустите его через проводник длиной 20 см Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 (изменено) · Жалоба 1nS - это одна наносекунда? Хотите задержать сигнал на 1 наносекунду - пропустите его через проводник длиной 20 см mS - милисекунда uS - микросекунда nS - наносекунда насчет nS загнул, имел в виду uS Изменено 16 декабря, 2015 пользователем phenixs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба Когда требуемая задержка приближается по длительности к одному такту, её приходится набирать нопами. Причём, если требуется точность, то непременно на ассемблере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба Когда требуемая задержка приближается по длительности к одному такту, её приходится набирать нопами. Причём, если требуется точность, то непременно на ассемблере. и индивидульно для каждого проекта(F_CPU b т.д.)-? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба и индивидульно для каждого проекта(F_CPU b т.д.)-? Видимо, да. Только что у Вас за проекты такие, что везде нужно микросекундные задержки пихать? У меня, к примеру, крайне редко такая необходимость появляется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба Видимо, да. Только что у Вас за проекты такие, что везде нужно микросекундные задержки пихать? У меня, к примеру, крайне редко такая необходимость появляется. Пример - стандартный SPI, после опускания CN надо ждать MISO, по факту приходит сразу, а вдруг...., и сколько ждать ???, надо ставить микросекунд 10-15, точность не нужна но пустой цикл надо гонять получается.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба Пример - стандартный SPI, после опускания CN надо ждать MISO, по факту приходит сразу, а вдруг...., и сколько ждать ???, надо ставить микросекунд 10-15, точность не нужна но пустой цикл надо гонять получается.... CN - это SCK? Сколько ждать - написано в даташите. Читайте, и будет вам щастя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 17 декабря, 2015 Опубликовано 17 декабря, 2015 · Жалоба В stm8 вообще сложно добиться нужных задержек даже с nop, в виду особенностей работы внутреннего конвейера. Много интересного описано тут. с картинками и пояснениями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться