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

 
 
> Как сделать программную задержку на STM32, без использования таймеров
Firer
сообщение Feb 10 2012, 12:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 7-01-05
Пользователь №: 1 832



Пожалуйста подскажите.
Пишу в FreeRTOS.
Нужно написать библиотеку работы с LCD.
Там нужна задержка около 1мкс.
Как ее сделать?
Может функцию на ассемблере кто подскажет?
Потому что Keil оптимизирует в ничто вот такой код:
i = 100;
while (i --)
;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
allsettingsdone
сообщение Jan 31 2013, 16:21
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Так а на чем же остановиться в поиске функции для програмной задержки?
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jan 31 2013, 16:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(allsettingsdone @ Jan 31 2013, 20:21) *
Так а на чем же остановиться в поиске функции для програмной задержки?

Да на чем угодно, лишь бы написано было понятно и пользоваться удобно:

Код
////////////////////////////////////////////////////////////////////////////////
// DELAY ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#pragma    inline
void    BspDelayTicks(            uint32_t        Ticks )
{
    if (!(SCB_DEMCR & 0x01000000))
    {
        CoreDebug->DEMCR    |=    0x01000000;
        DWT->CYCCNT            =    0;
        DWT->CTRL            |=    1 << DWT_CTRL_CYCCNTENA_Pos;                    // enable the counter
    }

    while( DWT->CYCCNT < Ticks );
}

////////////////////////////////////////////////////////////////////////////////
#pragma    inline
void    BspDelay_uSec( volatile    uint32_t        uSec )
{
    while( uSec-- )
    {
        BspDelayTicks( BSP_MCLK_HZ/1000000 );
    }
}

