Attiny204 Флаг прерывания не генерируется - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь написать (довольно) базовый бит программного обеспечения для Attiny204, который обрабатывает прерывания, когда уровень входа тактового генератора слишком высок.

Когда я запускаю код в имитаторе отладки в Atmel Studioи установите входной сигнал высокого уровня, флаг прерывания не генерируется.Прерывания запускаются, когда я вручную создаю флаг прерывания.

Я пробовал использовать другие выводы и даже другой порт.Я не могу заставить симулятор генерировать флаг прерывания.

Раньше я использовал AtMega328P в симуляторе с эквивалентным кодом, и он отлично работает.

ISR(PORTA_PORT_vect)
{
  //In this function we must:
  //1. Shift all data up
  shiftUp();

  //2. Get new 8th bit
  bit8 = VPORTA.IN & (1 << 1);

  //3. Set Data Output Pin to bit0
  if(bit0 == 0)
    VPORTA.OUT &= ~(1 << 3);
  else
    VPORTA.OUT |= (1 << 3);

  //4. Calculate new dimValue and dimMilliseconds
  calcDim();
  calcDelay();
}

int main(void)
{
  initVariables();
  /*
    Below this, we must set the Data Direction (DD) of each pin we assigned.
  */

  //Below, set the ISC of the Zero Cross Pin and the Clock Pin to allow interrupts
  PORTA_PIN0CTRL |= 0b00000001; //Zero Cross
  //PORTA_PIN1CTRL = 0b00000000; //Data In
  //PORTA_PIN2CTRL = 0b00000000; //Data Next
  //PORTA_PIN3CTRL = 0b00000000; //Triac Control

  PORTB_PIN0CTRL |= 0b00000001; //Clock

  //VPORTB.INTFLAGS |= 0b00000001;

  //Set Port direction.
  VPORTA.DIR = 0x30;
  VPORTB.DIR = 0x00;

  /*
    Below this, we must enable interrupts.
  */
  sei();
  /* Replace with your application code */
  while (1) 
  {

  }
}

1 Ответ

0 голосов
/ 11 июля 2019

Почему вы пишете VPORTA и VPORTB? Tiny204 не имеет этих регистров. Вы активируете прерывания на обоих ребрах для контакта 0 порта A (PIN0CTRL бит 0 установлен = BOTHEDGES) и не очищаете флаг прерывания в ISR порта A. Пожалуйста, посмотрите таблицу данных:

The interrupt request remains active until the interrupt flag is cleared. See the peripheral's INTFLAGSregister for details on how to clear interrupt flags.

...