Qual é a diferença entre interrupção na mudança e interrupção externa nos PICs


11

Qual é a diferença de função entre IOC e EXT Interrupt em um PIC? Atualmente, estou usando um PIC12F1822 e, além da camada extra de verificação, você tem a ver com o COI (ou seja, qual pino causou a interrupção) os dois são idênticos.

Qual é a diferença prática, se houver? Quando você usaria um ou outro?

Respostas:


8

Veja este documento que afirma:

Interrupção na mudança
Esse recurso é semelhante ao recurso de interrupção externa , exceto que uma interrupção na mudança de porta será acionada por qualquer alteração (não apenas um tipo de transição) em qualquer um dos pinos para os quais está ativado. Isso o torna mais flexível (disponível em mais pinos), mas também mais difícil de lidar corretamente.


5

Provavelmente, isso é feito para simplificar a arquitetura de interrupção do chip, com menos entradas na tabela de vetores de interrupção. A interrupção na mudança pode ser configurada para disparar quando um registro de porta é alterado e pode ser útil para algo como uma matriz de teclado em que você não deseja escrever uma ISR (Interrupt Service Routine) para cada pino. Você pode escrever apenas um que possa verificar o valor de toda a porta, que pode ser o que realmente interessa, dependendo do aplicativo.


5

As três maiores diferenças entre mudança de interrupção e pinos de interrupção externos:

  1. Os pinos de interrupção externos permitem que o software especifique se a interrupção deve ser acionada por uma borda ascendente ou por uma borda descendente; se, por exemplo, um pino estiver baixo e estiver interessado apenas nas arestas que caem, uma interrupção não será acionada até que o pino suba e subseqüentemente caia. Usando a interrupção na mudança, seria necessário acordar nos dois eventos.
  2. Os pinos de interrupção externos possuem bits de status de travamento individuais. Mesmo que um pulso de entrada chegue e vá antes que o software possa responder a ele, o software ainda pode descobrir que isso aconteceu e reagir adequadamente.
  3. A leitura de uma porta de E / S com uma interrupção de troca de pinos ativada precisamente no momento em que a entrada é alterada pode resultar na interrupção da troca de pinos. Por outro lado, a leitura da porta de E / S conectada a um pino de interrupção externo não afeta a interrupção.

As interrupções externas do PIC são mais versáteis e confiáveis ​​do que as interrupções de troca de pinos de uso geral. Eu sugiro usar o primeiro quando prático.


3

Basicamente, a interrupção externa será acionada em uma borda específica (subindo ou descendo, definida pelo usuário), enquanto a interrupção na mudança será acionada em qualquer borda (subindo e descendo).


Pelo menos para o PIC12F1822 do OP mencionado, o COI também pode ser configurado (definido pelo usuário) para acionar em borda ascendente, borda descendente ou em ambos (seção 13). Então, para mim, a única diferença parece ser que a interrupção externa só pode ser configurada para disparar em qualquer uma das duas detecções de borda.
PetPaulsen

2

A interrupção na mudança geralmente é de meio byte de E / S, onde as interrupções externas geralmente são para bits individuais. Como você já disse, uma coisa que você precisa fazer no IOC ISR é descobrir qual bit (ou bits) mudou.

O COI também é um pouco mais difícil de usar, mesmo além disso. É imperativo ler a porta logo antes de ativar a interrupção, e ainda mais importante LER A PORTA dentro do ISR! Se você tem um sinal de mudança lenta e acha que pode definir uma bandeira dentro do ISR e fazer sua leitura mais tarde, fora do ISR, pense novamente! A leitura da porta (ou qualquer parte da porta, se bem me lembro) redefine a trava no comparador que aciona a interrupção. Se você não limpá-lo dentro do ISR, ele será acionado imediatamente quando você sair do ISR. Se você se lembrar de fazer isso, está tudo bem, mas se você esquecer e achar que pode ler a porta quando chegar a ela, ficará um pouco frustrado até se lembrar de fazer a leitura no ISR.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.