
Добавил:
lelik
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные МПр / код / lab2 / Interrupts / main
.c/*-------------------------------------------------------------------
Работа с двумя прерываниями.
При нажатии кнопки INT0 (линия Р2.10) светодиоды должны поменять направление зажигания.
Скорость перемещен задается в прерывании от таймера
--------------------------------------------------------------------*/
#include "LPC17xx.h"
#include "leds.h" //библиотека для работы со светодиодами
#include "timer.h" //библиотека для работы с таймерным прерыванием
#define EINT0 0x00000001 //присваиваем EINT0 значение 0x00000001
#define EINT0_EDGE 0x00000001
char flag=1; //переменная- флаг, который обрабатывается во внешнем прерывании
int led=0;
//на ноге Р2.10 должно возникнуть прерывание
void sleep (int ticks)
{ //функция формирующая временную задержку
int i;
for(i=0; i<ticks; i++);
}
void EINT0_IRQHandler (void) //функция обработки прерыавания, имя функции из startup_LPC17xx.s
{
LPC_SC->EXTINT = EINT0; //сброс флага прерывания, после входа в прерывание
flag=(flag+0x1)&0x01; //обработка переменной флага
}
unsigned long int EINTInit( void ) //функция инициализации прерывания от внешнего прерывания EINT0
{
LPC_PINCON->PINSEL4=0x00100000; //т.к. контролирует линии ввода-вывода P2 [15:0]
//0b01 для линии P2.10- режим EINT0 остальные ноги в режиме GPIO
LPC_GPIOINT->IO2IntEnR= 0x00000400; //для линии P2.10 прерывание по фронту
LPC_SC->EXTMODE = EINT0_EDGE; // INT0 граничный тригер
LPC_SC->EXTPOLAR = 0; // INT0 - убывающий фронт по умолчанию
NVIC_EnableIRQ(EINT0_IRQn); //разрешаем внешнее прерывание в NVIC
return(1);
}
int main (void)
{
SystemInit(); //инициализация МК
EINTInit(); //инициализация внешних прерываний
LED_init(); //настройка портов на вывод
timer0_init(); //настройка работы таймера
while (1) //рабочий цикл программы
{
}
}
Соседние файлы в папке Interrupts