Таймер не работает

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Добавь ещё этот файл в проект. В функцию __low_level_init() перетащи инициализацию железа. Она будет до main вызываться. Сейчас у тебя вместо неё заглушка подставлена, а так вызов с пользой будет происходить.
Вложения
low_level_init.cpp
(1.02 КБ) 172 скачивания
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

TEPEM писал(а):Дык это еденичку в порт пишет, побитное сложение, а второй вычитание,
Не вычитание конечно. Загуглите "магические числа". Это важно, но проблема у Вас в чем то другом, скорее всего в стартапе.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3749933#p3749933"]
VladislavS писал(а):Положен говоришь? А картинку посмотреть?
Откуда диззасеблер знает такие метки как HardFault? Они разве не из стартапа?[/uquote]IAR сам подставляет для Cortex-M начало таблицы. Однако, обрати внимание как быстро она заканчивается!
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Сообщение TEPEM »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3749937#p3749937"]
TEPEM писал(а):Дык это еденичку в порт пишет, побитное сложение, а второй вычитание,
Не вычитание конечно. Загуглите "магические числа". Это важно, но проблема у Вас в чем то другом, скорее всего в стартапе.[/uquote]

Да я в курсе про и и или и инверсию, но так проще писать.

Добавлено after 1 minute 59 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749935#p3749935"]Добавь ещё этот файл в проект. В функцию __low_level_init() перетащи инициализацию железа. Она будет до main вызываться. Сейчас у тебя вместо неё заглушка подставлена, а так вызов с пользой будет происходить.[/uquote]

Заглушка?
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3749932#p3749932"]а второй вычитание, типа стирает ее, нога светодиода.[/uquote]

дык я не знаю как у тебя в первом стирает
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

TEPEM писал(а):что это за стартап
Некий код который выполнится до майна. Он же, например, настроит тактовый генератор и сформирует вектора прерываний. А там, в том числе, кроме вектора сброса, будет данные для инициализация указателя стека. Я не знаю что делает IAR без наличия стартапа и моожет вектор сброса будет указывать на майн, потому мигалка работает :dont_know: . Но возможно, что у вас указатель стека инициализируется в никуда, раз стартапа нет, а вызов подпрограммы вызывает исключения, так как камень пытается сохранить адрес возврата в недопустимую область памяти, при возникновении прерывания.
Последний раз редактировалось Z_h_e Чт дек 05, 2019 20:33:42, всего редактировалось 2 раза.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3749939#p3749939"]Заглушка?[/uquote]Ты такую красивую картинку выложил, сам не подозревая этого. Только читать её надо уметь - там же видно всё :)

Кстати, в стартап ещё вот такую строчку добавь где-нибудь в зоне действия extern "C".

Код: Выделить всё

void exit(){}
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Сообщение TEPEM »

