Problema com o Timer

Software e Hardware para uC Texas

Moderadores: andre_luis, 51

Problema com o Timer

Mensagempor Bugabuga » 15 Set 2014 06:46

Bom dia pessoal.

Eu tenho o LauchPad da texas, e uso o CI Msp430G2552. Meu problema e que sempre que gero uma interrupção para o Timer A o programa cai no código de segurança "ISR_TRAP.asm". Eu uso o programa CCS versão limitada, que a própria Texas fornece.

Eu tenho o livro Microcontroladores MSP430: Teoria e Prática, mas na parte de interrupções os códigos não são os melhores para o CSS. Mas mesmo copiando os códigos do livro caio no mesmo erro, incluindo códigos pela internet.

Bem pessoal, alguém já teve problema parecido ? ou uma dica para me ajudar? Vou colocar o código do programa, o do erro e uma imagem com o mapa da memoria que o programa vai gerando.

Desde já agradeço pela ajuda :)


cpp code
#include <msp430g2553.h>

int main(void) {

WDTCTL = WDTPW | WDTHOLD;

P1DIR |= 0x41;
P1OUT = 0x41;

TA0CTL = TASSEL_1+MC_1+TAIE;
TA0CCR0 = 10;
_BIS_SR(GIE);

while(1);
}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void tempo_A0(void)
{
P1OUT ^= 0x41;
}


Agora, o código "ISR_TRAP.asm" que o programa pula quando o erro ocorre:

cpp code
;******************************************************************************
;* ISR_TRAP.ASM - v4.3.3 *
;* *
;* Copyright (c) 2003-2014 Texas Instruments Incorporated *
;* http://www.ti.com/ *
;* *
;* Redistribution and use in source and binary forms, with or without *
;* modification, are permitted provided that the following conditions *
;* are met: *
;* *
;* Redistributions of source code must retain the above copyright *
;* notice, this list of conditions and the following disclaimer. *
;* *
;* Redistributions in binary form must reproduce the above copyright *
;* notice, this list of conditions and the following disclaimer in *
;* the documentation and/or other materials provided with the *
;* distribution. *
;* *
;* Neither the name of Texas Instruments Incorporated nor the names *
;* of its contributors may be used to endorse or promote products *
;* derived from this software without specific prior written *
;* permission. *
;* *
;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
;* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
;* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR *
;* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT *
;* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *
;* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
;* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, *
;* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY *
;* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
;* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE *
;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
;* *
;******************************************************************************


;-----------------------------------------------------------------------------
;-- default ISR handler if user does not supply
;-- simply puts device into lpm0
;-----------------------------------------------------------------------------

.sect ".text:__TI_ISR_TRAP"
.align 2
.global __TI_ISR_TRAP
__TI_ISR_TRAP:
BIS.W #(0x0010),SR
JMP __TI_ISR_TRAP


Pequeno mapa que mostra a memoria do programa, especificamente dos Timers:

Mapa memoria.png
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por Bugabuga em 16 Set 2014 06:08, em um total de 1 vez.
Bugabuga
Bit
 
Mensagens: 11
Registrado em: 18 Mar 2014 00:15

Re: Problema com o Timer

Mensagempor andre_luis » 15 Set 2014 08:34

Quando usei o MSP430F149, não me lembro desse trap, pode ser que seja especifico do uC que voce tá usando, mas é estranho que esteja aparecendo essa mensagem, pois você já incluiu o header msp430g2553.h, onde supostamente deveria estar a definição dos vetores de interrupção. Pode ser que esteja faltando os iniciar, mas não me lembro mais como fazer isso, faz tempo que não mexo com Texas, experimenta o seguinte:

cpp code
#include <msp430g2553.h>

int main(void) {

WDTCTL = WDTPW | WDTHOLD;

P1DIR |= 0x41;
P1OUT = 0x41;

TA0CTL = TASSEL_1+MC_1+TAIE;
TA0CCR0 = 10;
_BIS_SR(LPM0_bits + GIE); // Incluido mais um flag
"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

Re: Problema com o Timer

Mensagempor Bugabuga » 16 Set 2014 06:00

Valeu a dica, mas não funcionou :(


Achei um pessoal falando para eu declarar todos os vetores de interrupção possível, e ver para qual vetor ele pula, assim não caio na "ISR_TRAP.asm", pois o vetor vai estar no meu programa, com isso descubro para onde o programa pula "sozinho".


Bem, fiz isso e descobri que o programa "tentava" pular para "TIMER0_A1_VECTOR", mas eu apenas programei o "TIMER0_A0_VECTOR", entao nao sei ao certo o porque de acontecer isso.
Esse programa abaixo roda sem travar, mas toda hora ele pula para o "TIMER0_A1_VECTOR" gastando ciclos preciosos. Ou seja, tenho que descobrir como fazer a interrupção "TIMER0_A1_VECTOR" nao ser chamada.

Sei que o "TIMER0_A0_VECTOR" é comparador com "CCR0", quando atingi o valor do mesmo entra na interrupção(automatico|Rapido). Mas como o "TIMER0_A1_VECTOR" entra em uma interrupção ?


cpp code
#include <msp430g2553.h>

int main(void) {

WDTCTL = WDTPW | WDTHOLD;

P1DIR |= 0x41;
P1OUT = 0x41;

CCTL0 = CCIE;
TACTL = TASSEL_1+MC_1+TAIE;
CCR0 = 10;
_BIS_SR(GIE);

while(1);
}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void tempo_A0(void)
{
P1OUT ^= 0x41;
}

// Trap para o programa nao perder a letura, de vez em quando cai nesta interrupcao.
#pragma vector = TIMER0_A1_VECTOR
__interrupt void TrapIsr(void)
{
TA0CTL &= ~(TAIFG);
}
Bugabuga
Bit
 
Mensagens: 11
Registrado em: 18 Mar 2014 00:15

Re: Problema com o Timer

Mensagempor andre_luis » 16 Set 2014 08:44

Na boa, nunca usei esse recurso do trap anteriormente, e acho que é necessário apenas quando há muitas interrupções ocorrendo concorrentemente, o que acredito não vai ser o seu caso. Em nenhuma aplicação até hoje não vi necessidade disso. Experimenta simplesmente desativar esse recurso, não capturando nada.

A propósito, já procurou se há alguma possivel discrepancia dos valores no arquivo header em alguma errata do fabricante ?
"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

Re: Problema com o Timer

Mensagempor Bugabuga » 16 Set 2014 22:41

Então,... Se eu não capturo o programa faz um mau funcionamento, pois ele pula pra uma linha de condigo inexistente.


A solução que encontrei foi parar de usar a interrupção "TIMER0_A0_VECTOR" e usar a "TIMER0_A1_VECTOR", ela esta funcionando perfeitamente sem nenhum problema.


Mas obrigado pela Ajuda Andre :)
Futuramente quando eu estiver melhor adaptado ao msp430 posto uma solução no tópico, para ele ficar completo.
Bugabuga
Bit
 
Mensagens: 11
Registrado em: 18 Mar 2014 00:15


Voltar para Texas

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

cron

x