Sida 1 av 1

Vad är det som är fel med den här koden?

Postat: 3 mars 2011, 17:40:52
av Peter_1974
När jag aktiverar koden nedan i min funktion init_DADC() placerad i filen
dadc.c
misslyckas återhoppet i slutet av funktionen -

Kod: Markera allt

  if(install_IRQ(19, 1, DADC_ISR) == FALSE)
  {
	return( FALSE );  /* Fatal error due to ISR installation failure */	   
  }
  INT_REQ19=(1<<28)|(1<<27)|(1<<26)|(1<<16)|0x1; 

  INT_VECTOR0=IRQ_TABLE_BASE & MASK_INDEX;
Källkoden ovan ska installera avbrottshanteringen för Dual ADC:n med IRQ 19, prioritet 1 och avbrottsrutinen DADC_ISR().

Jag har kollat att exekveringen når return-raden i slutet av funktionen init_DADC() genom att lägga in en rad som tänder en lysdiod precis innan return;

Funktionen install_IRQ är skriven av NXP själva (
irq.c
) och ser ut enligt följande -

Kod: Markera allt

DWORD install_IRQ(BYTE IntNum, BYTE Priority, HandlerAddr IRQHandler )
{
  DWORD *vect_addr;
  if ( (IntNum < 32) && (IRQHandler != (HandlerAddr)NULL) ) 
  {                            
	/* Use the Interrupt source number to index to the ISR address 
	entry from base address*/
	vect_addr=(DWORD *)(IRQ_TABLE_BASE |(IntNum<<3));
	*vect_addr = (DWORD)IRQHandler;
	vect_addr++;
	*vect_addr = Priority;
	return( TRUE );
  }
  else
  {
	return( FALSE );
  }
}
Funktionen använder följande definitioner placerade i filen irq.h
irq.h
-

Kod: Markera allt

/* This field need to be carefully placed. It's to be in the
2048 boundry. So it's not defined as a array but a physical
memory location. Please make sure it won't overlap with the
stack and global variable area. */
#define IRQ_TABLE_BASE	0x40D000	/* Base address of IVT */
									/* must be at 2048 boundary */
#define IRQ_SIZE		32			/* 1 based through 29 */
 
/* Mask bits for Index bits in the INT_VECTOR0 register*/
#define MASK_INDEX 		0xFFFFF800

Re: Vad är det som är fel med den här koden?

Postat: 3 mars 2011, 17:46:39
av eqlazer
Kan du lägga

Kod: Markera allt

[code] 
[/code] runt dina kodexempel? Blir lite mer lättläst då.

Re: Vad är det som är fel med den här koden?

Postat: 3 mars 2011, 18:47:24
av sodjan
För den som eventuellt skulle intressera sig så borde den första
frågan vara vilken processor det hela körs på. Även verktyg
som kompilatorer o.s.v...

Re: Vad är det som är fel med den här koden?

Postat: 3 mars 2011, 18:58:48
av jesse
källfilen ger lite info:

dadc.c: Dual ADC C file for NXP LPC288x Family Microprocessors

Tyvärr inget jag har sysslat med.

Re: Vad är det som är fel med den här koden?

Postat: 3 mars 2011, 19:02:08
av sodjan
> källfilen ger lite info:

Läser jag inte om det inte på annat sätt verkar intressant.
Men som du säger, inget jag heller känner till.

Kanske : http://forums.nxp.com/index.php ?