Vad är det som är fel med den här koden?
Postat: 3 mars 2011, 17:40:52
När jag aktiverar koden nedan i min funktion init_DADC() placerad i filen
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 ( ) och ser ut enligt följande -
Funktionen använder följande definitioner placerade i filen irq.h -
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;
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 ( ) 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 );
}
}
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