#ifndef __TIMER_H__#define __TIMER_H__voidmcf52235_interrupt_init(uint8 source, uint8 ipl, void (*handler)(void));/* FUNCTION: GPTA_Timer_Init() * * Initialise and enable General Purpose Timer A0 to work like * a PIT. * * PARAM2: Prescaler value - sets the tick frequency to *     (system clock/2) divided by 2^PCSR * * PARAM3: Modulo counter - sets the mumber of ticks per interrupt * * PARAM4: Interrupt handler * * RETURNS: none */#include "MCF52235.h"#define ADDRESS   uint32voidGPTA_Timer_Init(uint8 PCSR, uint16 PMR, void (*handler)(void)){  uint8 ipl = MCF_INTC_ICR_IL(2)     | MCF_INTC_ICR_IP(0); // Disable timer A MCF_GPTA_GPTSCR2 = 0; // Set up interrupt handler mcf52235_interrupt_init(44, ipl, handler);   // Set modulo count // (= number of ticks per interrupt) MCF_GPTA_GPTC0 = PMR;   // Tick frequency = (system clock/2) divided by 2^PCSR MCF_GPTA_GPTSCR2  = 0x87;//(uint8)(MCF_GPTA_GPTSCR2_PR(PCSR)); MCF_GPTA_GPTIOS = MCF_GPTA_GPTIOS_IOS0;  MCF_GPTA_GPTIE = MCF_GPTA_GPTIE_CI0;  // Enable timer A MCF_GPTA_GPTSCR2 = MCF_GPTA_GPTSCR2_TOI; MCF_GPTA_GPTSCR1 = MCF_GPTA_GPTSCR1_GPTEN;}/* FUNCTION: mcf52235_interrupt_init() * * Initialise an interrupt handler for an interrupt source * for INTC0. If the handler is a NULL pointer, then mask * this interrupt. * * PARAM1: Interrupt source (1..62) * * PARAM2: Interrupt level and priority * * PARAM3: Interrupt handler * * RETURNS: none */voidmcf52235_interrupt_init(uint8 source, uint8 ipl, void (*handler)(void)){// Only for user defined vectors in INTC0 if ((source > 0) && (source < 63)) {  // Interrupts should be disabled to avoid vector problems  // and to ensure that a spurious interrupt exception can't  // be generated.  uint8 sysint =(uint8) asm_set_ipl(7);  if (handler)  {   // Set interrupt priority level   MCF_INTC0_ICR(source) =(uint8)(ipl & 0x3F);   // Set vector   mcf5xxx_set_handler(source+64, (ADDRESS)handler);   // Clear mask for this handler   /*if (source < 32)    MCF_INTC0_IMRL &= ~(MCF_INTC_IMRL_INT(source);          | MCF_INTC_IMRL_MASKALL);   else   {*/    MCF_INTC0_IMRL &= ~(MCF_INTC_IMRL_MASKALL);    MCF_INTC0_IMRH &= ~(MCF_INTC_IMRH_INT_MASK44);//MCF_INTC_IMRH_INT(source)   //}  }  else  {   // Set vector   mcf5xxx_set_handler(source+64, (ADDRESS)handler);   // Set mask for this handler   /*if (source < 32)   {    MCF_INTC0_IMRL |= MCF_INTC_IMRL_INT(source);   }   else   {*/    MCF_INTC0_IMRH |= MCF_INTC_IMRH_INT_MASK44;   //}  }  // As you were...  //asm_set_ipl(sysint); }}/********************************************************************/#endif/* * main implementation: use this sample to create your own application * */#define __interrupt__   __declspec(interrupt)#include "support_common.h" /* include peripheral declarations and more */#include "MCF52235.h"#include "timer.h"#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT) /* Standard IO is only possible if Console or UART support is enabled. */#include <stdio.h>#endif__interrupt__voidtimer_handler(void){ MCF_GPIO_PORTUB^=0x01;//Blink LED // Clear interrupt MCF_GPTA_GPTFLG2 = MCF_GPTA_GPTFLG2_TOF; }int main(void){ MCF_CLOCK_SYNCR=0x0705;//PLL bypass MCF_CLOCK_SYNSR=0x80;//External clock systeme  GPTA_Timer_Init(5, 65535, timer_handler); mcf5xxx_irq_enable(); MCF_GPIO_PORTUB=0; MCF_GPIO_DDRUB=0x07; while(1) {  MCF_GPIO_PORTUB^=0x02;  }} 
					
				
		
static void fnConfigurePIT(void){    PIT_SETUP pit_setup;                                                 // interrupt configuration parameters    pit_setup.int_type = PIT_INTERRUPT;    pit_setup.int_handler = test_timer_int;    pit_setup.int_priority = PIT1_INTERRUPT_PRIORITY;    pit_setup.count_delay = PIT_US_DELAY(3245);                          // 3245us delay    pit_setup.mode = PIT_SINGLE_SHOT;                                    // one-shot interrupt    fnConfigureInterrupt((void *)&pit_setup);                            // enter interrupt for PIT1 test}static void fnConfigure_DMA_Timer(void){    DMA_TIMER_SETUP dma_timer_setup;                                     // interrupt configuration parameters    dma_timer_setup.int_type = DMA_TIMER_INTERRUPT;    dma_timer_setup.int_handler = DMA_timer_int;    dma_timer_setup.channel = 1;                                         // DMA timer channel 1    dma_timer_setup.int_priority = DMA_TIMER1_INTERRUPT_PRIORITY;        // define interrupt priority    dma_timer_setup.mode = (DMA_TIMER_INTERNAL_CLOCK | DMA_TIMER_SINGLE_SHOT_INTERRUPT);    dma_timer_setup.count_delay = DMA_TIMER_US_DELAY(1,1,6345);          // 6345us delay using no dividers    fnConfigureInterrupt((void *)&dma_timer_setup);                      // enter interrupt for DMA timer test} 
					
				
		
#include "main.h"// *** timer ****************************************************************int volatile ticks;  // incremented by pit0 isr every millisecondint volatile seconds;  // incremented by pit0 isr every second// called by pit0 every millisecondstatic__declspec(interrupt)voidtimer_isr(void){    int halves;    MCF_PIT0_PCSR |= MCF_PIT_PCSR_PIF;    ticks++;    if (ticks%500 == 0) {        halves = ticks/500;            led_set(3, halves&1);        if ((halves&1) == 0) {            seconds++;        }    }}voidtimer_initialize(void){    // enable pit0 timer interrupt    __VECTOR_RAM[119] = (uint32)timer_isr;    MCF_INTC0_ICR55 = MCF_INTC_ICR_IL(SPL_PIT0)|MCF_INTC_ICR_IP(SPL_PIT0);    MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK55;  // pit0    MCF_INTC0_IMRL &= ~MCF_INTC_IMRL_MASKALL;    // configure pit0 to interrupt every 1 ms    MCF_PIT0_PCSR = 0;    MCF_PIT0_PMR = 24000;  // 1 ms @ 48 MHz    MCF_PIT0_PCSR = MCF_PIT_PCSR_PRE(0)|MCF_PIT_PCSR_OVW|MCF_PIT_PCSR_PIE|MCF_PIT_PCSR_RLD|MCF_PIT_PCSR_EN;}