This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C5515 eZdsp Timer1 ISR never called - NO CSL

Hi,

i'm trying to use timers (TIMER1) in C5515 eZdsp board WITHOUT USING CSL.

I have defined:

timers.h

// Define timer registers (TIMER1)

#define TCR1                *(ioport volatile unsigned *)(0x1850)
#define T1PRD1              *(ioport volatile unsigned *)(0x1852)
#define T1PRD2              *(ioport volatile unsigned *)(0x1853)
#define T1CNT1              *(ioport volatile unsigned *)(0x1854)
#define T1CNT2              *(ioport volatile unsigned *)(0x1855)
#define IERT1               *(ioport volatile unsigned *)(0x1816)
#define TIAFR               *(ioport volatile unsigned *)(0x1C14)

void init_timer(void);
void start_timer(void);
void stop_timer(void);

timers.c

void init_timer(){
    TCR1 = 0x8000;
    // PRD 1 sec con CPU a 100 Mhz
    T1PRD1 = 0x86A0; //LSW
    T1PRD2 = 0x000F; //MSW
}

void start_timer(){
    TCR1 = 0x8001;
}


void stop_timer(void){
    TCR1 = 0x8000;
}

And the significant piece of my main code:

...
init_timer();
start_timer();
while(1);
...
...
interrupt void Timer_Isr(void){
    printf("\n interrupt \n");
}

I have defined Timer_Isr in vector.asm like this:

.global _Timer_Isr
...
...
.sect "vector"
.align  256
...
...
TINT1:		.ivec    _Timer_Isr				; Timer #0 / Software Interrupt #4

PLL at 100 Mhz

My ISR Timer_Isr is never called.

Any suggestion?

Thanks a lot

Paolo

  • Hi Paolo,

    I've forwarded this to the c55x software experts. Their feedback should be posted here.

    BR
    Tsvetolin Shulev
  • I solved the problem myself, not without difficulties:

    timers.h

    #include "data_types.h"
    // Define timer registers (TIMER1)


    #define TCR1 *(ioport volatile unsigned *)(0x1850)
    #define T1PRD1 *(ioport volatile unsigned *)(0x1852)
    #define T1PRD2 *(ioport volatile unsigned *)(0x1853)
    #define T1CNT1 *(ioport volatile unsigned *)(0x1854)
    #define T1CNT2 *(ioport volatile unsigned *)(0x1855)
    #define IERT1 *(ioport volatile unsigned *)(0x1856)
    #define TIAFR *(ioport volatile unsigned *)(0x1C14)

    timers.c

    #include "timers.h"
    #include "data_types.h"

    void init_timer(){ // Timer generates an interrupt every second
    TCR1 = 0x8000; // disable Autoreload
    // PRD 1 sec con CPU a 100 Mhz --> 1 tick every 20 ns
    T1PRD1 = 0xF080; //LSW
    T1PRD2 = 0x02FA; //MSW
    T1CNT1 = 0x0000;
    T1CNT2 = 0x0000;
    TIAFR = 0x0007; //Clearing timer Aggregation register
    IERT1 = 0x0001; //enable timer0 int flag
    }

    void start_timer(){
    TCR1 = 0x8001;
    }


    void stop_timer(void){
    TCR1 = 0x8000;
    }

    Timer ISR:
    interrupt void Timer_Isr(void){
    //static Uint8 sec_counter = 0;
    IFR0 = IFR0&0x0010; // clear timer int flag
    IERT1 = 0x0001; //clear timer0 int flag
    TIAFR = TIAFR|0x0001; // Clear Timer0 bit in Timer Aggregate register
    ...
    ...
    }