void TIM2_IRQHandler(void) не работает что то(
extern "C" void TIM2_IRQHandler(void) только так и вызывается два раза сразу, т.е. пауза - вызов, вызов - пауза и т.д.

Добавлено after 2 minutes:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3749945#p3749945"][uquote="TEPEM",url="/forum/viewtopic.php?p=3749939#p3749939"]Заглушка?[/uquote]Ты такую красивую картинку выложил, сам не подозревая этого. Только читать её надо уметь - там же видно всё :)

Кстати, в стартап ещё вот такую строчку добавь где-нибудь в зоне действия extern "C".

Код: Выделить всё

void exit(){}
[/uquote]

Спасибо Вам большое!
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

могу ошибаться
но вроде флаг таймера в прерывании не сразу надо сбрасывать
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Сообщение TEPEM »

Код: Выделить всё

extern "C" void TIM2_IRQHandler(void)
{
   if (i<=2)
    {
      i++;
       GPIOC->ODR |= 32768;
       //for(j = 0 ; j < 100000; j++) __NOP();
    }
     else
    {
     i=0;
       GPIOC->ODR &= ~32768;
    }
  TIM2->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
}///*/
Так только мигает а то мили вспышки в темноте еле еле
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3749944#p3749944"]Я не знаю что делает IAR без наличия стартапа[/uquote]Подлянку он кидает. Вместо того чтобы ругнуться, он подставляет минимальную таблицу с правильно заполненным адресом стека и переходом на штатную точку входа. Без прерываний оно даже и работать будет. Но таблица векторов заканчивается где-то в районе SysTick_Handler, на что ТС и попался. Уж лучше было бы материться, чем тихую подлянку делать.

Добавлено after 3 minutes 14 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749951#p3749951"]Так только мигает а то мили вспышки в темноте еле еле[/uquote]Ты прикалываешься?

Код: Выделить всё

if(GPIOC->ODR&(1<<15)) GPIOC->BSRR = 1<<(15+16); else GPIOC->BSRR = 1<<15;
И да, в прерывании сначала очищаешь флаг, а потом мигаешь диодом. Сделай это привычкой, ещё не раз пригодится.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Сообщение TEPEM »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3749953#p3749953"][uquote="Z_h_e",url="/forum/viewtopic.php?p=3749944#p3749944"]Я не знаю что делает IAR без наличия стартапа[/uquote]Подлянку он кидает. Вместо того чтобы ругнуться, он подставляет минимальную таблицу с правильно заполненным адресом стека и переходом на штатную точку входа. Без прерываний оно даже и работать будет. Но таблица векторов заканчивается где-то в районе SysTick_Handler, на что ТС и попался. Уж лучше было бы материться, чем тихую подлянку делать.

Добавлено after 3 minutes 14 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3749951#p3749951"]Так только мигает а то мили вспышки в темноте еле еле[/uquote]Ты прикалываешься?

Код: Выделить всё

if(GPIOC->ODR&(1<<15)) GPIOC->BSRR = 1<<(15+16); else GPIOC->BSRR = 1<<15;
[/uquote]

Вот тот же эффект, между тиками около 2с, он загорается и тухнет мгновенно, потом уже пауза и по кругу. Только зажигая на два тика он горит столько же времени сколько и пауза

Добавлено after 2 minutes 5 seconds:
Я хочу сказать что прерывание вызывается так

-пауза 2с
-прерывание
-прерывание
-пауза 2с
-прерывание
-прерывание
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3749961#p3749961"]Вот тот же эффект[/uquote]Для начала очистку флага в начало обработчика прерывания перенеси. Скорее всего отпустит.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Сообщение TEPEM »

Ура! Теперь все работает, правда прерывание перенес и все наладилось. Спасибо большущее, очень выручили!!!
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Флаг прерывания, кстати, не так очищается. Но это на самостоятельную проработку RM. Обрати внимание, что биты в SR имеют статус "rc_w0". Флаги можно проще чистить.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

TEPEM писал(а):TIM2->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
Очень серьезная ошибка, которая может будет возникать, а может нет и крайне трудно будет ее найти, когда что-то заглючит.

Вот так надо флаг сбрасывать.

Код: Выделить всё

TIM2->SR = ~TIM_SR_UIF
Добавлено after 1 minute 56 seconds:
VladislavS писал(а):Флаг прерывания, кстати, не так очищается.
Я реально так как-то влетел. Самое интересное, на стадии изучения МК, нормально сбрасывал, потом перемкнуло.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3749967#p3749967"]правда прерывание перенес и все наладилось.[/uquote]Думаю, стоит пояснить что происходит. В микроконтроллере много разных шин, работающих на разных скоростях. Процессор дал команду на очистку бита в таймере и это потребует несколько тактов на реальную очистку. И если сразу же выйти из прерывания, то можно успеть схватить ещё не очищенный бит снова. Это если на пальцах.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Сообщение TEPEM »

[del]
Собутыльник Кота
Аватара пользователя
Сообщения: 2564
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[del]

Добавлено after 1 hour 12 minutes 14 seconds:
TEPEM, перекачай файл. Что-то я спросонья не то закинул.
Вложения
startup_iar_stm32f412zx.c
(10.43 КБ) 171 скачивание
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Сообщение TEPEM »

Проверил код этот на трех разных камнях, f103, f427, f412, моя строчка из интернета работает только на f427 - void TIM2_IRQHandler(void),
а ваша - extern "C" void TIM2_IRQHandler(void) везде, хотя первый вариант указан в подключаемых стандартных библиотеках, в чем шутка юмора?

Добавлено after 27 minutes 46 seconds:
Господа, я посоветоваться у Вас хотел. У меня тут платка с забавным дисплеем stm32f412g disco. Он 240х240, на st7789 подключен через параллельный 16 битный (кажется 8080 как я понимаю) в FSMC камня. Очень охота его запустить без всяких халов и прочей ереси кубовской. Но мои познания сишки скудны, из времен когда диал ап только появился, и мы качали инфу на книжных рынках, да и занимался я только openGL, а как вышла книга опенгл фор делфи - свалил с сишки, там как раз вышел визуал студио 7 на 6 дисках, не реальная цена на тот момент для меня была, а книги были по опен гл на с++ целиком на встроенных мастерах ВСнет. Ну да это лирика. И вот я думаю есть два пути, либо мучать примеры инициализации из сети, но я верно все их перебрал безрезультатно, даже по китайским блогам шастал. Либо стандартный пример из куба отчистить от ереси, я уже почти сделал это но застрял жестко. У меня пока с подвижки только в виде проекта с таймером, настроенными ногами на FSMC, и шим на подсветку. Что бы Вы посоветовали?
Ответить

Вернуться в «ARM»