Кто любит RISC в жизни, заходим, не стесняемся.
pokk
Вымогатель припоя
Сообщения: 574 Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщение
pokk » Ср сен 18, 2013 11:29:53
Здравствуйте, хочу сделать задержку нормальную
нашёл вот такую
Код: Выделить всё
inline void DelayLoop(uint32_t delayLoops)
{
asm(
"1: \n"
" CBZ %[delayLoops], 2f \n"
" SUB %[delayLoops], %[delayLoops], #1 \n"
" B 1b \n"
"2: \n"
: [delayLoops] "+r"(delayLoops)
);
}
чего это такое ?
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699 Зарегистрирован: Вс июн 16, 2013 18:41:45
Сообщение
Darth Cuauhtemoc » Ср сен 18, 2013 11:39:15
"\n" - это перевод строки, в асме нельзя записывать команды в одну строку, "1:" - локальная метка в пределах данного блока asm{ ... }, "%[<имя>]" - обращение к переменной (в данном случае к аргументу функции).
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
drakon
Грызет канифоль
Сообщения: 271 Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков
Сообщение
drakon » Ср сен 18, 2013 11:54:25
pokk, я написал небольшую библиотеку delay, использует системный таймер, нужно только указать частоту ядра:
Код: Выделить всё
/*=============*/
#define CORE_CLK_FREQ 168000000 //Частота ядра в Hz
/*=============*/
Вложения
delay.rar
(1.68 КБ) 215 скачиваний
amv2000
Опытный кот
Сообщения: 720 Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область
Сообщение
amv2000 » Чт сен 19, 2013 07:07:57
Как говаривал старик Энштейн, всё относительно. Насколько точная нужна задержка можно сделать на таймере
Код: Выделить всё
uint32_t DELAY_MS;
void delay_ms(uint16_t msec)
{
TIM2->ARR = msec;//Загружаем число миллисекунд в регистр автоперезагрузки
TIM2->CR1 |= TIM_CR1_CEN;//Запускаем счет
while((TIM2->SR & TIM_SR_UIF)==0);//Ждем окончания счета
TIM2->SR &= ~TIM_SR_UIF;//Теперь флаг события надо сбросить вручную
} Можно так
Код: Выделить всё
/**-----------------------------------------------------------------------------
* @описание : Функция временной задержки в мс.
* @заметка : Модификатор __IO указывает на права чтения/записи.
* Фактически, это переименованный volatile.
* @параметр : uint32_t nTime
* @возвр значение: Нет
*---------------------------------------------------------------------------*/
void Delay_ms(__IO uint32_t nTime)
{
uint32_t nTicks=(CPU_CLK/1000)*nTime;
for(; nTicks != 0; nTicks--);
} а можно вообще по простому
Код: Выделить всё
/**-----------------------------------------------------------------------------
* @описание : функция программной задержки.
* @заметка : Подставляя значение time_d получаем нужную паузу.
* @параметр : uint32_t time_d
* @возвращаемое значение: Нет
*---------------------------------------------------------------------------*/
void Delay(uint32_t time_d) { while(time_d--); }Всё зависит от целей.
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699 Зарегистрирован: Вс июн 16, 2013 18:41:45
Сообщение
Darth Cuauhtemoc » Чт сен 19, 2013 07:19:43
Я делал с использованием системного таймера. Правда, контроллер не кварцованный, от внутреннего RC работает, но точность приемлемая.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
HHIMERA
Друг Кота
Сообщения: 4583 Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ
Сообщение
HHIMERA » Чт сен 19, 2013 08:32:39
amv2000 писал(а): а можно вообще по простому
По простому в большинстве случаев хватает...
Можно ещё через DWT...
А в исключительных случаях придётся включать мозг и мутить всё хардварно... иначе точности до такта не получить...
"Я не даю готовых решений, я заставляю думать!"(С)
balmer
Это не хвост, это антенна
Сообщения: 1433 Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград
Сообщение
balmer » Чт сен 19, 2013 09:56:49
amv2000 писал(а): а можно вообще по простому
Код: Выделить всё
void Delay(uint32_t time_d) { while(time_d--); }Всё зависит от целей.
Тут уже аккуратно надо быть, ибо задержка будет зависить от release/debug и компилятора. Ненадежно это в долгострочной перспективе.
pokk
Вымогатель припоя
Сообщения: 574 Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщение
pokk » Чт сен 19, 2013 10:34:17
Благодарю за помощь! с таймером были проблемы так как не совсем понятно было частота тактирования их.
По этому хотел сделать всё на nop что бы вопросов не было, но потом всё таки разобраться тактированием и сделал на таймере.
Сейчас думаю с SysTick по разбираться думаю он больше подходит для определения времени работы процессора.
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699 Зарегистрирован: Вс июн 16, 2013 18:41:45
Сообщение
Darth Cuauhtemoc » Чт сен 19, 2013 10:37:27
HHIMERA писал(а): А в исключительных случаях придётся включать мозг и мутить всё хардварно... иначе точности до такта не получить...
Точность до такта в общем случае получить не удастся хотя бы потому, что в системе есть DMA.
pokk писал(а): Сейчас думаю с SysTick по разбираться думаю он больше подходит для определения времени работы процессора.
SysTick самое оно
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
HHIMERA
Друг Кота
Сообщения: 4583 Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ
Сообщение
HHIMERA » Чт сен 19, 2013 11:06:32
Darth Cuauhtemoc писал(а): Точность до такта в общем случае получить не удастся хотя бы потому, что в системе есть DMA.
В общеи случае и курица это птица...
Нафига мне общие случаи... если то что надо я получаю с точностью такт в такт...
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA
Друг Кота
Сообщения: 4583 Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ
Сообщение
HHIMERA » Чт сен 19, 2013 11:10:09
pokk писал(а):
Сейчас думаю с SysTick по разбираться думаю он больше подходит для определения времени работы процессора.
Для определения времени работы отдельных кусков проги лучше юзать DWT... если он в наличии...
"Я не даю готовых решений, я заставляю думать!"(С)
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699 Зарегистрирован: Вс июн 16, 2013 18:41:45
Сообщение
Darth Cuauhtemoc » Чт сен 19, 2013 19:48:46
Какие файлы надо включить в проект, чтобы писать на CMSIS, но чтоб были дефайны для регистров, битов и т.п. именно STM32?
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Myp3ik
Мучитель микросхем
Сообщения: 450 Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР
Сообщение
Myp3ik » Чт сен 19, 2013 22:51:48
Качаете CMSIS, например для STM32F303 это будет файл CMSIS\Device\ST\STM32F30x\Include\stm32f30x.h
Иван Сусанин - первый полупроводник
pokk
Вымогатель припоя
Сообщения: 574 Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщение
pokk » Пт сен 20, 2013 03:55:41
Подскажите где можно по подробнее по смотреть какие ассемблерные команды есть в том или ином STM ?
ну и соответственно сколько тактов надо на их выполнение
смотрел RM0090 Reference manual и Datasheet что-то не нашёл
как всегда тут же нашёл половину ответа =)) наткнулся случайно на PM0214 Programming manual
команды все хорошо расписаны с примерами =)) но вот за сколько тактов выполняются не нашёл =(
drakon
Грызет канифоль
Сообщения: 271 Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков
Сообщение
drakon » Пт сен 20, 2013 13:38:53
pokk, ищите документацию на ARM-Cortex-Mx, на всех МК они одинаковые, т.к. куплены у другой компании.
вот на русском: Yadro_Cortex_-_MZ_kompanii_ARM_Polnoe_rukovodst.djvu, на английском: ARMCortexM3Guide.pdf.
FreshMan
Друг Кота
Сообщения: 6296 Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine
Сообщение
FreshMan » Сб сен 21, 2013 10:59:02
в статье
http://radiokot.ru/konkurs/88/ есть такое высказывание
Любой микроконтроллер STM32 можно заменить другим STM32, но с лучшими характеристиками, без изменения схемы
это как понимать ? что...., у каждого STM32 одинаковое количество ног и за каждой из ни жостко закреплены определенные ф-ции ?
Tell Me The Truth
Myp3ik
Мучитель микросхем
Сообщения: 450 Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР
Сообщение
Myp3ik » Сб сен 21, 2013 12:25:03
FreshMan, просто у МК с одинаковым количеством ног, как правило, одинаковая цоколевка. Например МК 100 серии в корпусе LQFP64, можно заменить на 103 в таком же корпусе, то есть на место 100 просто впаять 103 и всё
Иван Сусанин - первый полупроводник
FreshMan
Друг Кота
Сообщения: 6296 Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine
Сообщение
FreshMan » Сб сен 21, 2013 12:29:04
а какая самая популярная IDE ?
Tell Me The Truth
Myp3ik
Мучитель микросхем
Сообщения: 450 Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР
Сообщение
Myp3ik » Сб сен 21, 2013 12:36:55
Мне, например, нравится ихняя родная - Keil uVision, он же MDK ARM. До 32кБ работает бесплатно
https://www.keil.com/download/product/ .
Иван Сусанин - первый полупроводник
ut1wpr
Вымогатель припоя
Сообщения: 581 Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщение
ut1wpr » Сб сен 21, 2013 13:02:15
"Ихняя" - это чья?
С уважением,
Виктор.