реклама на сайте
подробности

 
 
> Прерывания в Keil, научите как правильно
SanyaKID
сообщение Jul 16 2007, 10:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 13-09-06
Пользователь №: 20 359



Цитата(zltigo @ Jul 11 2007, 19:09) *
Если-бы Вы были внимательнее, то поняли, что обсуждается не отсутствие (который на самом деле присутствеет, как уже писалось, во всех ARM и документрован) отдельного банка регистров, а то, что RealView НЕ УМЕЕТ ИМ ПОЛЬЗОВАТЬСЯ.


Да, пользоваться он ими действительно не умеет. В итоге, у меня получился вариант, когда в Си функция прерывания описана как IRQ, но настроена как FIQ и в стартапе FIQ Handler скормлен адрес этого самого обработчика, помеченного как FIQ. Вызываться обработчик должен немного быстрее, но ,вообще говоря, то, что компилятор не использует специальные регистры этого режима, сводит почти на нет все преимущество FIQ
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smk
сообщение Mar 5 2009, 09:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Пытаюсь разобраться с этими прерываниями, но ни одно не работает. В качастве примера использую прерывания по совпадению MR3 TIMER0 LPC2103. Книга по LPC2000 чет не очень помогает. Собственно вопрос - что нужно чтоб выполнился обработчик прерываний IRQ? FIQ? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 5 2009, 15:06
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Не совсем кусок... а полностью. Извините, если много.
CODE

#include <LPC21xx.H> /* LPC21xx definitions */
//#include <stdio.h> /* standard I/O .h-file */
void PLL_Initialization (void);
void Peripherals_Initialization (void);
void Interupt_Init (void);
void TIMER0_Init (void);
void T0isr(void) __irq;
void __swi(0xFF) enable_isr (void);

volatile unsigned int a;
volatile unsigned int value;

void PLL_Initialization (void)
{
//Настройка тактирования
PLLCFG = 0x23; //Fosc=14.7456; M=4; P=2
PLLCON = 0x1; //включить ФАПЧ
PLLFEED= 0xAA;
PLLFEED= 0x55;
while(!(PLLSTAT & 0x400)){} //Ждем стабилизации ФАПЧ
PLLCON=0x3; //Разрешаем тактирование ЦПУ после стабилизации ФАПЧ
PLLFEED=0xAA;
PLLFEED=0x55;
}
void Peripherals_Initialization (void)
{
//Настройка тактирования периферии
VPBDIV = 0x2;
//Настройка блока ускорения обращения к памяти
MAMTIM = 0x3;
MAMCR = 0x2;
//Конфигурация I/O выводов
PINSEL0 = 0x0;
PINSEL1 = 0x0;
IODIR0 = 0xFFFFFFFF; //все выводы - выходы
//Часы реального времени
CCR=0x11; //Включить, тактировать от часового кварца
}

void Interupt_Init (void)
{
//VICIntSelect = 0; //все прерывания IRQ
//VICIntEnable |= 0x10;//разрешить в VIC прерывание от TIMER0
//VICIntEnable = 0x10;
//VICVectCntl0= 0x24; /* Address of the ISR */
//VICVectAddr0=(unsigned long)T0isr;
VICVectAddr4=(unsigned)T0isr;
VICVectCntl0= 0x00000024;
VICIntEnable = 0x00000010;
//VICIntSelect |= 0x10;//подключить канал VIC (TIMER0) к линии FIQ
}


void TIMER0_Init (void)
{
//T0IR = 0; //Interrupt flag for match channel 3.
T0TCR = 1;//Включить (2 - сбросить TIMER0)
//T0CTCR = 0;//таймер, переключает таймер или счетчик, вход счетчика и тип перепада для счета
//T0TC
T0PR = 100000;//значение, которое достигается предделителем для сброса и проходит импульс на таймер
T0PC = 5000;
T0MCR = 0x03;//прерывание при совпадении MR0 (и сброс)
//T0CCR
//T0EMR
//T0MR3=100;
//T0MR2=100;
//T0MR1=100;
T0MR0=2;
}


void T0isr(void) __irq
{
value++;
//T0IR |= 0x00001000;
T0IR |= 0x00000001;
VICVectAddr = 0x00000000;
//VICSoftIntClear = 0x10;
}



int main (void)
{
PLL_Initialization();
Peripherals_Initialization ();
Interupt_Init();
TIMER0_Init();
enable_isr ();

while(1)
{
if(a<50){a++;}
else {a=0;}
if(a<25)
{IOSET0=0xFF00FF00;}
if(a>=25)
{IOCLR0=0xFF00FF00;}
if(value>1000) {value=0;}
// VICSoftInt = 0x10;
}//while
}//main


Сообщение отредактировал zltigo - Mar 5 2009, 15:20
Причина редактирования: Надо пользоватся тэгами для оформления кода


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 5 2009, 15:19
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(smk @ Mar 5 2009, 18:06) *
Не совсем кусок... а полностью. Извините, если много.

Moderator:
Пожалуйста, пользуйтесь тэгами для оформления кода.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 03:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016