Usar duas interrupções FAST

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Usar duas interrupções FAST

Mensagempor filipespc » 14 Set 2007 16:17

Eu estou fazendo um programa que usa duas interrupções externas e uma por timer... eu queria que a interrupção por timer não fosse capaz de interromper as interrupções externas. Pensei em colocá-las como FAST (eu programo em C).

O problema é que o compilador não está deixando eu colocar as duas interrupções como FAST.

a mensagem de erro é: "Too many fast interrupt handlers have been defined"

Eu dei uma boa lida no datasheet, e não entendi pq as duas não podem ser FAST.

Grato, Filipe
filipespc
Bit
 
Mensagens: 16
Registrado em: 11 Dez 2006 15:20

Re: Usar duas interrupções FAST

Mensagempor andre_luis » 14 Set 2007 16:22

Porque o PIC possui apenas um vetor de interrupção.
FAST é aquela cujo flag será analizado primeiro.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor filipespc » 14 Set 2007 16:29

Na verdade, eu estou usando um PIC18f452
Esse PIC tem dois vetores de interrupção, o FAST serve justamente para colocar a interrupção no de mais alta prioridade.
a ordem das interrupções é definida pela diretiva #priority

Me corrija se eu estiver enganado
filipespc
Bit
 
Mensagens: 16
Registrado em: 11 Dez 2006 15:20

Mensagempor andre_luis » 14 Set 2007 16:43

filipe,

Pelo que voce está reportando, aparentemente essa diretiva FAST só acita mesmo uma entrada de parametro.
Talvez voce tenha que contornar isso, usando a diretiva #PRIORITY, que lamentavelmente atribuirá prioridades diferentes à interrupcoes de mesma relevancia.

Mas, voltando à diretiva FAST, voce nao concorda que soa meio esquizito, definirmos 2 interrupções como de prioridade igual, se apenas 1 delas será tratada por vez ? Qual delas o programa irá escolher em tempo de execução ? ( Só estou usando a intuição )

Só pra refletir....


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor filipespc » 14 Set 2007 18:39

André,

As interrupções FAST não são de mesma prioridade... Assim como as interrupções comuns, a prioridade entre elas é definida pela ordem em que as flags de interrupção são verificadas.
O que as diferencia das outras interrupções é que elas podem interromper uma rotina de interrupção que não seja FAST que esteja em andamento.
Isso acontece porque passam a existir dois flags para habilitar interrupções globais, o GIEH e o GIEL. Quando uma interrupção que não é FAST está sendo tratada, a flag GIEL é resetada, inibindo a ocorrência de outras interrupções não FAST. Porém, a GIEH continua setada, fazendo com que interrupções FAST possam interromper o tratamento de uma interrupção em andamento. Já o contrário não ocorre, quando a flag GIEH está resetada, as interrupções não FAST também ficam desabilitadas, não acontecendo nada se algum evento ocorrer.

Isso pelo menos foi o que eu entendi do datasheet.
filipespc
Bit
 
Mensagens: 16
Registrado em: 11 Dez 2006 15:20

Mensagempor filipespc » 17 Set 2007 15:09

Ninguém que tenha tido um problema parecido pode me ajudar?
filipespc
Bit
 
Mensagens: 16
Registrado em: 11 Dez 2006 15:20


Voltar para PIC

Quem está online

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

cron

x