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

|
Код // function prototypes: void __swi(0xFE) disable_isr (void); void __swi(0xFF) enable_isr (void);
/* * Sample 'main' Function */
void main (void) {
func_a(); // func_a executes with standard interrupt setting disable_isr (); // disable interrupts for the following function func_b(); // func_b executes with disable interrupts enable_isr (); // interrupts are now enabled again
} в этом дело?
Причина редактирования: Оформление цитаты исодника.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Mar 5 2009, 15:06
|
Гуру
     
Группа: Свой
Сообщений: 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
Причина редактирования: Надо пользоватся тэгами для оформления кода
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|