Dúvida interrupção (Resolvido)

Software e Hardware para uC PSoC

Moderadores: andre_luis, 51

Dúvida interrupção (Resolvido)

Mensagempor btpavao » 22 Set 2009 11:07

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 8), 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!!!
Editado pela última vez por btpavao em 23 Set 2009 22:39, em um total de 1 vez.
btpavao
Bit
 
Mensagens: 37
Registrado em: 18 Set 2009 13:46

Mensagempor btpavao » 23 Set 2009 22:39

Achei o erro, faltava reg antes dos registradores que configuram as interrupções.

Valeu!!!
btpavao
Bit
 
Mensagens: 37
Registrado em: 18 Set 2009 13:46


Voltar para Cypress

Quem está online

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

x