Programming multicore microcontrollers

From Hackerspace ACKspace
Revision as of 15:16, 22 November 2014 by Danny Witberg (talk | contribs) (XMOS microcontrollers)
Jump to: navigation, search
Project: Programming multicore microcontrollers
Featured:
State Active
Members Danny Witberg
GitHub No GitHub project defined. Add your project here.
Description This project describes the programming of multicore microcontrollers
Picture
No project picture! Fill in form Picture or Upload a jpeg here

Introduction

Microcontroller until now were mostly single cores based, but XMOS introduced a microcontroller where multiple processes can run at once. This can be a great advantage where time critical processes can be handled simultaneously. If you want to do that on a single core microcontroller, you would have to handle the two threads with interrupts or some other means of dividing the available processing power onto the several tasks.

This project shows how multicore microcontrollers are programmed, and how several tasks are handled in an extension to the C language. It also shows how different tasks can communicate with each other, and how timed I/O can assist in achieving higher communication transfer speeds.

XMOS microcontrollers

XMOS is a silicon manufacturer who specialise in multicore microcontrollers. Each chip can contain 4 to 16 XCOREs, each capable of running a seperate task. They share on chip memory, and can be connected to external I/O. An XMOS controller can also be fitted with analog capabilities, or physical interfaces like an USB PHY. Also, the XCOREs inside the microcontroller is equipped with a dedicated multiplier, ideal for performing DSP tasks. The controller runs at a decent 400MHz-500MHz and is capable of doing 1000 MIPS. With these numbers, XMOS controllers easily outperform any Arduino board, and give twice the processing power of the fastest single core microcontrollers.

Xmos core layout.png

XMOS controllers are programmed by a JTAG interface, and the IDE is Eclipse based. It accepts normal C/C++ programming but has an extension to the C language for handling multiprocessing instructions, XC. With these extensions parallel running tasks can be initiated and specialised I/O can be configured.