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

 
 
> Никак не пойму прерывания...
Shaienn
сообщение Sep 9 2009, 05:00
Сообщение #1


Частый гость
**

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



Добрый день. Перечитал кучу всего, но так и не могу добиться результата.

Задача такая:
Запустить PIT, досчитать до чего-нибудь, вылететь в прерывание по флагу PITS.

Код
#include <AT91SAM7S256.H>                       /* AT91SAMT7S64 definitions  */
#include <lib_AT91SAM7S256.h>
/*
* Main Program
*/
int i;

__irq void isrSYS(void)
{
         unsigned int status = AT91C_BASE_SYS->PITC_PIVR;
         if (i==1)
         {
         AT91C_BASE_PIOA->PIO_SODR = i;
         i=0;
         }
         else
         {
         AT91C_BASE_PIOA->PIO_SODR = i;
         i=1;
         }
         AT91C_BASE_AIC->AIC_EOICR = status;
}

int main (void) {
  // Enable the Clock of the PIO
    AT91C_BASE_PIOA->PIO_PER = (1 << AT91C_PIO_PA0);
    AT91C_BASE_PIOA->PIO_OER = 0x0000ffff;
    AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA)| (1 << AT91C_ID_SYS);
    AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN|AT91C_PITC_PITIEN|0x000007;
      AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (unsigned int)isrSYS;
       AT91C_BASE_AIC->AIC_SMR[AT91C_ID_SYS] =  6;
    AT91C_BASE_AIC->AIC_IECR = (1UL << AT91C_ID_SYS);
    AT91C_BASE_AIC->AIC_IECR |= 2;
    AT91C_BASE_AIC->AIC_IDCR &= ~2;

  // Loop forever
  for (;;)
  
  {
  j++;
  }


}


Стартап - стандартный из keil 3.80
Прикрепленный файл  SAM7.txt ( 14.95 килобайт ) Кол-во скачиваний: 608


Помогите разобраться, вроде бы и все понятно, а затык sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Sep 9 2009, 11:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Shaienn @ Sep 9 2009, 09:00) *
Задача такая:
Запустить PIT, досчитать до чего-нибудь, вылететь в прерывание по флагу PITS.

Код в прерывании у Вас должен выставить в "1" PIOA.0 на втором прерывании - этого не происходит?

Мелкие замечания:
Код
    AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA)| (1 << AT91C_ID_SYS);

Клоки SYS включать не надо, такого бита попросту нет.

Код
    AT91C_BASE_AIC->AIC_IECR |= 2;
    AT91C_BASE_AIC->AIC_IDCR &= ~2;

Так с write-only регистрами работать нельзя.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 02:33
Рейтинг@Mail.ru


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