|
LPC17xx NVIC - Как заблокировать все IRQ с приоритетом ниже нужного? |
|
|
|
 |
Ответов
|
Apr 26 2012, 04:29
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Из той же книжки: BASEPRI A register of up to 8 bits (depending on the bit width implemented for priority level). It defines the masking priority level. When this is set, it disables all interrupts of the same or lower level (larger priority value). Higher priority interrupts can still be allowed. If this is set to 0, the masking function is disabled (this is the default).
Насчет сдвигов, по-моему, sysel не прав, и ничего сдвигать не нужно (потому и работает на любом процессоре, независимо от количества битов в регистрах приоритета): As with other priority-level registers, the formatting of the BASEPRI register is affected by the number of implemented priority register widths. For example, if only 3 bits are imple- mented for priority-level registers, BASEPRI can be programmed as 0x00, 0x20, 0x40 … 0xC0, and 0xE0
Посмотрел core_cm3.h на функции работы с приоритетами прерываний. Действительно, приоритеты записываются со сдвигом. Посмотрел в core_cm3.c на функции работы с BASEPRI. Сдвигов не видно. Что это, если не косяк программистов? "Моя твоя не понимай?"
|
|
|
|
|
Apr 26 2012, 09:53
|

Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852

|
Цитата(ViKo @ Apr 26 2012, 08:29)  Насчет сдвигов, по-моему, sysel не прав, и ничего сдвигать не нужно (потому и работает на любом процессоре, независимо от количества битов в регистрах приоритета): As with other priority-level registers, the formatting of the BASEPRI register is affected by the number of implemented priority register widths. For example, if only 3 bits are imple- mented for priority-level registers, BASEPRI can be programmed as 0x00, 0x20, 0x40 … 0xC0, and 0xE0 Как раз в этом примете "0x00, 0x20, 0x40 … 0xC0, and 0xE0" и получаем 3 бита приоритета сдвинуты на 5 влево. т.е. значение "0x60" регистра BASEPRI будет соответствовать значению 0x03 в NVIC_SetPriority(). Посмотрите реализацию "NVIC_SetPriority()". Они там сдвигают аргумента на (8 - __NVIC_PRIO_BITS) влево. Из файла LPC17xx.hКод #define __NVIC_PRIO_BITS 5 /*!< Number of Bits used for Priority Levels */ Из файла core_cm3.hКод static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) { if(IRQn < 0) { SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ else { NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ } На самом деле в ядре Cortex-M3 всё логично получается, просто небольшая путанка в CMSIS-ке.
|
|
|
|
|
Apr 26 2012, 10:50
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(sysel @ Apr 26 2012, 12:53)  Как раз в этом примете "0x00, 0x20, 0x40 … 0xC0, and 0xE0" и получаем 3 бита приоритета сдвинуты на 5 влево. т.е. значение "0x60" регистра BASEPRI будет соответствовать значению 0x03 в NVIC_SetPriority(). ... На самом деле в ядре Cortex-M3 всё логично получается, просто небольшая путанка в CMSIS-ке. В том и путаница, что разные числа нужно задавать для задания приоритета и для маскирования. По мне логично было бы задавать приоритет 0x60 и маскировать приоритет 0x60 и ниже. Поддерживаю предыдущего выступающего - использовать только заголовочный файл с описаниями регистров и битов, остальное писать самостоятельно, поглядывая на библиотеку (в крайнем случае, при затыках).
|
|
|
|
Сообщений в этой теме
GetSmart LPC17xx NVIC - Как заблокировать все IRQ с приоритетом ниже нужного? Apr 25 2012, 17:07 _Артём_ Если не ошибаюсь, то нужно смотреть в описание Bas... Apr 25 2012, 17:49 ViKo __set_BASEPRI(0x60); // Disable interrupts with pr... Apr 25 2012, 17:57 GetSmart Это могут быть не те приоритеты. Программно раздав... Apr 25 2012, 18:54 aaarrr Цитата(GetSmart @ Apr 25 2012, 22:54) Это... Apr 25 2012, 19:06 sysel Цитата(GetSmart @ Apr 25 2012, 22:54) Это... Apr 25 2012, 19:13 GetSmart Ладно, допустим BASEPRI то, что мне нужно. И устан... Apr 25 2012, 19:51 aaarrr Цитата(GetSmart @ Apr 25 2012, 23:51) А о... Apr 25 2012, 20:07 KRS есть еще полезный алиас
BASEPRI_MAX
запись в него ... Apr 25 2012, 20:39  KRS Цитата(sysel @ Apr 26 2012, 13:53) На сам... Apr 26 2012, 10:48 GetSmart А для CM0 есть механизм аналогичного ограничения п... Jul 11 2013, 09:29 _Артём_ Цитата(GetSmart @ Jul 11 2013, 12:29) А д... Jul 11 2013, 10:30  GetSmart Цитата(_Артём_ @ Jul 11 2013, 16:30) Нет ... Jul 11 2013, 11:42 GetSmart Мало того, в доке на LPC11xx (CM0) LPC81x (CM0+) о... Jul 11 2013, 15:00 _Артём_ Цитата(GetSmart @ Jul 11 2013, 18:00) ... Jul 11 2013, 16:45  GetSmart Цитата(_Артём_ @ Jul 11 2013, 22:45) Прер... Jul 11 2013, 17:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|