Search in Pinguino World !!

Sunday, December 25, 2011

How to use interrupt on Pinguino32

Pinguino32 doesn’t support interrupt routines without writing a code in an assembler file. We decided to open interrupt to everybody. To do this, we used some of the special attribute directive of GCC. Now you can deal with Interrupt without assembler.

This example show how to use the Timer 1 to increment a counter.

// Using interrupt with Pinguino32
// Jean-Pierre MANDON 2011


unsigned int counter=0;

void ISR_wrapper_vector_4(void) __attribute__ ((section (".vector_4")));
// Put the ISR_wrapper in the good place

void ISR_wrapper_vector_4(void) { Tmr1Interrupt(); }
// ISR_wrapper will call the Tmr1Interrupt()

void Tmr1Interrupt(void) __attribute__ ((interrupt));
// Tmr1Interrupt is declared as an interrupt routine

// define here the code to execute when an interrupt occure
void Tmr1Interrupt(void)
if (IFS0bits.T1IF) // Timer Interrupt flag
TMR1=0; // reset the timer register
IFS0CLR=0x10; // Clear the timer interrupt flag
counter++; // increment the counter

// configure timer 1
void init_timer1(void)
IntConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR); // interrupt mode (interrupt.c)
T1CON=0; // reset timer 1 configuration
TMR1=0; // reset timer 1 counter register
PR1=0x9999; // define the preload register
IPC1SET=0x7; // select interrupt priority and sub-priority
IFS0CLR=0x10; // clear interrupt flag
IEC0SET=0x10; // enable timer 1 interrupt
T1CONSET=0x8010; // start timer 1 and set prescaler

void setup()

void loop()
CDC.printf("%d\n\r",counter); // counter is incremented at each timer 1 overflow

Be careful, some interruption are already used by Pinguino32. Vector_8 (timer 2) is used by the function millis(). vector_24 (Serial1 interrupt) and vector_32 (Serial2 interrupt) are used by the serial module. vector_35 ( RTCC ) is used by the real time clock module.
All the test have been made with a PIC32-PINGUINO-OTG board and Linux IDE.

Sunday, December 4, 2011


Arduino’s idea is to hide the processor and complex C features, working with pins and libraries. Pinguino do the same, but it is also a powerful pedagogical tool to learn embedded systems and C. The Kidules follow this objective, and associate to the learning steps dedicated hardware that allows to concentrate on the software. Once the C and hardware features of the processor are mastered, any application with any C compiler can be envisioned, part of the application being initially tested on the Kidules.

The Ki18F2550 board features two 8-bit ports on which application and test circuits are connected. Each slave module has a simple and clear functionality:
- the Dice with 7 leds and a push-button helps with the understanding of bits and bytes. Using tables and byte access replace the writing of pages of digitalWrite (..); instructions.
- the Traffic light is good to think about specifications, before its easy programming.
- the Elevator has a motor and 3 sensors. It prepares for robots and exercises the notion of state machines
- the Clock helps understanding stepping motors. I2C clock circuit is an option.
Other Kidules allows to understand motors, sensors, internal PIC registers and their configuration. See
The Kidules are specially suited for the first part of a Robotic or Embedded system lab.
The KiCar (not shown) is similar to the Ki2550, with ports for motors and sensors, ready to control a robot avoiding obstacles.
Documentation is mostly in French now. Ask to be updated : .