Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2019, 23:33

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 114 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 07 апр 2018, 21:36 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
заблудился.
в сеггере делаю для нордика. пытаюсь отловить момент, где оно в начале зажигает светодиод и светит. ставлю брейкпоинты - а мне в ответ пишут, мол, нету кода для этой строчки. подозреваю, что нужно где-то добавить дебаг-конфигурацию (хз каким образом и куда она у меня делась) - но не совсем понятно, как (да и вообще, правильно ли я это понял)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 07 апр 2018, 21:41 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
например, сейчас у меня такая картинка:
Вложение:
Снимок экрана 2018-04-07 в 19.40.17.png
Снимок экрана 2018-04-07 в 19.40.17.png [ 51.32 Кб | Просмотров: 690 ]

я туда могу добавить новую конфигурацию, можно будет поставить чекбоксы напроти internal или common (хз что это значит и зачем), но толку-то? где и что добавлять еще - не совсем понятно. подозреваю, что в файле emProject?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 07 апр 2018, 22:44 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
разобрался. поставил
gcc_debugging_level="Level 3"
было None.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 25 апр 2019, 20:51 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
быстрый вопрос: почему при установке брейкпоинта и запуске отладки я вижу "no code for breakpoint" и, соответственно, в прерывание не вхожу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 25 апр 2019, 22:35 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
просто оно нигде не вызывается - потому и не компилируется. а когда должен быть вызов прерывания - идет hard fault.
теперь вопрос: где прописываются сопоставления векторов для USART1_IRQHandler и ADC1_2_IRQHandler? можно ли как-то прописать обработчик как в avr: типа isr(ADC1_2_IRQn) ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 25 апр 2019, 23:34 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
нашел .map файл, ожидаемо не увидел там ничего про свой обработчик.
кто бы объяснил, из чего формируется map файл и где и как добавить обработчик, чтобы все увиделось. подозреваю, косяк в Cortex_M_Startup.s, но как оно устроено - вообще не понятно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 02:19 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
значит так.
нашел я файл Cortex_M_Startup.s, который, судя по всему, идет с сеггеровским проектом.
в нем есть такие строчки:
Код:
_vectors:
  .word __stack_end__
  .word reset_handler
ISR_HANDLER NMI_Handler
ISR_HANDLER HardFault_Handler
//ISR_HANDLER ADC1_2_IRQHandler
//ISR_HANDLER USART1_IRQHandler
ISR_HANDLER MemManage_Handler
ISR_HANDLER BusFault_Handler

(закомментаренное - это я добавил)
Так вот, в закомментаренном виде он обработчик пропускает на стадии компиляции (No code for breakpoint)
А если убираю комментарий, то вроде как какой-то код создается (но в обработчики один фиг не попадаю)

имеет ли значение, в каком именно месте я добавляю эти строчки?




+ еще не ясно с этим spl:
вот как было исходно (без макроса):
NVIC->ISER[0] |= NVIC_ISER_SETENA_18;
вот как предлагают для якобы удобочитаемости, макросом:
NVIC_EnableIRQ(ADC1_2_IRQn);
макрос этот расшифровывается в core_cm3.h как так:
__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */
}

получается то же самое, но вместо "|=" используется "=" - это как раз из таких вещей глюки потом и растут?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 03:01 
Старожил
Аватара пользователя

Зарегистрирован: 18 апр 2017, 03:01
Сообщения: 1128
goreprogrammist писал(а):
получается то же самое, но вместо "|=" используется "=" - это как раз из таких вещей глюки потом и растут?
Какие глюки в данном случае (когда "=") могут быть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 03:16 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
а зачем было "|="?
вообще наверное зависит от того, что там было в NVIC->ISER[0]
если другие значимые биты - то после "=" их там не станет?

короче, отвечая на свои вопросы: в .s файле в нужных местах заменил:
ISR_HANDLER ExternalISR17
ISR_HANDLER ADC1_2_IRQn_Handler
и добавил
ISR_HANDLER ExternalISR35
ISR_HANDLER ExternalISR36
ISR_HANDLER USART1_IRQn_Handler
#endif

