jenya7 0 13 июня, 2019 Опубликовано 13 июня, 2019 (изменено) · Жалоба Глядя на таблицу прерываний DCD TIM8_BRK_IRQHandler ; TIM8 Break DCD TIM8_UP_IRQHandler ; TIM8 Update DCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare DCD ADC3_IRQHandler ; ADC3 DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SPI3_IRQHandler ; SPI3 DCD UART4_IRQHandler ; UART4 замечаю что есть неиспользованные - DCD 0 ; Reserved Это значит их можно использовать в своих целях? Изменено 13 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба Что значит "в своих целях"? Они физически есть в таблице векторов используемого процессора? Это может быть младшая модель, в которой эти прерывания просто отсутствуют Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба Возможно да, но скорее всего - нет: в "кремнии" тупо не реализовано. Отдадчик ведь есть - попробуйте и нам доложите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба Как именно и зачем использовать асинхронное прерывание, когда есть синхронное исключение SVCall для подобных нужд? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2019 Опубликовано 13 июня, 2019 (изменено) · Жалоба 1 hour ago, adnega said: Как именно и зачем использовать асинхронное прерывание, когда есть синхронное исключение SVCall для подобных нужд? В смысле? Я хочу создать свое прерывание, которое будет вызываться по какому нибудь ивенту. то есть вместо DCD 0 ; Reserved - DCD My_IRQHandler. ну и потом по аналогии PUBWEAK EXTI0_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) EXTI0_IRQHandler B EXTI0_IRQHandler прописать PUBWEAK My_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) My_IRQHandler B My_IRQHandler чтоб привязать обработчик к таблице. единственно что я не понимаю - как привязать ивент к прерыванию. 1 hour ago, Obam said: Возможно да, но скорее всего - нет: в "кремнии" тупо не реализовано. Отдадчик ведь есть - попробуйте и нам доложите. 1 hour ago, toweroff said: Что значит "в своих целях"? Они физически есть в таблице векторов используемого процессора? Это может быть младшая модель, в которой эти прерывания просто отсутствуют физически как раз он определен - DCD ведь выделяет место. Изменено 13 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба 2 минуты назад, jenya7 сказал: единственно что я не понимаю - как привязать ивент к прерыванию. Что такое "ивент"? Можно пример. Прерывание можно спровоцировать программно, установив соответствующий pending-бит в регистре NVIC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба 1 hour ago, adnega said: Что такое "ивент"? Можно пример. Прерывание можно спровоцировать программно, установив соответствующий pending-бит в регистре NVIC. ну это как раз то что нужно. то есть я могу поднять соответствующий бит в NVIC? они по моему привязаны к индексам в таблице прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба Спровоцировать программное прерывание можно при условии, что оно есть по этому вектору. Сомневаюсь, что по "пустышке" (DCD x) оно есть физически. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2019 Опубликовано 13 июня, 2019 (изменено) · Жалоба 1 hour ago, Arlleex said: Спровоцировать программное прерывание можно при условии, что оно есть по этому вектору. Сомневаюсь, что по "пустышке" (DCD x) оно есть физически. ну вот возьмем кусок таблицы (это другой проект, не STM32 а Kinetis) #define VECTOR_061 UART0_RX_TX_IRQHandler // 0x0000_00F4 45 UART0 ------------------------------------------------------------------------------ ----------------------------------------------------------------------------- #define VECTOR_114 default_isr // 0x0000_01C8 98 #define VECTOR_115 default_isr // 0x0000_01CC 99 #define VECTOR_116 default_isr // 0x0000_01D0 100 #define VECTOR_117 default_isr // 0x0000_01D4 101 #define VECTOR_118 default_isr // 0x0000_01D8 102 #define VECTOR_119 default_isr // 0x0000_01DC 103 а сама таблица физически выделена const VECTOR vector_entry __vector_table[] = { VECTOR_000, /* Initial SP */ VECTOR_001, /* Initial PC */ VECTOR_002, VECTOR_003, ---------- ---------- VECTOR_253, VECTOR_254, VECTOR_255, }; я инициализирую - enable_irq(45); - и по индексу 45 - у меня находиться UART0_RX_TX_IRQHandler. идексы 98 - 103 - пустые. но прописав enable_irq(103); - я смогу пользоваться #define VECTOR_119 default_isr // 0x0000_01DC 103 или я что то упускаю? Изменено 13 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба 3 минуты назад, jenya7 сказал: я смогу пользоваться #define VECTOR_119 default_isr // 0x0000_01DC 103 или я что то упускаю? Вместо default_isr в таблицу нужно вписать свой обработчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба 1 hour ago, adnega said: Вместо default_isr в таблицу нужно вписать свой обработчик. это понятно. но то же самое можно сделать в STM32, в первом примере? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба Конечно, можно. Вопрос зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба 31 минуту назад, jenya7 сказал: ну вот возьмем кусок таблицы (это другой проект, не STM32 а Kinetis)... Еще раз: если аппаратура МК имеет физическую реализацию вектора прерывания, то Вы вправе делать с этим вектором что угодно и описывать его как заблагорассудится. Если вектора нет - Вы должны описать его как пустое пространство (например, с помощью директивы DCD 0) и не иметь попыток доступа к этому вектору любым способом, потому что это вызовет, скорее всего, какой-нибудь fault, эскалирующий до HF при возможности. Резюме: Вы можете сформировать программный запрос на любое прерывание, физически выведенное на NVIC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2019 Опубликовано 13 июня, 2019 (изменено) · Жалоба 1 hour ago, adnega said: Конечно, можно. Вопрос зачем? я еще не совсем определился с идеей... хочу выходить из долгого цикла по условию, что то сделать и продолжить дальше. 1 hour ago, Arlleex said: Резюме: Вы можете сформировать программный запрос на любое прерывание, физически выведенное на NVIC. тогда другой вопрос. скажем я иду в регистр УАРТа, поднимаю там флаг - активизировать прерывание по принятому чару. как этот флаг физически привызывается к таблице прерываний? он (флаг) не знает где находиться таблица. Изменено 13 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2019 Опубликовано 13 июня, 2019 · Жалоба 18 минут назад, jenya7 сказал: я еще не совсем определился с идеей... хочу выходить из долгого цикла по условию, что то сделать и продолжить дальше. А обычная функция чем не подходит? Если нужны полноценные задачи, то нужно применять RTOS. 18 минут назад, jenya7 сказал: тогда другой вопрос. скажем я иду в регистр УАРТа, поднимаю там флаг - активизировать прерывание по принятому чару. как этот флаг физически привызывается к таблице прерываний? он (флаг) не знает где находиться таблица. Флаг прерывания от периферии взводит связанный с ним pending-бит, а далее NVIC все делает сам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться