Getting Started with a Cortex-M3 Board Steven Guan and Joe Hale, NXP Semiconductors If you have not already downloaded the class prerequisites, please get the attention of an NXP representative.
Class Agenda Introduction to the ARM Cortex-M series Getting started with the NXP LPC1549 Cortex-M3 board Introduction to Integrated Development Environments Programming techniques for embedded systems Modern debugging tools on a Cortex-M3 core Common Pitfalls
Class Prerequisites You should have already downloaded and installed (if applicable): Keil MDK (download and install) Keil MDK Cortex-M Legacy (download and install) Segger J-Link Software (download and install) LPC1549 LPCOpen Software Platform (download) If you have not downloaded the software, Please get the attention of an NXP representative!
Introduction to the ARM Cortex-M Family
ARM Cortex Family
What is a Cortex-M series core? 32-bit memory architecture ARM Thumb-2 ISA Optimized for low power Trades processing power for lower cost and smaller size
ARM Cortex-M series
Example Cortex-M0/M0+ MCU
Getting started with the NXP LPCXpresso1549 Cortex-M3 Development Board
NXP LPC1549 Series Specifications SYSTEM INTERFACES ANALOG ADCs (2) 12 ch, 12-b, 2 Msps DAC MEMORY Multilayer Bus Matrix EEPROM 4 kB Flash 256 kB RAM 36 kB ROM ARM Cortex-M3 Up to 72 MHz UART (3) JTAG CAN (& PHY) SWD USB (FS Dev) Power Management Unit PMU, power modes, BOD, single VDD power supply, POR Clock Generation Unit 12 MHz, 1% IRC OSC, 1-24 MHz System OSC, System (CPU) PLL USB PLL TIMERS SCTimer/PWM (4) WWDT RTC Battery pin Systick Comparators (4) sDMA (18 ch) CRC Engine GPIO (30-78) Pin Switch Matrix QEI Temp Sensor SPI (2) I2C (Fm+)
LPCXpresso1549 Board from NXP
LPC Link-2 Debugger Debugger acts as middleman between MCU and PC Integrated onto LPC1549 Cortex-M3 board LPC Link-2 can be flashed to emulate third party debuggers J-Link pre-installed on the boards given away today Can also be used as a standalone probe
Introduction to Integrated Development Environments (IDEs)
What is an IDE? Software application used to facilitate software development Source code editor Code compiler, including automated building tools Software debugger Examples include Keil MDK, IAR Embedded Workbench, NXP LPCXpresso IDE, etc.
How does an IDE work? Individual source files make up a Project Projects are organized into a Workspace A Project may be compiled into a library or application code Workspace Application Project Source File Library Project
How does an IDE work? Workspace Project #1 Project #2 Project #3 Development PC Workspace Project #1 Project #2 Project #3 Code Compilation Application Binary MCU Debugger Microcontroller USB Cable
Hands On: Intro to Keil MDK Complete the worksheet that we are passing out in order to: Familiarize yourself with the Keil MDK GUI Get comfortable working with projects in a workspace Use the LPCOpen software platform to successfully compile and download your first application onto the LPC1549! If you run into issues, contact the closest NXP representative for assistance
Debug Session IDE will use the MCU debugger to communicate with MCU through Serial Wire Debug (SWD) pins IDE will gain access to system memory, peripherals, and debug registers Enables plethora of debug features to help aid software development
Programming Techniques for an Embedded System Grand Loop Design All system events addressed inside a while(1) loop that never exits Polling method Service event by constantly checking Interrupt method Service event when system is told to service
Demo: Polling vs. Interrupts and their effect on power Aim to minimize power consumption to maximize battery life Measure power to direct optimization
Modern Debugging Tools on a Cortex-M Core Code stepping Breakpoints Variable Viewer SWO Tracing
Demo: SWO Tracing Non-intrusive debugging Uses one extra SWD pin as data input/output PC sampling Interrupt entries and exits Instrumentation with ITM Data watch
Common Pitfalls Compiler code optimization Reorders instructions to speed up code execution, making code stepping hard to follow Use the volatile keyword to prevent variables from being “optimized out” Use breakpoints to step through interrupt handler code Don’t use printf() or its deviations
Thank you for attending this Embedded TechCon class! Questions? Thank you for attending this Embedded TechCon class!