Embedded Systems

Lab 1: Get Started with Linux*

This lab is an introductory exercise for using Linux to manipulate hardware peripherals.

  • Write a Linux program that controls the on-board LED lights.
  • Design a counter with push-button input and seven-segment display output.


Lab 2: Develop Linux Programs that Communicate with FPGAs

Gain practice with writing kernel modules to control peripherals and use system hardware.

  • Display a scrolling message on the seven-segment displays.
  • Display a real-time clock on the seven-segment displays.
  • Implement a stopwatch with two sources of interrupts.


Lab 3: Character Device Drivers

Practice creating and using device drivers.

  • Implement device drivers to provide the state of push-button and slider switches and to control LEDs and seven-segment displays.


Lab 4: Using Character Device Drivers

Continue to build experience on skills gained from the prior exercise. 

  • Write a device driver that implements a countdown stopwatch.
  • Write a program that controls the stopwatch using the switches and pushbuttons.


Lab 5: Use ASCII Graphics for Animation

Explore how to perform simple animations under Linux with ASCII commands.

  • Compile and run a given example program.
  • Write, compile, and test a program that uses the Bresenham line-drawing algorithm to draw lines on the screen.
  • Enhance your algorithm with physics so that your line moves and bounces off the edge of the screen.
  • Create an animation of five objects on the screen, and then enhance it with input variables for speed and number of objects.


Lab 6: Introduction to Graphics and Animation

Learn how to display images and perform animation using the video-out port.

  • Write a video driver and add a simple line-drawing algorithm.
  • Augment the kernel module with pixel buffer swap, and write a user-level program to create a simple animation.
  • Enhance your video driver to support the display of characters, and augment your user-level program to display the number of video frames that have been drawn.


Lab 7: Use the ADXL345 Accelerometer

Experiment with the ADXL345 accelerometer chip.

  • Write a program to directly read and write registers in the ADXL345 device.
  • Create a kernel module that provides file-based I/O, and then write a user-level program that uses the driver.
  • Implement a graphical demonstration that draws a bubble on the screen that moves as you tilt the board.
  • Add tap and double-tap detection to your device driver, and add a demonstration of that feature to your user-level program.


Lab 8: Introduction to Audio and Multithreaded Applications

Create user-level Linux programs that produce audio output on the Terasic DE1-SoC board.

  • Write a multithreaded program to implement a digital piano using an audio port.
  • Visualize sound as wave forms on a VGA display.
  • Record and play back songs.