////////////////////////////////////////////////////////////////////////////////
#pragma    inline
void    BspDelay_mSec( volatile    uint32_t        mSec )
{
    while( mSec-- )
    {
        BspDelayTicks( BSP_MCLK_HZ/1000 );
    }
}
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Jan 31 2013, 19:36
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Tahoe @ Jan 31 2013, 19:43) *
лишь бы написано было понятно
Код
    if (!(SCB_DEMCR & 0x01000000))
    {
        CoreDebug->DEMCR    |=    0x01000000;

Да вроде как и понятно... но вот глаз режет...

Вроде как ...
Код
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jan 31 2013, 20:26
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(HHIMERA @ Jan 31 2013, 23:36) *
но вот глаз режет...

Да ладно, буквоедствовать... Особенно после этой помойки:
Цитата(allsettingsdone @ Jan 31 2013, 16:35) *
Код
#define F_CPU 8000000UL
void delay_us(uint32_t us)
{
    for(volatie unsigned int i=0;i<((F_CPU/1000000-3)*us);i++) {}
}


В показанном коде еще и счетчик сбрасывается, а не разница между текущим и ожидаемым значением вычисляется. wink.gif И потом, основная "ценность" приведенного кода совсем в другом, а именно, в сервисе:
BspDelay_uSec( xxx );
BspDelay_mSec( xxx );
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Firer   Как сделать программную задержку на STM32   Feb 10 2012, 12:51
- - Porty   используй специально для этого предназначенное клю...   Feb 10 2012, 13:11
|- - pitt   Цитата(Porty @ Feb 10 2012, 08:11) исполь...   Jan 7 2013, 02:02
|- - HHIMERA   Цитата(pitt @ Jan 7 2013, 06:02) Никакого...   Jan 7 2013, 11:59
|- - pitt   Цитата(HHIMERA @ Jan 7 2013, 06:59) Угу.....   Jan 27 2013, 00:00
|- - HHIMERA   Ну так и не путайте...   Jan 27 2013, 09:33
- - MikeC   Попробуйте вставить __no_operation() в тело цикла.   Feb 10 2012, 13:13
- - ChipKiller   Цитата("Firer")Может функцию на ассембле...   Feb 10 2012, 13:15
- - Firer   C volatile все равно оптимизит. Вот я тут сам наша...   Feb 10 2012, 13:46
|- - demiurg_spb   Цитата(Firer @ Feb 10 2012, 16:46) C vola...   Feb 10 2012, 17:10
|- - scifi   Цитата(Firer @ Feb 10 2012, 17:46) Вопрос...   Feb 10 2012, 17:19
|- - Юрий_СВ   Цитата(Firer @ Feb 10 2012, 16:46) Вопрос...   Feb 10 2012, 17:59
- - ukpyr   Код inline void _delay_loops(U32 loops) { ...   Feb 10 2012, 18:10
- - smk   В простых примерах от Keil есть программные задерж...   Feb 11 2012, 06:34
- - smk   Вот такое еще работает: DelayMS(2);   Feb 11 2012, 07:47
- - KnightIgor   Цитата(Firer @ Feb 10 2012, 13:51) Пожалу...   Feb 11 2012, 11:38
|- - AHTOXA   Цитата(KnightIgor @ Feb 11 2012, 17:38) П...   Feb 11 2012, 16:05
|- - KnightIgor   Счетчик надо проинициализировать (включить): - дол...   Jun 28 2012, 07:42
|- - megajohn   Цитата(KnightIgor @ Jun 28 2012, 11:42) С...   Aug 6 2013, 12:54
- - scifi   Действительно, очень интересно. Спасибо за наводку...   Feb 11 2012, 18:31
- - ReAl   Очень жаль, что остальные счётчики все 8-битные. Н...   Feb 15 2012, 17:02
|- - Altemir   Цитата(ReAl @ Feb 15 2012, 21:02) Очень ж...   Feb 16 2012, 05:55
- - ukpyr   не понятно зачем пляски с бубном, выше приводились...   Jun 28 2012, 09:01
|- - Влад Р.   Цитата(ukpyr @ Jun 28 2012, 12:01) не пон...   Jun 28 2012, 11:54
|- - AHTOXA   Цитата(ukpyr @ Jun 28 2012, 15:01) не пон...   Jun 28 2012, 17:43
|- - Rimsky   Цитата(ukpyr @ Jun 28 2012, 18:01) не пон...   Aug 12 2013, 02:14
|- - VAI   Цитата(Rimsky @ Aug 12 2013, 06:14) Вот к...   Aug 12 2013, 09:03
|- - Rimsky   Цитата(VAI @ Aug 12 2013, 18:03) Постом в...   Aug 12 2013, 14:19
- - Tahoe   С виду все красиво, хотел воспользоваться вышеприв...   Jan 6 2013, 16:07
|- - _Артём_   Цитата(Tahoe @ Jan 6 2013, 18:07) С виду ...   Jan 6 2013, 16:20
|- - Tahoe   Цитата(_Артём_ @ Jan 6 2013, 20:20) А отл...   Jan 6 2013, 16:53
|- - _Артём_   Цитата(Tahoe @ Jan 6 2013, 18:53) Логика ...   Jan 6 2013, 20:26
|- - Tahoe   Цитата(_Артём_ @ Jan 7 2013, 00:26) Но вы...   Jan 6 2013, 20:50
|- - KnightIgor   Цитата(Tahoe @ Jan 6 2013, 21:50) Напряму...   Jan 7 2013, 08:20
|- - _Артём_   Цитата(KnightIgor @ Jan 7 2013, 10:20) Эт...   Jan 7 2013, 10:20
||- - KnightIgor   Цитата(_Артём_ @ Jan 7 2013, 11:20) Не то...   Jan 7 2013, 10:31
|- - Tahoe   Цитата(KnightIgor @ Jan 7 2013, 12:20) Ка...   Jan 7 2013, 12:38
|- - HHIMERA   Цитата(Tahoe @ Jan 7 2013, 15:38) самосто...   Jan 7 2013, 12:46
||- - SSerge   Цитата(HHIMERA @ Jan 7 2013, 19:46) Смотр...   Jan 8 2013, 07:16
||- - HHIMERA   Цитата(SSerge @ Jan 8 2013, 11:16) в М0 и...   Jan 8 2013, 08:52
|- - KnightIgor   Цитата(Tahoe @ Jan 7 2013, 13:38) Итого. ...   Jan 27 2013, 10:23
|- - Tahoe   Цитата(KnightIgor @ Jan 27 2013, 14:23) Н...   Jan 27 2013, 15:05
- - allsettingsdone   Ну а вот я попробывал сделать так: Код#define F_CP...   Jan 31 2013, 12:35
|- - scifi   Цитата(allsettingsdone @ Jan 31 2013, 16...   Jan 31 2013, 13:13
|- - PoReX   Цитата(allsettingsdone @ Jan 31 2013, 16...   Jan 31 2013, 13:25
|- - Tahoe   Цитата(allsettingsdone @ Jan 31 2013, 16...   Jan 31 2013, 14:05
|- - allsettingsdone   Цитата(Tahoe @ Jan 31 2013, 18:43) Да на ...   Feb 1 2013, 10:08
|- - HHIMERA   Цитата(allsettingsdone @ Feb 1 2013, 14:0...   Feb 1 2013, 10:27
|- - Tahoe   Цитата(allsettingsdone @ Feb 1 2013, 14:0...   Feb 1 2013, 12:04
- - polyname   ЦитатаЧто плохого/хорошего скажите про всё это?раб...   Feb 1 2013, 12:11
|- - Tahoe   Цитата(polyname @ Feb 1 2013, 16:11) а не...   Feb 1 2013, 12:24
|- - demiurg_spb   Кодvoid dwt_init(void) { CoreDebug->D...   Apr 22 2013, 16:02
- - Rash   на новых мк приходится штриховать условие (//) Ко...   Aug 7 2013, 06:52
|- - Kot_dnz   Цитата(Rash @ Aug 7 2013, 09:52) на новых...   Sep 28 2014, 10:45
|- - etoja   Можно ещё выдавать байт в неиспользуемый SPI, UART...   Oct 2 2014, 15:01
- - toweroff   Тут тоже набрел на решение, которое, как мне кажет...   Aug 7 2013, 07:13
|- - megajohn   Цитата(toweroff @ Aug 7 2013, 11:13) Тут ...   Aug 7 2013, 07:40
- - ukpyr   DMA далеко не всегда используется. можно добавить...   Aug 12 2013, 09:30
|- - MrYuran   Цитата(ukpyr @ Aug 12 2013, 12:30) можно ...   Aug 12 2013, 09:38
- - AVR   Цитата(Firer @ Feb 10 2012, 16:51) Нужно ...   Oct 3 2014, 07:00
|- - kolobok0   Цитата(AVR @ Oct 3 2014, 11:00) Код //for...   Oct 3 2014, 07:27
|- - Сергей Борщ   Цитата(kolobok0 @ Oct 3 2014, 10:27) толь...   Oct 3 2014, 12:56
- - menzoda   kolobok0, AVR Для большей точности и повторяемост...   Oct 3 2014, 12:49


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:38
Рейтинг@Mail.ru


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