Aaron Zhang

How to write interrupt service routine in codewarrior 8.1 for MPC555?

Discussion created by Aaron Zhang on Oct 24, 2006
Latest reply on Nov 3, 2006 by Timothy Milliken
hello,I am trying to write my own ISR,but MPC555's Interrupt is somewhat different .
 
1. Its external interrupt sources share one Interrupt vector address--0x00000500 or 0xFFF00500, so i get confused.I wonder if there are two or more interrupt sources share  0x00000500, how does PowerPC choose the right ISR from many ISRs?
 
2. I write a PIT code here.It's not completed. Could someone tell me how to write the PIT's ISR?
 
 
UINT32 pitctr = 0;    // Counter of PIT interrupts
 
void init555(int freq)
{
USIU.SYPCR.R = 0xffffff03;            // Disable watchdog timer. 
USIU.PLPRCRK.R = 0x55ccaa33; //Unlock PLPRC with special key
if (freq == 56)
{
USIU.PLPRCR.R = 0x00d3d000;   // 14x PLL operation on normal power mode
}
else
{
USIU.PLPRCR.R = 0x0093d000;   // 10x PLL operation on normal power mode
}
UIMB.UMCR.B.HSPEED = 0;        // Make IMB clock = System Clock  
}
 
void initPIT()
{                                                     // SPECIFIC INITIALIZATIONS FOR PIT:
 USIU.PITC.B.PITC = 1000;          //Load desired count value
 USIU.PISCR.B.PITF = 1;             // Freeze enabled to stop PIT during debug mode
 USIU.PISCR.B.PTE  = 1;             // Enable PIT to start counting
 
                                                      // LEVEL ASSIGNMENT:
 USIU.PISCR.B.PIRQ = 0x80;       // Assign PIT interrupt to Level 0
 
                                                       // ENABLE INTERRUPT
 USIU.PISCR.B.PIE = 1;                // Enable PIT interrupt
 
                                                      // SET APPROPRIATE MASK
 USIU.SIMASK.R = 0x40000000;  // Enable level 0 interrupt; others disabled
}

void main()
{
 int i=0;
 init555(40);                                     // Perform minimal chip initialization
 initPIT();                                         // Initialize PIT
   
 asm(" mtspr EIE, r0");                   // Enable interrupts
 while (1) { i++; }                             // loop forever
}
 
/****************************ISR*********************************************/
void pitISR()                                 // PIT interrupt service routine
{
 USIU.PISCR.B.PS = 1;                // Negate interrupt request
 pitctr++;                                        // Increment PIT interrupt counter
}
 
 

Outcomes