после этого прерывание usart заработало! а вот ацп по-прежнему работать не хочет - тупо не попадаю в прерывание. хз как производить отладку.
камень stm32f103c8t6
настройка adc:
Код:
void adc_setup(){
//разрешаем тактирование порта А
   RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
        //настраиваем вывод для работы АЦП в режим аналогового входа
   GPIOA->CRL &= ~GPIO_CRL_CNF1;
   //так как тактовая частота АЦП не должна превышать 14MHz
   RCC->CFGR |= RCC_CFGR_ADCPRE_DIV8;
   //разрешаем тактирование АЦП
   RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
        //в комментах подсказали, что в 17 ревизии указано, что перед калибровкоц АЦП надо включить
        ADC1->CR2 |=  ADC_CR2_ADON;
        //запускаем калибровку и ждем пока завершится,  в симуляторе это не работает, в железе делать обязательно
        ADC1->CR2 |= ADC_CR2_CAL;
         while (ADC1->CR2 & ADC_CR2_CAL)
   //разрешаем прерывание от АЦП
   NVIC->ISER[0] = NVIC_ISER_SETENA_18;
   //для первого канала между выборками 7.5 цикла
   ADC1->SMPR2 = ADC_SMPR2_SMP1_0;
   //разрешаем прерывания по окончанию преобразования
   ADC1->CR1 = ADC_CR1_EOCIE;
   //разрешаем запуск от SWSTAR, разрешаем работу АЦП, разрешаем запуск внешним сигналам, непрерывное преобразования
   ADC1->CR2 = ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG | ADC_CR2_CONT ;
   //длина последовательности равна 1, первый канал
   ADC1->SQR1 = 0x00000000;
   ADC1->SQR2 = 0x00000000;
   ADC1->SQR3 = 0x00000001;
   //запускаем АЦП
   ADC1->CR2 |= ADC_CR2_SWSTART;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 03:23 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
goreprogrammist писал(а):
Код:
while (ADC1->CR2 & ADC_CR2_CAL)
//разрешаем прерывание от АЦП
NVIC->ISER[0] = NVIC_ISER_SETENA_18;

Типичная ошибка для С, в С++ принято пустые циклы записывать так
Код:
while (ADC1->CR2 & ADC_CR2_CAL) {}

именно потому что ";" в конце легко пропустить, как в данном случае.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 03:29 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
так там должно быть ; или не должно быть? добавил скобочки и ; но ничего не поменялось. да и зацикливаний не было.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 03:32 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
goreprogrammist писал(а):
так там должно быть ; или не должно быть?

Должен быть пустой цикл, а вместо этого зациклило следующую строку разрешающую прерывания. В данном случае это может быть не критично, но все равно это ошибка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 03:35 
Старожил
Аватара пользователя

Зарегистрирован: 18 апр 2017, 03:01
Сообщения: 1128
goreprogrammist писал(а):
а зачем было "|="?
просто по привычке кто-то написал, не думая. Такой косяк даже в каких-то сниппетах (или как их там называют — примеры кода от производителя) был (было "|=" вместо просто "="). Но в следующих версиях исправили.
goreprogrammist писал(а):
вообще наверное зависит от того, что там было в NVIC->ISER[0]
если другие значимые биты - то после "=" их там не станет?
Вообще — это смотря какой регистр. С этим регистром — если глянуть PM0056, то там про ISER написано:
Цитата:
Bits 31:0 SETENA[31:0]: Interrupt set-enable bits.
Write:
0: No effect
1: Enable interrupt
Т.е. как раз при "|=" могут быть глюки, а не при "=".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Segger Embedded Studio (где найти Guide for Dummies?)
СообщениеДобавлено: 26 апр 2019, 03:50 
Старожил

Зарегистрирован: 19 мар 2011, 05:05
Сообщения: 2636
окей, спасибо вам обоим, с этим прояснили.

только один фиг, в прерывание не попадаю.

сделал без прерывания, по примеру отсюда:
http://avr-start.ru/?p=2666

только у меня, видимо, версия библиотеки другая оказалась. в структуре не поддерживает resolution, отсутствует ADC_ExternalTrigConvEdge_None (есть без Edge), отсутствует ADC_SoftwareStartConv (есть ADC_SoftwareStartConvCmd), плюс эта же команда требует не одного, а сразу двух аргументов (добавил ENABLE)
вроде бы заработало. хорошо бы переключить в восьмибитный режим еще. продолжу завтра развлекаться.
почему не заработало прерывание - для меня по-прежнему загадка.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 114 ]  На страницу Пред.  1, 2, 3, 4, 5

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB