i am starting on C6747 interrupt handling and i created a simple project, in witch i want a interrupt to be generated once the timer1 finishes a circle.
but it seems the interrupt is generated (from the value of INTCTLSTAT1 that i observed) ,while my interrupt function "xint0_isr" is never executed....can some one help me ..
bty, followed are my main.c , my interrupt vector table and my link file
//---------------main.c--------------//
extern cregister volatile unsigned int AMR; /* Address Mode Register */
extern cregister volatile unsigned int CSR; /* Control Status Register */
extern cregister volatile unsigned int IFR; /* Interrupt Flag Register */
extern cregister volatile unsigned int ISR; /* Interrupt Set Register */
extern cregister volatile unsigned int ICR; /* Interrupt Clear Register */
extern cregister volatile unsigned int IER; /* Interrupt Enable Register */
extern cregister volatile unsigned int ISTP; /* Interrupt Service Tbl Ptr */
extern cregister volatile unsigned int IRP; /* Interrupt Return Pointer */
extern cregister volatile unsigned int NRP; /* Non-maskable Int Return Ptr*/
extern cregister volatile unsigned int IN; /* General Purpose Input Reg */
extern cregister volatile unsigned int OUT; /* General Purpose Output Reg */
#define INTMUX1 *( volatile Uint32* )(0x01800104)
#define INTCTLSTAT1 *( volatile Uint32* )(0x01C21044)
#include <C6747.h>
#include<stdio.h>
void Timer1_Init(void)
{
TIMER1_TRC = 0x00000080; //timer1 control register
TIMER1_PRD12 = 0x00000030;
TIMER1_TIM12 = 0;
INTCTLSTAT1 &= ~0xFF;
INTCTLSTAT1 |= 0x00010001; // enable timer1 interrupt
TIMER1_TGCR = 0x05; // let timer1 works in dual 32bit unchained mode and enable time1
}
Uint8 cnt = 0;
void main(void)
{
C6747_init( );
ISTP = 0xFFF00000; //start of the c_int0
INTMUX1 &= ~0xFF; // clear out INTSEL4 field
INTMUX1 |= 40; // INTSEL4=40
IER |= 0x00000013; // IE4=1
CSR |= 0x00000001; // intrrupt gloabe enabel
Timer1_Init();
while(1);
}
interrupt void xint0_isr(void)
{
printf("interrupt occured\n");
cnt++;
}
//----------------vector.asm-----------//
; Global symbols defined here and exported out of this file
.global _intcVectorTable
.global _c_int00
.global _xint0_isr
.global _vector3
.global _vector4
.global _vector5
.global _vector6
.global _vector7
.global _vector8
.global _vector9
.global _vector10
.global _vector11
.global _vector12
.global _vector13
.global _vector14
.global _vector15
; This is a macro that instantiates one entry in the interrupt service table.
VEC_ENTRY .macro addr
STW B0,*--B15
MVKL addr,B0
MVKH addr,B0
B B0
LDW *B15++,B0
NOP 2
NOP
NOP
.endm
; This is a dummy interrupt service routine used to initialize the IST.
_vec_dummy:
B B3
NOP 5
; This is the actual interrupt service table (IST).
.sect ".vectors"
.align 1024
_intcVectorTable:
_vector0: VEC_ENTRY _c_int00 ;RESET
_vector1: VEC_ENTRY _vec_dummy ;NMI
_vector2: VEC_ENTRY _vec_dummy ;RSVD
_vector3: VEC_ENTRY _vec_dummy ;RSVD
_vector4: VEC_ENTRY _xint0_isr ;isr0
_vector5: VEC_ENTRY _vec_dummy ;isr1
_vector6: VEC_ENTRY _vec_dummy ;isr2
_vector7: VEC_ENTRY _vec_dummy ;isr3
_vector8: VEC_ENTRY _vec_dummy
_vector9: VEC_ENTRY _vec_dummy
_vector10: VEC_ENTRY _vec_dummy
_vector11: VEC_ENTRY _vec_dummy
_vector12: VEC_ENTRY _vec_dummy
_vector13: VEC_ENTRY _vec_dummy
_vector14: VEC_ENTRY _vec_dummy
_vector15: VEC_ENTRY _vec_dummy
//---------------link.cmd-----------------//
-l rts64plus.lib
-l ..\..\..\C6747_common\lib\C6747bsl.lib
-stack 0x1000
-heap 0x1000
MEMORY
{
VECS: o = 0xFFF00000 l = 0x00080000
ARMRAM: o = 0xFFFF0080 l = 0x00001f80
DSPRAM: o = 0x11800000 l = 0x00040000
SHAREDRAM: o = 0x80000000 l = 0x00020000
SDRAM: o = 0xC0000000 l = 0x20000000
}
SECTIONS
{
.bss > SHAREDRAM
.cinit > SHAREDRAM
.cio > SHAREDRAM
.const > SHAREDRAM
.stack > SHAREDRAM
.sysmem > SHAREDRAM
.text > SHAREDRAM
.switch > SHAREDRAM
.far > SHAREDRAM
.vectors > SHAREDRAM
}