Dúvida sobre Interrupção externa

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Dúvida sobre Interrupção externa

Mensagempor chipselect » 12 Jun 2013 09:28

Caros colegas, tenho uma dúvida sobre interrupção externa no Cortex-M3. Eu configurei a EXTI9_5 para a porta B, e funciona normal na PORTB.

Entretanto, quando configuro a PORTA para entrada, para usar com outra coisa, a PORTA também gera as benditas interrupções. Tem alguma forma de deixar as EXTI somente na PORTB? Eu achei que a função "GPIO_EXTILineConfig" fizesse exatamente isso.

Segue código de inicialização:
Código: Selecionar todos
        GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure);

   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB , GPIO_PinSource5 );
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB , GPIO_PinSource6 );
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB , GPIO_PinSource7 );
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB , GPIO_PinSource8 );
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB , GPIO_PinSource9 );

   EXTI_InitStructure.EXTI_Line = EXTI_Line5 | EXTI_Line6  | EXTI_Line7 | EXTI_Line8 | EXTI_Line9;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;
   EXTI_Init(&EXTI_InitStructure);

   GPIOA->BSRR = GPIO_BSRR_BR1 ;

chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Re: Dúvida sobre Interrupção externa

Mensagempor RobL » 12 Jun 2013 20:54

Facilita se informar o chip usado e a origem das funções usadas. As portas são periféricos com propriedades de cada fabricante.
Não informou se pegou uma inicialização de terceiros e sua porta A, quem sabe, já estivesse configurada para int. externa.
Pode ter ocorrido isto ?
Os poucos Cortex que conheço, todos tem como configurar cada pino da porta individualmente.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Re: Dúvida sobre Interrupção externa

Mensagempor B-EAGLE » 12 Jun 2013 21:10

pelo jeito vc tá usando as libs da ST, certo? qual família do bixo? F?

Aqui como eu configuro minhas int externa, dá pra ter uma idéia, apesar de não usar nada de lib de ninguém :P:

