Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC1768 - запрет всех прерываний?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
LSV
Нужно запретить все прерывания в lpc1768.

В User Manual на 17xx в Главе 34:

1. п.4.2.10.1 написано, что можно воспользоваться:
void __disable_irq(void)

Keil v.4.11 выдаёт ошибку.

2. п.4.2.1 написано:

" The CMSIS mapping of the Cortex-M3 NVIC registers
To improve software efficiency, the CMSIS simplifies the NVIC register presentation. In the
CMSIS:
• the Set-enable, Clear-enable, Set-pending, Clear-pending and Active Bit registers
map to arrays of 32-bit integers, so that:
– the array ISER[0] to ISER[3] corresponds to the registers ISER0 - ISER3"

Как в ISER[0] и ISER[2] записать 0xFFFFFFFF?

3. А требуется всего лишь в регистры ISER0 и ISER1 записать все 1.
В заголовочном файле lpc17xx.h, который идёт с Keil вообще не нашёл таких регистров (и многих других).

Это недоработка Keil (я так предпологал, что в нём должны быть определены все регистры)?

Если "Да", то выложите пожалуйста пример полного, рабочего файла - lpc17xx.h и startup_LPC17xx.s (хорошо бы в стиле как было для LPC2000-ых
или он не будет работать из-за новой версии CMSIS?)

(или хотя бы пример как надо доработать хидер, чтобы можно было написать так:

LPC_ITERRUPT->ISER0 = 0xFFFFFFFF

----------------------------------------------

ЗЫ. В LPC2000-ых файлы хидера и стартапа были куда понятнее
zltigo
QUOTE (LSV @ Jul 6 2010, 22:09) *
void __disable_irq(void)

Должно быть что-то подобное в intrinsic - ищите, а вообще просто посмотрите команду cpsid
sonycman
Цитата(LSV @ Jul 6 2010, 23:09) *
Нужно запретить все прерывания в lpc1768.

В User Manual на 17xx в Главе 34:

1. п.4.2.10.1 написано, что можно воспользоваться:
void __disable_irq(void)

Keil v.4.11 выдаёт ошибку.

Никакой ошибки быть не должно:
Код
__disable_irq();    //запрет прерываний
__enable_irq();    //разрешение прерываний
LSV
Цитата(sonycman @ Jul 7 2010, 01:04) *
Никакой ошибки быть не должно:
Код
__disable_irq();    //запрет прерываний
__enable_irq();    //разрешение прерываний


Да так всё работает: __disable_irq(); //запрет прерываний

Почему Keil не принимает:
void __disable_irq(void)

-------------------------------------
Я так понимаю, что добавив в lpc17xx.h свою строку вида
#define ICER0 (*((volatile unsigned long *) 0xE000E180))

А потом в программе написать ICER0 = 0xFFFFFFFF - не получиться из-за новой версии CMSIS?

-------------------------------------

А как тогда обращаться к регистрам, которые не определены в lpc17xx.h?

Например, к ICER0, чтобы записать в него некоторое число.

-------------------------------------
Dog Pawlowa
Цитата(LSV @ Jul 7 2010, 07:39) *
Да так всё работает: __disable_irq(); //запрет прерываний

Почему Keil не принимает: void __disable_irq(void)

Не понял, Вы хотите объявить уже существующую в библиотеках компилятора функцию?
Компилятор что говорит?
LSV
А как доопредилить регистры, которые отсутствуют в хидере?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.