fiq com o timer0 no lpc2148.

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

fiq com o timer0 no lpc2148.

Mensagempor Red Neck Guy » 31 Dez 2006 15:08

Eu aproveitei a minha folga agora no final do ano pra tirar o meu kit de lpc2148 da gaveta. Como fazia tempo que não trabalhava com ele o pouco que eu cheguei a fazer esqueci completamente. Ontem por exemplo fiquei a tarde toda tentando descobrir pq o programa não ficava armazenado na flash - dái até lembrar que tem que configurar os endereços e habilitar o flash downloader foi bastante tempo....
Bom a minha duvida agora é a seguinte:
Para fazer com que o mat0.0 gere uma interrupção fiq não basta apenas configurar o VICIntSelect e o VICIntEnable e configurar o timer o como aí abaixo:
.....
T0TCR = 0x00000001; //Habilita a contagem do Timer0
T0PR = 0x000000C8; //Fator de divisão do prescaler
T0CTCR = 0x00000000; //Configura para modo de incremento a cada ciclo de PCLK
T0MCR = 0x00000003; //Configura para Interrupção por comparação e tambem para reinicar a contagem quando chegar ao valor de MR0

T0MR0+= 0x000000C8;
LPCAPI_setaFIQ(DF_VIC_TIMER_0);
......
Aquele livrinho de arm que rola por aí - escrito pelo pessoal da mosaico - é muito fraquinho.
Em primeiro lugar tem escrito claramente lá que não é necessário configurar o MAM quando se escreve código em linguagem C... - Ou o cara não soube expressar a idéia ou é tosco mesmo...
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor tcpipchip » 31 Dez 2006 16:24

Se nao me engano tens que habilitar via CPRS tambem
TCPIPCHIP
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor Red Neck Guy » 02 Jan 2007 20:59

Olha, nenhum dos códigos que achei na net habilita flag nenhum no CPSR ( usei até um intrinsic do IAR - interrup_enable - e nada)
Aparentemente está tudo certo, mas não há meio de funcionar, será que essa fiq só vai rodar aqui depois que eu comprar o livro do Fábio?
(até lá mais um monte de cabelos brancos...)
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor microeletronica » 03 Jan 2007 08:29

Aquino, o MR0 ja funcionou na IRQ e NV-IRQ?
Se nao, faz a experiencia e mande noticias.

Sobre a FIQ, continuo pesquisando...
microeletronica
Byte
 
Mensagens: 158
Registrado em: 05 Dez 2006 18:22

Mensagempor microeletronica » 03 Jan 2007 08:45

microeletronica
Byte
 
Mensagens: 158
Registrado em: 05 Dez 2006 18:22

Mensagempor Viktor » 03 Jan 2007 09:56

Para mudar esses bits você deve estar em modo privilegiado. Minha sugestão é você declarar SWI para manipular esses bits. Os SWI são interrupções por software e chaveiam para o modo privilegiado.
;---------------------------------------------------------------------------------------|
; void swi_disable_irq(void) |
;---------------------------------------------------------------------------------------|
__SWI_11
mrs r0,spsr
orr r0,r0,#0x80
msr spsr_c,r0
bx lr

;---------------------------------------------------------------------------------------|
; void swi_enable_irq(void) |
;---------------------------------------------------------------------------------------|
__SWI_12
mrs r0,spsr
and r0,r0,#:NOT: 0x80
msr spsr_c,r0
bx lr

;---------------------------------------------------------------------------------------|
; void swi_disable_fiq(void) |
;---------------------------------------------------------------------------------------|
__SWI_13
mrs r0,spsr
orr r0,r0,#0x40
msr spsr_c,r0
bx lr
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor barboza » 26 Jan 2007 07:23

Vou tentar dar minha primeira ajuda no mundo ARM!

Você configurou a porta como Match?
// Pino 0.22 com Match
PINSEL1 |= 0x15403000;
PINSEL2 |= 0x00000030;

Definiu a função que atende ao FIQ?

PRESERVE8
IMPORT ISR_Timer0

Undef_Handler B Undef_Handler
SWI_Handler B SWI_Handler
PAbt_Handler B PAbt_Handler
DAbt_Handler B DAbt_Handler
IRQ_Handler B IRQ_Handler
FIQ_Handler B ISR_Timer0



Veja meu exemplo abaixo!

#include <LPC214X.H>

#define XTAL 12E6L
#define M 5L
#define P 2L
#define CPUCLK (XTAL*M)
#define XCLKDIV (CPUCLK/2)

#define LAT_TIMER (XCLKDIV/10) // 100ms

__irq void ISR_Timer0 ( void )
{
// Int do MR0?
if ( T0IR & 0x00000001 )
{
// Limpe a Int
T0IR = 0x00000001;
}

}

int main ( void )
{
// Pino 0.22 com Match
PINSEL1 |= 0x15403000;
PINSEL2 |= 0x00000030;

// 100ms @ 30MHz com Toggle no 0.22 e interrupção
T0EMR = 0x00000030;
T0MCR = 0x00000003;
T0MR0 = LAT_TIMER;

// Enable timer 0
T0TCR = 0x00000001;

// Habilita FIQ no Timer0
VICIntSelect = (1<<4);
VICIntEnable = (1<<4);

while (1);
}
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar


Voltar para ARM

Quem está online

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

x