Coldfire (MCF5235) Interrupt Problem

Ivica Eftimovski IEFTIMOVSKI at
Tue May 15 15:09:03 UTC 2012

Well it was self-inflicted wound. I found that my Data Direction Register setting was incorrect (MCF5235_EPORT_EPDDR). It was supposed to be NOT(), and it is supposed to be 8bits, not 16 bits as the User Manual has it. RTEMS has it correctly set to 8bits.

Thank you all for the time and help.



From: rtems-users-bounces at [mailto:rtems-users-bounces at] On Behalf Of Ivica Eftimovski
Sent: Friday, May 11, 2012 11:56 AM
To: rtems-users at
Subject: Coldfire (MCF5235) Interrupt Problem

Hi all,

I am just starting with RTEMS and I am trying to interface the MCF5235 BCC board to our existing hardware. I am trying to set it to use *IRQ4, which should have fixed level/priority.

When I execute the code noted below, the interrupts are disabled properly, the vector seems set and interrupts are re-enabled. But anytime I ground*IRQ4 (default high) line while my example program is running, I do not vector to the ISR.

I fashioned my code using the clock/network/console code as guide, and those work great.

Can anyone please give me a hint of what am I doing wrong?

------------------------------------- CODE -------------------------------------
#define TPU_INT_VECTOR (64+4)
#define TPU_IRQ_LEVEL  4

void InitTPUInterrupt(void);
static rtems_isr TPUInterruptHandler(rtems_vector_number vector);

#define TPUInterruptSetPriority()                            \
     do {                                                     \
           MCF5235_INTC0_ICR4 =                                 \
                MCF5235_INTC_ICR_IL(TPU_IRQ_LEVEL) |             \
                MCF5235_INTC_ICR_IP(TPU_IRQ_PRIORITY);           \
     } while(0)

#define TPUInterruptSetHandler(_level,_vector,_old_handler)  \
     do {                                                     \
           rtems_interrupt_disable(_level);                     \
           MCF5235_INTC0_IMRL &= ~(MCF5235_INTC0_IMRL_INT4 |    \
                     MCF5235_INTC0_IMRL_MASKALL);                 \
           handle_status = rtems_interrupt_catch(TPUInterruptHandler, \
                     TPU_INT_VECTOR, &old_handler); \
           rtems_interrupt_enable(level);                       \
     } while(0)

void InitTPUInterrupt(void) {

     rtems_interrupt_level level;
     rtems_isr_entry old_handler;

     uint16 status;


     TPUInterruptSetHandler(level, TPU_INT_VECTOR, old_handler);

     asm ("move.w  %%sr ,%0;" : "=r"(status));


static rtems_isr
TPUInterruptHandler(rtems_vector_number vector)
     uint volatile chan = vector - TPU_INT_VECTOR;

     printf("\nGot interrupt number: %i", chan);


rtems_task Init(
  rtems_task_argument ignored


------------------------------------- CODE -------------------------------------

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the users mailing list