Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Прерывания на SAM4

Непрочитано 26.12.2015, 21:35  
Modulation
Прохожий
 
Регистрация: 26.12.2015
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Modulation на пути к лучшему
По умолчанию Прерывания на SAM4

Доброго времени суток.
Заимел тут случаем камень ATSAM4S16C и начал знакомиться с ARM архитектурой. Знакомлюсь в Keil uVision версии 4.5.х или 4.3.х точно не помню.

Светодиодиком моргать научился, теперь пытаюсь освоить прерывания. Никак не могу взять в толк, каким образом нужно писать название функции обработчика прерывания и где их взять. Прерывание пытаюсь сделать по фронту на пинах 0 и 1 порта B.

Вот код программы

Код:
#include ‹SAM4S16C.h›
#include "system_SAM4S.h"

#define MASK_WRITE_PIOA 0xFFFFF9FF
#define MASK_WRITE_PIOB 0xFFFFF00C //dva poslednih baita nugny dlya zadaniya regimov
#define MASK_WRITE_PIOC 0xFFFFFFFF
#define MASK_READ_clk 0x00000001
#define MASK_READ_command 0x00000002


volatile unsigned long SysTickCnt;         /* SysTick Counter                 */
unsigned char command=0, clk=0, i=0;
/*----------------------------------------------------------------------------
  SysTick Handler
 *----------------------------------------------------------------------------*/
void SysTick_Handler (void) {              /* SysTick Interrupt Handler (1ms) */
  SysTickCnt++;
}

/*----------------------------------------------------------------------------
  Delay Function
 *----------------------------------------------------------------------------*/
void Delay (unsigned long tick) {          /* Delay Function                  */
  unsigned long systickcnt;

  systickcnt = SysTickCnt;
  while ((SysTickCnt - systickcnt) ‹ tick);
}

__irq void pfnPIOB_Handler(void)
{
// 	Delay(5);
// 	command=0x02; //( (command ‹‹ 1) | ( (PIO_PDSR_P1 & PIOB-›PIO_PDSR) ›› 1 ) );
// 	i++;
	PIOC-›PIO_SODR=1‹‹1;
}

void PIO_init(void)
{

	PIOA-›PIO_WPMR = ((1‹‹9)|(1‹‹10)); //Write protection

	PIOB-›PIO_WPMR = ((1‹‹4)|(1‹‹5)|(1‹‹6)|(1‹‹7)|(1‹‹8)|(1‹‹9)|(1‹‹10)|(1‹‹11)); //Write protection

	PIOB-›PIO_ODR = ((1‹‹0)|(1‹‹1)); //Output dis
	PIOB-›PIO_MDER = ((1‹‹0)|(1‹‹1));//Multi-drive dis
	PIOB-›PIO_IFER = ((1‹‹0)|(1‹‹1)); //Input filter enable 
	PIOB-›PIO_PUER = ((1‹‹0)|(1‹‹1)); //Pull-up resistor
	PIOB-›PIO_SODR = ((1‹‹0)|(1‹‹1));
}

void LED_init()
{

PIOA-›PIO_PER=((1‹‹7)|(1‹‹26)|(1‹‹11)|(1‹‹8)|(1‹‹12)); //PIO Enable, direct select the control pin
PIOA-›PIO_OER=((1‹‹7)|(1‹‹26)|(1‹‹11)|(1‹‹8)|(1‹‹12)); // Output enable
PIOA-›PIO_PUER=((1‹‹7)|(1‹‹26)|(1‹‹11)|(1‹‹8)|(1‹‹12)); // Pull-up resistor enable
PIOA-›PIO_OWER=((1‹‹7)|(1‹‹26)|(1‹‹11)|(1‹‹8)|(1‹‹12)); // Output write enable	
	
PIOC-›PIO_PER=((1‹‹3)|(1‹‹2)|(1‹‹1)); //PIO Enable, direct select the control pin
PIOC-›PIO_OER=((1‹‹3)|(1‹‹2)|(1‹‹1)); // Output enable
PIOC-›PIO_PUER=((1‹‹3)|(1‹‹2)|(1‹‹1)); // Pull-up resistor enable
PIOC-›PIO_OWER=((1‹‹3)|(1‹‹2)|(1‹‹1)); // Output write enable		
	
}	

int main(void)
{

SystemCoreClockUpdate();				 		     /* Get Core Clock Frequency */
SysTick_Config(SystemCoreClock/1000);    /* Generate interrupt each 1 ms    */	

PIO_init();
LED_init();
	
__enable_irq();
	
PIOB-›PIO_IER=PIO_IER_P0|PIO_IER_P1; // PIO interrupt mask


PIOA-›PIO_PER=(1‹‹25); //PIO Enable, direct select the control pin
PIOA-›PIO_OER=(1‹‹25); // Output enable
//PIOA-›PIO_PUER=(1‹‹25); // Pull-up resistor enable
PIOA-›PIO_OWER=(1‹‹25); // Output write enable
PIOA-›PIO_MDDR=(1‹‹25);

PIOC-›PIO_PER=((1‹‹5)|(1‹‹6)); //PIO Enable, direct select the control pin
PIOC-›PIO_OER=((1‹‹5)|(1‹‹6)); // Output enable
//PIOC-›PIO_PUER=((1‹‹5)|(1‹‹6)); // Pull-up resistor enable
PIOC-›PIO_OWER=((1‹‹5)|(1‹‹6)); // Output write enable	

PIOC-›PIO_SODR=1‹‹1;
PIOC-›PIO_SODR=1‹‹2;
Delay(1000);
PIOC-›PIO_CODR=0xFFFFFFFF;	
	
for(;;)
	{
		
	PIOC-›PIO_CODR=1‹‹5;
	PIOA-›PIO_SODR=1‹‹25;
	Delay(100);	

	PIOC-›PIO_CODR=1‹‹5;			
	PIOA-›PIO_CODR=1‹‹25;
	Delay(100);

		if (PIOB-›PIO_ISR)
		{
			PIOC-›PIO_SODR=1‹‹2;
			Delay(1000);
			PIOC-›PIO_CODR=0xFFFFFFFF;	
		}
		
	}
		
}
Реклама:
Modulation вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выходе из прерывания pifa AVR 0 28.05.2013 01:30
AT89C5131 прием и передача данных по USB rihkov AVR 14 15.11.2012 08:16
PIC16 TMR0 и TMR2 Slava-martyn Микроконтроллеры, АЦП, память и т.д 10 06.12.2011 01:58
Прерывания PIC milssky Микроконтроллеры, АЦП, память и т.д 12 10.10.2010 13:31
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17


Часовой пояс GMT +4, время: 07:30.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.