■odorici.sys

$ cat ~/work/embedded-systems-design.md

project · embedded · 2025

Cortex-M3 Bench Firmware

Peripherals, register-level code and an RTOS on the mbed LPC1768

Peripherals over I2C and UART, USB HID, ADC and DAC, register-level GPIO and timers, and a multi-thread Mbed OS RTOS demo, all on an mbed LPC1768 (Cortex-M3). The open final project became my desktop assistant.

fig.01 · photograph
kind
project
course
ECE 4180, Georgia Tech
category
embedded
period
Jan 2025 - May 2025
status
completed

head -n 20 README

A lab a week on an mbed NXP LPC1768 (ARM Cortex-M3) with Mbed OS, plus Keil uVision for assembly: the peripheral and RTOS groundwork for the desktop assistant that followed.

The labs covered the full range of the microcontroller: PWM-dimmed LEDs and a DIP-switch RGB mixer, a navigation switch presented to a host as a USB HID mouse, a capacitive touch keypad and a 9-axis IMU over I2C, a serial uLCD over UART, a potentiometer through the ADC and a sine wave out of the DAC. Two labs went under the API entirely, configuring GPIO, pin modes, the hardware timers and the interrupt controller by writing LPC17xx registers directly, with an ARM assembly lab in the Keil simulator alongside. The last one was an Mbed OS application with four threads (sonar, rotary encoder, display and an LED alarm) sharing state through mutexes, flashing the screen red when an obstacle came within ten centimeters. The open-ended final project for the course became my Jarvis desktop assistant.

grep -n highlights

  1. 01Configured GPIO, pin modes, hardware timers and the interrupt controller by writing LPC17xx registers directly, below the Mbed API.
  2. 02Integrated I2C peripherals (a capacitive touch keypad and a 9-axis IMU), a UART display and a USB HID mouse on real hardware.
  3. 03Drove PWM outputs and used the ADC and DAC, including a potentiometer-controlled LED and a generated sine wave.
  4. 04Built an Mbed OS RTOS application with four threads sharing sonar, encoder and display state through mutexes, with a distance-triggered alarm.
  5. 05Wrote ARM assembly routines in Keil uVision (recursion, array search, string comparison) alongside the C and C++ work.

ls ./media

fig.02The Mbed OS RTOS lab: four threads driving the sonar, rotary encoder, uLCD and an alarm LED at once.
■ 12 modules · 2 roles∿█