EE 319K Introduction to Microcontrollers Lecture 1: Introduction, Embedded Systems, ARM Programming 1-1 Agenda Course Description Book, Labs, Equipment Grading Criteria Expectations/Responsibilities Prerequisites Embedded Systems Microcontrollers ARM Architecture Instruction Set, Memory Layout I/O ports and programming Integrated Development Environment (IDE) Intro to C Debugging 1-2 EE306 Recap: Digital Logic Digital Analog 0 "0" Illegal 1.3 2.0 Positive logic: True is higher voltage False is lower voltage "1" 5V AND, OR, NOT Flip flops Registers Negative logic : True is lower voltage False is higher voltage 1-3 EE302 Recap: Ohm’s Law V=I*R I=V/R R=V/I Voltage = Current * Resistance Current = Voltage / Resistance Resistance = Voltage / Current I = 3.7mA I V R •P = V * I •P = V2 / R •P = I2 * R Battery V=3.7V R = 1k Resistor Power = Voltage * Current Power = Voltage2 / Resistance Power = Current2 * Resistance 1-4 Embedded System automotive medical communications microcomputer appliances consumer electronics LM3S or LM4F Processor I/O Ports RAM ROM Bus ADC Ubiquitous, invisible Hidden (computer inside) Dedicated purpose MicroProcessor Embedded system Microcontroller Embedded Systems are everywhere Electrical, mechanical, chemical, or optical devices DAC Analog signals Intel: 4004, ..8080,.. x86 Motorola: 6800, .. 6812,.. PowerPC ARM, DEC, SPARC, MIPS, PowerPC, Natl. Semi.,… MicroController Processor+Memory+ I/O Ports (Interfaces) 1-5 Embedded Systems A reactive system continuously accepts inputs performs calculations generates outputs A real time system Specifies an upper bound on the time required to perform the input/calculation/output in reaction to external events 1-6 Microcontroller Processor – Instruction Set CISC vs. RISC Memory Non-Volatile o ROM o EPROM, EEPROM, Flash Volatile o RAM (DRAM, SRAM) Interfaces H/W: Ports S/W: Device Driver Parallel, Serial, Analog, Time I/O Memory-mapped vs. I/O mapped 1-7 Texas Instruments TM4C123 Cortex M4 Systick System Bus Interface NVIC GPIO Port A PA7 PA6 PA5/SSI0Tx PA4/SSI0Rx PA3/SSI0Fss PA2/SSI0Clk PA1/U0Tx PA0/U0Rx PC7 PC6 PC5 PC4 PC3/TDO/SWO PC2/TDI PC1/TMS/SWDIO PC0/TCK/SWCLK Eight UARTs Four I2Cs Four SSIs CAN 2.0 GPIO Port C GPIO Port D USB 2.0 Twelve Timers JTAG Six 64-bit wide GPIO Port E PE5 PE4 PE3 PE2 PE1 PE0 GPIO Port B ADC 2 channels 12 inputs 12 bits Advanced High Performance Bus PB7 PB6 PB5 PB4 PB3/I2C0SDA PB2/I2C0SCL PB1 PB0 PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 GPIO Port F Two Analog Comparators Two PWM Modules ARM Cortex-M4 + 256K EEPROM + 32K RAM + JTAG + Ports + SysTick + ADC + UART PF4 PF3 PF2 PF1 PF0 Advanced Peripheral Bus 1-8 Structured Programming Common Constructs (as Flowcharts) Sequence Conditional While-loop Block 1 Block 2 Parallel Fork Join Block 1 Block 2 Distributed Block Interrupt-driven concurrent Trigger main interrupt main1 main2 Init1 Init2 Init Body1 Body2 Body Return from interrupt 1-9 Flowchart Toaster oven: Cook main Output heat is on Input from switch Start Not pressed Input toast temperature Pressed Cook Too cold toast < desired toast desired Output heat is off return Coding in assembly and/or high-level language (C) 1-10 Flowchart Example 1.3. Design a flowchart for a system that performs two independent tasks. The first task is to output a 20 kHz square wave on PORTA in real time (period is 50 ms). The second task is to read a value from PORTB, divide the value by 4, add 12, and output the result on PORTD. This second task is repeated over and over. main A Input n from B PORTB n = (n/4)+12 C Output n to PORTD D Clock PORTA = PORTA^1 < E > void SysTick_Handler(void){ PORTA = PORTA^0x01; E } > void main(void){ unsigned long n; while(1){ n = PORTB; n = (n/4)+12; PORTD = n; } } A B C D 1-11 ARM Cortex M4-based System System bus Microcontroller ARM® CortexTM-M processor Input ports PPB Internal peripherals Advanced High-perf Bus Instructions Flash ROM ICode bus DCode bus Output ports Data RAM ARM Cortex-M4 processor Harvard architecture Different busses for instructions and data RISC machine Pipelining effectively provides single cycle operation for many instructions Thumb-2 configuration employs both 16 and 32 bit instructions 1-12 ARM ISA: Thumb2 Instruction Set Variable-length instructions ARM instructions are a fixed length of 32 bits Thumb instructions are a fixed length of 16 bits Thumb-2 instructions can be either 16-bit or 32-bit Thumb-2 gives approximately 26% improvement in code density over ARM Thumb-2 gives approximately 25% improvement in performance over Thumb 1-13 ARM ISA: Registers, Memory-map General purpose registers Stack pointer Link register Program counter Condition Code Bits N negative Z zero V overflow C carry R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 (MSP) R14 (LR) R15 (PC) Indicates Result is negative Result is zero Signed overflow Unsigned overflow 256k Flash ROM 32k RAM 0x0000.0000 0x0003.FFFF 0x2000.0000 0x2000.7FFF I/O ports 0x4000.0000 0x400F.FFFF Internal I/O PPB 0xE000.0000 0xE004.1FFF TI TM4C123 Microcontroller 1-14 Input/Output: TM4C123 Cortex M4 Systick System Bus Interface NVIC GPIO Port A PA7 PA6 PA5/SSI0Tx PA4/SSI0Rx PA3/SSI0Fss PA2/SSI0Clk PA1/U0Tx PA0/U0Rx PC7 PC6 PC5 PC4 PC3/TDO/SWO PC2/TDI PC1/TMS/SWDIO PC0/TCK/SWCLK Eight UARTs Four I2Cs Four SSIs CAN 2.0 GPIO Port C GPIO Port D USB 2.0 Twelve Timers JTAG Six 64-bit wide GPIO Port E PE5 PE4 PE3 PE2 PE1 PE0 GPIO Port B ADC 2 channels 12 inputs 12 bits Advanced High Performance Bus PB7 PB6 PB5 PB4 PB3/I2C0SDA PB2/I2C0SCL PB1 PB0 PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 GPIO Port F Two Analog Comparators Two PWM Modules PF4 PF3 PF2 PF1 PF0 6 General-Purpose I/O (GPIO) ports: • Four 8-bit ports (A, B, C, D) • One 6-bit port (E) • One 5-bit port (F) Advanced Peripheral Bus 1-15 I/O Ports and Control Registers Read from port address n n Processor DQ n GPIO_PORTF_DATA_R n Input/Output Port Write to port address GPIO_PORTF_DIR_R Direction bits n 1 means output DQ 0 means input Bus Write to port direction register The input/output direction of a bidirectional port is specified by its direction register. GPIO_PORTF_DIR_R , specify if corresponding pin is input or output: 0 means input 1 means output 1-16 I/O Ports and Control Registers Address 7 6 5 4 3 2 1 0 Name 400F.E608 - - GPIOF GPIOE GPIOD GPIOC GPIOB GPIOA SYSCTL_RCGCGPIO_R 4002.53FC - - - DATA DATA DATA DATA DATA GPIO_PORTF_DATA_R 4002.5400 - - - DIR DIR DIR DIR DIR GPIO_PORTF_DIR_R 4002.5420 - - - SEL SEL SEL SEL SEL GPIO_PORTF_AFSEL_R 4002.551C - - - DEN DEN DEN DEN DEN GPIO_PORTF_DEN_R • Initialization (executed once at beginning) 1. Turn on clock in SYSCTL_RCGC2_R 2. Delay for clock to stabilize 3. Set DIR to 1 for output or 0 for input 4. Clear AFSEL bits to 0 to select regular I/O 5. Set DEN bits to 1 to enable data pins • Input/output from pin 6. Read/write GPIO_PORTF_DATA_R 1-17 I/O Ports and Control Registers Address 7 6 5 4 3 2 1 0 Name 400F.E608 - - GPIOF GPIOE GPIOD GPIOC GPIOB GPIOA SYSCTL_RCGCGPIO_R 4002.53FC - - - DATA DATA DATA DATA DATA GPIO_PORTF_DATA_R 4002.5400 - - - DIR DIR DIR DIR DIR GPIO_PORTF_DIR_R 4002.5420 - - - SEL SEL SEL SEL SEL GPIO_PORTF_AFSEL_R 4002.551C - - - DEN DEN DEN DEN DEN GPIO_PORTF_DEN_R • Initialization (executed once at beginning) 1. Turn on clock in SYSCTL_RCGCGPIO_R 2. Wait for clock to stabilize 3. Set DIR to 1 for output or 0 for input 4. Clear AFSEL bits to 0 to select regular I/O 5. Set DEN bits to 1 to enable data pins • Input/output from pin 6. Read/write GPIO_PORTF_DATA_R 1-18 SW Development Environment Editor Source code KeilTM uVision® Start ; direction register LDR R1,=GPIO_PORTD_DIR_R LDR R0,[R1] ORR R0,R0,#0x0F ; make PD3-0 output STR R0, [R1] Start Debug Session Simulated Microcontroller Processor Memory I/O Build Target (F7) Object code 0x00000142 0x00000144 0x00000146 0x0000014A 4912 6808 F040000F 6008 Address Data Download Real Microcontroller Start Debug Session Processor Memory I/O 1-19 Introduction to C C is a high-level language Abstracts hardware Expressive Readable Analyzable C is a procedural language The programmer explicitly specifies steps Program composed of procedures Functions/subroutines C is compiled (not interpreted) Code is analyzed as a whole (not line by line) 1-20 Why C? C is popular C influenced many languages C is considered close-to-machine Language of choice when careful coordination and control is required Straightforward behavior (typically) Typically used to program low-level software (with some assembly) Drivers, runtime systems, operating systems, schedulers, … 1-21 Introduction to C Program structure Subroutines and functions Variables and types Statements Preprocessor DEMO Timer ISR main Timer driver ADC driver Timer hardware ADC hardware LCD driver LCD hardware 1-22 C Program (demo) Preprocessor directives Variables Sequence Conditional While-loop Functions Block 1 Statements Block 1 Block 2 Block Block 2 Expressions Names Operators Comments Syntax 1-23 Important Notes C comes with a lot of “built-in” functions printf() is one good example Definition included in header files #include<header_file.h> C has one special function called main() This is where execution starts (reset vector) C development process Compiler translates C code into assembly code Assembler (e.g. built into uVision4) translates assembly code into object code Object code runs on machine 1-24 C99 standard C99 standard Legacy int8_t signed 8-bit char uint8_t unsigned 8-bit unsigned char int16_t signed 16-bit short uint16_t unsigned 16-bit unsigned short int32_t signed 32-bit long uint32_t unsigned 32-bit unsigned long char 8-bit ASCII characters char 1-25 Logic Operations A B A&B A|B A^B A&(~B) A|(~B) 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1-26 Common Use Friendly software modifies just the bits that need to be. •The or operation to set bits 1 and 0 of a register, the other six bits remain unchanged. GPIO_PORTD_DIR_R |= 0x03; // PD1,PD0 outputs •The exclusive or operation can also be used to toggle bits. GPIO_PORTD_DATA_R ^= 0x80; // toggle PD7 •The and operation to extract, or mask, individual bits: Pressed = GPIO_PORTA_DATA_R & 0x10; //true if the PA6 switch pressed •Shift operations • Right shift: >> • Left Shift: << 1-27 Debugging Aka: Testing, Diagnostics, Verification Debugging Actions Functional debugging, input/output values Performance debugging, input/output values with time Tracing, measure sequence of operations Profiling, measure percentage for tasks, time relationship between tasks Performance measurement, how fast it executes Optimization, make tradeoffs for overall good improve speed, improve accuracy, reduce memory, reduce power, reduce size, reduce cost 1-28 Debugging Intrusiveness Intrusive Debugging degree of perturbation caused by the debugging itself how much the debugging slows down execution Non-intrusive Debugging characteristic or quality of a debugger allows system to operate as if debugger did not exist e.g., logic analyzer, ICE, BDM Minimally intrusive negligible effect on the system being debugged e.g., dumps(ScanPoint) and monitors Highly intrusive print statements, breakpoints and single-stepping 1-29 Debugging Aids in Keil Interface Breakpoints Registers including xPSR Memory and Watch Windows Logic Analyzer, GPIO Panel Single Step, StepOver, StepOut, Run, Run to Cursor Watching Variables in Assembly EXPORT VarName[DATA,SIZE=4] Command Interface (Advanced but useful) WS 1, `VarName,0x10 LA (PORTD & 0x02)>>1 1-30 … Debugging Instrumentation: Code we add to the system that aids in debugging E.g., print statements Good practice: Define instruments with specific pattern in their names Use instruments that test a run time global flag leaves a permanent copy of the debugging code causing it to suffer a runtime overhead simplifies “on-site” customer support. Use conditional compilation (or conditional assembly) Keil supports conditional assembly Easy to remove all instruments Visualization: How the debugging information is displayed 1-31