Código: Selecionar todos
  // EXTI 0 - PA0 - IRQn 6 - M1 input
  AFIO->EXTICR[0] &= ~0x000F;     // Clear EXT0 source interrupt
  EXTI->EMR  &= ~0x00000001;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000001;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000001;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000001;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00000040;    // 6th interrupt of ISER[0] enabled 
 
  // EXTI 1 - PA1 - IRQn 7 - M2 input
  AFIO->EXTICR[0] &= ~0x00F0;     // Clear EXT1 source interrupt 
  EXTI->EMR  &= ~0x00000002;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000002;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000002;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000002;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00000080;    // 7th interrupt of ISER[0] enabled
 
  // EXTI 2 - PA2 - IRQn 8  - M3 input
  AFIO->EXTICR[0] &= ~0x0F00;     // Clear EXT2 source interrupt 
  EXTI->EMR  &= ~0x00000004;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000004;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000004;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000004;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00000100;    // 8th interrupt of ISER[0] enabled
 
  // EXTI 3 - PA3 - IRQn 9 - M4 input
  AFIO->EXTICR[0] &= ~0xF000;     // Clear EXT3 source interrupt
  EXTI->EMR  &= ~0x00000008;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000008;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000008;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000008;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00000200;    // 9th interrupt of ISER[0] enabled
 
  // EXTI 4 - PA4 - IRQn 10 - M5 input
  AFIO->EXTICR[1] &= ~0x000F;     // Clear EXT4 source interrupt
  EXTI->EMR  &= ~0x00000010;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000010;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000010;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000010;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00000400;    // 10th interrupt of ISER[0] enabled
   
  // EXTI 5 - PA5 - IRQn 23 - M6 input
  AFIO->EXTICR[1] &= ~0x00F0;     // Clear EXT5 source interrupt
  EXTI->EMR  &= ~0x00000020;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000020;      // Enable INTERRUPT mode generation 
  EXTI->RTSR &= ~0X00000020;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000020;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00800000;    // 23th interrupt of ISER[0] enabled
 
  // EXTI 6 - PA6 - IRQn 23 - M7
  AFIO->EXTICR[1] &= ~0x0F00;     // Clear EXT6 source interrupt
  EXTI->EMR  &= ~0x00000040;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000040;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000040;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000040;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00800000;    // 23th interrupt of ISER[0] enabled
 
  // EXTI 7 - PA7 - IRQn 23 - M8 input
  AFIO->EXTICR[1] &= ~0xF000;     // Clear EXT7 source interrupt 
  EXTI->EMR  &= ~0x00000080;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000080;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000080;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000080;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00800000;    // 23th interrupt of ISER[0] enabled 
 
  // EXTI 8 - PA8 - IRQn 23 - M9 input
  AFIO->EXTICR[2] &= ~0x000F;     // Clear EXT8 source interrupt
  EXTI->EMR  &= ~0x00000100;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000100;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000100;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000100;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00800000;    // 23th interrupt of ISER[0] enabled
 
  // EXTI 9 - PA9 - IRQn 23 - M10 input
  AFIO->EXTICR[2] &= ~0x00F0;     // Clear EXT9 source interrupt
  EXTI->EMR  &= ~0x00000200;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000200;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000200;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000200;      // Enable FALLING edge int.
  NVIC->ISER[0] |= 0x00800000;    // 23th interrupt of ISER[0] enabled

  // EXTI 10 - PB10 - IRQn 40 - M11 input
  AFIO->EXTICR[2] &= ~0x0F00;     // Clear EXT10 source interrupt
  AFIO->EXTICR[2] |=  0x0100;     // Set PB source of interrupt  10
  EXTI->EMR  &= ~0x00000400;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000400;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000400;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000400;      // Enable FALLING edge int.
  NVIC->ISER[1] |= 0x00000100;    // 40th interrupt of ISER[1] enabled
 
  // EXTI 11 - PB11 - IRQn 40 - M12 input
  AFIO->EXTICR[2] &= ~0xF000;     // Clear EXT11 source interrupt
  AFIO->EXTICR[2] |=  0x1000;     // Set PB source of interrupt 11
  EXTI->EMR  &= ~0x00000800;      // Disable EVENT mode generation
  EXTI->IMR  |=  0x00000800;      // Enable INTERRUPT mode generation
  EXTI->RTSR &= ~0X00000800;      // Disable RISING edge int.
  EXTI->FTSR |=  0x00000800;      // Enable FALLING edge int.
  NVIC->ISER[1] |= 0x00000100;    // 40th interrupt of ISER[1] enabled
   
  // EXTI 13 - PB13 - IRQn 40 - CC1101 GDO0
  AFIO->EXTICR[3] &= ~0x00F0;     // Clear EXT13 source interrupt
  AFIO->EXTICR[3] |=  0x0010;     // Set PB13 source of interrupt 
  EXTI->EMR  &= ~0x00002000;      // Disable EVENT mode generation
  //EXTI->IMR  |=  0x00002000;      // Disable INTERRUPT mode generation
  EXTI->FTSR &= ~0x00002000;      // Disagle FALLING edge int.
  EXTI->RTSR |=  0X00002000;      // Enable RISING edge int. 
  NVIC->ISER[1] |= 0x00000100;    // 40th interrupt of ISER[1] enabled



se precisar coloco a config. de um firmware que fiz pra série L também, que tem alguns registradores a mais....
B-EAGLE
Word
 
Mensagens: 847
Registrado em: 19 Out 2006 14:12
Localização: Campo Grande - MS

Re: Dúvida sobre Interrupção externa

Mensagempor chipselect » 12 Jun 2013 22:57

sim, estou usando o STM32F100...
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Re: Dúvida sobre Interrupção externa

Mensagempor B-EAGLE » 13 Jun 2013 14:17

chipselect escreveu:sim, estou usando o STM32F100...



é pra esse bixo mesmo esse código que coloquei, testa ae!
B-EAGLE
Word
 
Mensagens: 847
Registrado em: 19 Out 2006 14:12
Localização: Campo Grande - MS


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x