AnsweredAssumed Answered

Problem with PIT1 interrupt

Question asked by adrian Freyre on Dec 24, 2009
Latest reply on Jan 6, 2010 by adrian Freyre

Hello I'm a new mqx user, and i'm working with the MCF52259DEMO Board. I'm looking for some help, with the interruption of the PIT1.
I' need to do a virtual clock (just a simple counter with a variable), but this clock must to be very exact.
So my idea is to make constant interruption with the PIT1 module.
The problem is that I never obtain an interuption, so the code have some kind of problem.
I wrote this code (is very simple), so I'm going to post this:

 

//////this is just the main//////////

 

TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
/*  Task number, Entry point, Stack, Pri, String, Auto? */
   {MAIN_TASK,   Main_task,   5000,  4,   "main", MQX_AUTO_START_TASK,0L,0},
   {0,           0,           0,     0,     0,0,0L,0}
};
extern void dtim3_isr(void);
//////////////////////////////////////////////
//   Clck counter     //
//////////////////////////////////////////////
static unsigned long int clock;
static unsigned int Pit_counter;
//////////////////////////////////////////////////
// Global Register pointer      //
//////////////////////////////////////////////////
VMCF5225_STRUCT_PTR reg_ptr;

/*****************************************************************/
/*****************************************************************/
/*ISR*-----------------------------------------------------------
*
* ISR Name : dtim3_isr

* Comments :

*END*-----------------------------------------------------------*/
__declspec(interrupt)  void dtim3_isr(void)
{
  
   //Set the PIT interrupt flag
   reg_ptr->PIT[1].PCSR=reg_ptr->PIT[1].PCSR;
   // 
   reg_ptr->PIT[1].PMR=Pit_counter;
   /////////////////////////////////////////////////
   //Actualizo el Contador 
   if(clock==1000)
   {
    clock=0;
    reg_ptr->GPIO.PORTTC=reg_ptr->GPIO.PORTTC^0x01;
   }
   else
   {
    clock++;
    reg_ptr->GPIO.PORTTA = reg_ptr->GPIO.PORTTA^0x01;
   }
}


/*****************************************************************/
/*****************************************************************/


/*TASK*-----------------------------------------------------
*
* Task Name    : Main_task
* Comments     :
*    This task prints " Hello World "
*
*END*-----------------------------------------------------*/

void Main_task(uint_32 initial_data)
{

 //////////////////////////////////////////////////////////////
 // Voy a Configurar el IOC0 y el DTIM0 (LED0) like output //
 //////////////////////////////////////////////////////////////
 //First IOC0
 reg_ptr->GPIO.PTAPAR = 0x00;
 reg_ptr->GPIO.DDRTA  = 0x0F;
 reg_ptr->GPIO.PORTTA = 0x00;   
 //Next Led
 reg_ptr->GPIO.PTCPAR = 0x00;
 reg_ptr->GPIO.DDRTC  = 0x0F;
 reg_ptr->GPIO.PORTTC = 0x00;
 //////////////////////////////////////////////////////////////
   
   //PIT1 Init 
 reg_ptr->PIT[1].PCSR=(reg_ptr->PIT[0].PCSR)
 reg_ptr->PIT[1].PMR=reg_ptr->PIT[0].PMR;
 Pit_counter=reg_ptr->PIT[0].PMR;
 
 //Finally Install the PIT1
 if (_int_install_isr(BSP_PIT1_INT_VECTOR,dtim3_isr, NULL) == NULL)
     {
      printf("\n PIT1 instalation fail \n");
     } */
  
 //Init global clock
 clock=0;

     while(1)
     {
     printf("\nTick count =%d\n", clock);
     _time_delay_ticks(200);
     
     }  
}

Please could some body tell me what is the problem?

Outcomes