Dúvida interrupção (Resolvido)

Olá,
Overview:
Desenvolvi uma aplicação onde monitoro algumas entradas, e qdo alguma delas muda, envio essa info pela UART. Porém qdo o software que roda no PC for inciado ele precisará ler o status atual das entradas. O meu hardware fica sempre ligado, qdo o PC liga e abro o software, começa o "monitoramento".
Onde estou:
Meu firmware funciona corretamente, porém devido ao fato de o PC solicitar informações ao PSOC, acredito que eu deva utilizar 2 interrupções, uma para tratar as entradas e outra para cuidar das solicitações que o PC manda.
Peguei a parte do meu código que cuida das entradas e joguei para o PSoC_GPIO_ISR, e no _main habilitei a interrupção, como segue:
_main:
mov A,UART_1_PARITY_NONE //Configura a UART para não ter paridade.
call UART_1_Start //Inicializa o módulo UART.
mov A,00h //Zera todos os flags
mov [flag],A //Zera todos os flags
mov [PRT2IE], 16h //Configura as entradas do port2 que vão interromper o microcontrolador P2[1] (Pino
, P2[2] (Pino 20), P2[4] (Pino 22)
mov [INT_MSK0], 20h //Habilita interrupção por GPIO
mov [PRT2IC1], 16h
mov [PRT2IC0], 16h
M8C_EnableGInt
inicio:
mov [PRT2DR], 00h
jmp inicio
Que ao meu ver esta correto, porém não funciona!!! E a parte que trata das entradas funciona corretamente, qdo a jogo no MAIN.
* Peguei um exemplo do livro MICROCONTROLADORES PSOC e adaptei ao meu projeto
** No label inicio eu fico jogando 0 para o port2, isso é necessário, ou eu posso colocar só o JMP INICIO??? (Copiei do livro)
Alguém pode me ajudar?
Obrigado.
****************************
Como sou brasileiro e não desisto nunca, fiz um programa bem simples pra ver se funcionava, mas, não funcionou!!!
main.asm
include "m8c.inc" ; part specific constants and macros
include "PSoCAPI.inc" ; PSoC API definitions for all User Modules
include "psocgpioint.inc"
export _main
area bss (RAM)
entrada:: BLK 1
tempo1: BLK 1
tempo2: BLK 1
tempo3: BLK 1
area text(ROM,REL)
_main:
mov [PRT0IE], 01h //Habilita a entrada P0[0] para interromper o uC
mov [INT_MSK0], 20h //Habilita interrupção por GPIO
mov [PRT0IC1], 00h //borda de subida
mov [PRT0IC0], 01h
M8C_EnableGInt
loop:
mov reg[PRT2DR], 02h //liga um led (só pra saber se passar por aqui)
mov reg[PRT0DR], 00h
jmp loop
------------------------------------------------------
psocgpioint.asm
include "m8c.inc"
include "PSoCGPIOINT.inc"
;-----------------------------------------------
; Global Symbols
;-----------------------------------------------
export PSoC_GPIO_ISR
;-----------------------------------------------
; Constant Definitions
;-----------------------------------------------
;-----------------------------------------------
; Variable Allocation
;-----------------------------------------------
;@PSoC_UserCode_INIT@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom declarations below this banner
;---------------------------------------------------
include "PSoCAPI.inc"
;---------------------------------------------------
; Insert your custom declarations above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)
;-----------------------------------------------------------------------------
; FUNCTION NAME: PSoC_GPIO_ISR
;
; DESCRIPTION: Unless modified, this implements only a null handler stub.
;
;-----------------------------------------------------------------------------
;
PSoC_GPIO_ISR:
;@PSoC_UserCode_BODY@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom code below this banner
;---------------------------------------------------
mov reg[PRT2DR], 01h
;---------------------------------------------------
; Insert your custom code above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)
reti
Onde estou errando?
Valeu!!!
Overview:
Desenvolvi uma aplicação onde monitoro algumas entradas, e qdo alguma delas muda, envio essa info pela UART. Porém qdo o software que roda no PC for inciado ele precisará ler o status atual das entradas. O meu hardware fica sempre ligado, qdo o PC liga e abro o software, começa o "monitoramento".
Onde estou:
Meu firmware funciona corretamente, porém devido ao fato de o PC solicitar informações ao PSOC, acredito que eu deva utilizar 2 interrupções, uma para tratar as entradas e outra para cuidar das solicitações que o PC manda.
Peguei a parte do meu código que cuida das entradas e joguei para o PSoC_GPIO_ISR, e no _main habilitei a interrupção, como segue:
_main:
mov A,UART_1_PARITY_NONE //Configura a UART para não ter paridade.
call UART_1_Start //Inicializa o módulo UART.
mov A,00h //Zera todos os flags
mov [flag],A //Zera todos os flags
mov [PRT2IE], 16h //Configura as entradas do port2 que vão interromper o microcontrolador P2[1] (Pino

mov [INT_MSK0], 20h //Habilita interrupção por GPIO
mov [PRT2IC1], 16h
mov [PRT2IC0], 16h
M8C_EnableGInt
inicio:
mov [PRT2DR], 00h
jmp inicio
Que ao meu ver esta correto, porém não funciona!!! E a parte que trata das entradas funciona corretamente, qdo a jogo no MAIN.
* Peguei um exemplo do livro MICROCONTROLADORES PSOC e adaptei ao meu projeto
** No label inicio eu fico jogando 0 para o port2, isso é necessário, ou eu posso colocar só o JMP INICIO??? (Copiei do livro)
Alguém pode me ajudar?
Obrigado.
****************************
Como sou brasileiro e não desisto nunca, fiz um programa bem simples pra ver se funcionava, mas, não funcionou!!!
main.asm
include "m8c.inc" ; part specific constants and macros
include "PSoCAPI.inc" ; PSoC API definitions for all User Modules
include "psocgpioint.inc"
export _main
area bss (RAM)
entrada:: BLK 1
tempo1: BLK 1
tempo2: BLK 1
tempo3: BLK 1
area text(ROM,REL)
_main:
mov [PRT0IE], 01h //Habilita a entrada P0[0] para interromper o uC
mov [INT_MSK0], 20h //Habilita interrupção por GPIO
mov [PRT0IC1], 00h //borda de subida
mov [PRT0IC0], 01h
M8C_EnableGInt
loop:
mov reg[PRT2DR], 02h //liga um led (só pra saber se passar por aqui)
mov reg[PRT0DR], 00h
jmp loop
------------------------------------------------------
psocgpioint.asm
include "m8c.inc"
include "PSoCGPIOINT.inc"
;-----------------------------------------------
; Global Symbols
;-----------------------------------------------
export PSoC_GPIO_ISR
;-----------------------------------------------
; Constant Definitions
;-----------------------------------------------
;-----------------------------------------------
; Variable Allocation
;-----------------------------------------------
;@PSoC_UserCode_INIT@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom declarations below this banner
;---------------------------------------------------
include "PSoCAPI.inc"
;---------------------------------------------------
; Insert your custom declarations above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)
;-----------------------------------------------------------------------------
; FUNCTION NAME: PSoC_GPIO_ISR
;
; DESCRIPTION: Unless modified, this implements only a null handler stub.
;
;-----------------------------------------------------------------------------
;
PSoC_GPIO_ISR:
;@PSoC_UserCode_BODY@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom code below this banner
;---------------------------------------------------
mov reg[PRT2DR], 01h
;---------------------------------------------------
; Insert your custom code above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)
reti
Onde estou errando?
Valeu!!!