/* * 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_GPIO.h"#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT) /* Standard IO is only possible if Console or UART support is enabled. */#include <stdio.h>#endifextern __interrupt__ void timer_handler(void);__interrupt__void timer_handler(void){ MCF_GPIO_PORTUB=0; MCF_GPIO_PORTUB^=0x01; MCF_PIT0_PCSR=0x109; MCF_PIT0_PCNTR=0x1F4;}int main(void){ mcf5xxx_irq_enable(); MCF_GPIO_PORTUB=0; MCF_GPIO_DDRUB=0x06; while(1) { MCF_GPIO_PORTUB^=0x02; }}
...#define _timer_handler timer_handler... .extern _timer_handler...vector77: .long _timer_handler...
#ifndef __TIMER_H__#define __TIMER_H__/* 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)){ // At 64MHz: // PCSR = 5 gives a tick per uS // PMR = 1000 gives an interrupt every 1ms uint8 ipl = MCF_INTC_ICR_IL(2) | MCF_INTC_ICR_IP(0); // Disable timer A MCF_GPTA_GPTSCR1 = 0; // Set up interrupt handler mcf52235_interrupt_init(44, ipl, handler); // /!\Error 2/!\ // Set modulo count // (= number of ticks per interrupt) MCF_GPTA_GPTC0 = PMR; // Tick frequency = (system clock/2) divided by 2^PCSR MCF_GPTA_GPTSCR2 = (uint8)(MCF_GPTA_GPTSCR2_PR(PCSR)); MCF_GPTA_GPTIOS = MCF_GPTA_GPTIOS_IOS0; MCF_GPTA_GPTIE = MCF_GPTA_GPTIE_CI0; MCF_GPTA_GPTFLG1 = MCF_GPTA_GPTFLG1_CF0; MCF_GPTA_GPTFLG2 = MCF_GPTA_GPTFLG2_TOF; // Enable timer A MCF_GPTA_GPTSCR1= 0x80; }/* 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)){ // /!\Error 1/!\ // 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(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(source); } } // As you were... asm_set_ipl(sysint); }}/********************************************************************/#endif
possibly another point of the program or in file.h is declared :
int mcf52235_interrupt_init ( ..... )
while here is declared:
void mcf52235_interrupt_init ( ..... )
has this function the prototype?