2/19/2012
I HC QUC GIA TP.H CH MINH TRNG I HC BCH KHOA
KHOA IN-IN T
B MN K THUT IN T
Embedded System Design
Chapter 2: Microcontroller Series (Part 2)
2. ARM Cortex-M Series 2.1 Introduction to ARM processors 2.2 ARM Cortex-M3 2.3 ARM programming
References
Textbook
Joseph Yiu, The Definitive Guide to the ARM Cortex-M3, Elsevier Newnes, 2007
Websites
www.arm.com www.st.com www.ti.com
B mn K Thut in T - HBK
2/19/2012
2.1 Introduction to ARM processors
ARM (Advanced RISC Machine)
is the industry's leading provider of 32-bit embedded microprocessors offering a wide range of processors that deliver high performance, industry leading power efficiency and reduced system cost
B mn K Thut in T - HBK
2.1 Introduction to ARM processors
Cortex-A Series - High performance processors for open Operating Systems Cortex-R Series - Exceptional performance for real-time applications Cortex-M Series - Cost-sensitive solutions for deterministic microcontroller applications
B mn K Thut in T - HBK
2/19/2012
2.1 Introduction to ARM processors
The Cortex processor families are the first products developed on architecture v7 Cortex-M3 processor is based on one profile of the v7 architecture
B mn K Thut in T - HBK
2.1 Introduction to ARM processors
Cortex-M Series:
Easy to use: Global standard across multiple vendors, code compatibility, unified tools and OS support Low cost: smaller code, high density instruction set, small memory requirement High performance: deliver more performance per MHz, enable richer features at lower power Energy efficiency: run at lower MHz or with shorter activity periods
Cortex-M Series applications
Microcontrollers Mixed signal devices Smart sensors Automotive body electronics and airbags
B mn K Thut in T - HBK
2/19/2012
2.2 ARM Cortex-M3
32-bit embedded processor Improved code density Enhanced determinism, quick interrupts Low power consumption Lower-cost solutions (less than US$1) Wide choice of development tools
LPC1754FBD80
AT91SAM7S64-AU
STM32F103RCT6
LM3S3749
7
B mn K Thut in T - HBK
2.2 ARM Cortex-M3 - Fundamentals
32-bit microprocessor
32-bit data path 32-bit register bank 32-bit memory interface
Harvard architecture
separate instruction bus and data bus share the same memory space difference length of code and data
Endian mode
both little Endian and big Endian are supported (setup at the time of core reset) In most cases, Cortex-M3-based microcontrollers will be little endian. Instruction fetches are always in little endian PPB accesses are always in little endian.
B mn K Thut in T - HBK
8
2/19/2012
2.2 ARM Cortex-M3 - Fundamentals
Harvard architecture
B mn K Thut in T - HBK
2.2 ARM Cortex-M3 - Registers
Registers
R0 R12: general purpose registers R13: stack pointers R14: link register (store return address) R15: program counter
Special Registers
Program Status Registers (PSRs) Interrupt Mask Registers (PRIMASK, FAULTMASK, BASEPRI) Control Register (CONTROL)
B mn K Thut in T - HBK
10
2/19/2012
2.2 ARM Cortex-M3 - Registers
Special registers in the Cortex-M3
B mn K Thut in T - HBK
11
2.2 ARM Cortex-M3 - Registers
Program Status Registers
Application PSR (APSR) Interrupt PSR (IPSR) Execution PSR (EPSR)
B mn K Thut in T - HBK
12
2/19/2012
2.2 ARM Cortex-M3 - Registers
The Control register
has two bits used to define the privilege level and the stack pointer selection.
B mn K Thut in T - HBK
13
2.2 ARM Cortex-M3 - Stack Pointer
Cortex-M3 processor has two stack pointers
Main Stack Pointer (MSP): used by the OS kernel, exception handlers Process Stack Pointer (PSP): Used by the base-level application code
When using the register name R13, you can only access the current stack pointer
B mn K Thut in T - HBK
14
2/19/2012
2.2 ARM Cortex-M3 PUSH & POP
The stack pointer (SP) points to the last data pushed to the stack memory, The SP decrements before a new PUSH operation
B mn K Thut in T - HBK
15
2.2 ARM Cortex-M3 Operation Modes
Cortex-M3 has 2 modes and two privilege levels
Allowed Operation Mode Transitions
B mn K Thut in T - HBK
16
2/19/2012
2.2 ARM Cortex-M3 Operation Modes
Software in a privileged access level can switch the program into the user access level using the Control register
Switching Processor Mode at Interrupt
B mn K Thut in T - HBK
17
2.2 ARM Cortex-M3 - Interrupt
The Built-In Nested Vectored Interrupt Controller (NVIC) provides a number of features:
Nested interrupt support: different priority levels Vectored interrupt support: interrupt vector table in memory Dynamic priority changes support: Priority levels of interrupts can be changed during run time. Reduction of interrupt latency: automatic saving and restoring some register contents, reducing delay in switching Interrupt masking: Interrupts and system exceptions can be masked
B mn K Thut in T - HBK
18
2/19/2012
2.2 ARM Cortex-M3 - Interrupt
Control[1] = 0: Both Thread Level and Handler Use Main Stack
Control[1] = 1: Thread Level Uses Process Stack and Handler Uses Main Stack
B mn K Thut in T - HBK
19
2.2 ARM Cortex-M3 Memory Map
The 4 GB memory space can be divided into the ranges shown in Figure:
B mn K Thut in T - HBK
20
10
2/19/2012
2.2 ARM Cortex-M3 Bus Interface & MPU
Bus Interface
Code memory bus for code memory, consist of two buses: I-Code and D-code System bus: for memory and peripherals Private peripheral bus: for private peripherals such as debugging components
Memory Protection Unit (MPU)
allow access rules for privilege access and user program access When an access rule is violated, a fault exception is generated MPU is setup by an OS allowing data used by privileged code to be protected from untrusted user programs
B mn K Thut in T - HBK
21
2.2 ARM Cortex-M3 Instruction set
Instruction Set:
support thumb-2 instruction set. allow 32-bit and 16-bit instructions
Traditional ARM processor has two operation states:
32-bit ARM state 16-bit Thumb state
To get the best of both worlds, many applications have mixed ARM and Thumb codes Advantages over traditional ARM processor of ARM Cortex M3
No state switching overhead, saving both execution time and instruction space No need to separate ARM code and Thumb code source files easier to write software, because there is no need to worry about switching code between ARM and Thumb
B mn K Thut in T - HBK
22
11
2/19/2012
2.2 ARM Cortex-M3 - Exceptions
The interrupt features in the Cortex-M3 are implemented in the NVIC
B mn K Thut in T - HBK
23
2.2 ARM Cortex-M3 - Exceptions
The number of external interrupt inputs is defined by chip manufacturers. A maximum of 240 external interrupt inputs can be supported
B mn K Thut in T - HBK
24
12
2/19/2012
Questions
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. What are differences among Cortex- A, -R, and -M series? What is Harvard architecture? How many general purpose registers in Cortex-M3 are there? How many special registers in Cortex-M3 are there? What are difference between little endian and big endian? How many allowed operation modes in Cortex-M3 are there? What is functions of control register in Cortex-M3? What are features of NVIC in Cortex-M3? What is the maximum memory space of Cortex-M3? What is the size of memory space for external RAM? Can program code can be executed from an external RAM region? Does Cortex-M3 support ARM code? Why is Thumb-2 instruction set more advanced than previous?
B mn K Thut in T - HBK
25
2.3 ARM Programming
Using Assembly
for small projects can get the best optimization, smallest memory size increase development time, easy to make mistakes
Using C
easier for implementing complex operations larger memory size able to include assembly code (inline assembler) Tools: RealView Development Suite (RVDS), KEIL RealView
Microcontroller Development Kit
B mn K Thut in T - HBK
26
13
2/19/2012
2.3 ARM Programming
Typical development flow
B mn K Thut in T - HBK
27
2.3 ARM Programming Simple program
This simple program contains the initial SP value, the initial PC value, and setup registers and then does the required calculation in a loop. STACK_TOP EQU 0x20002000 ; constant for SP starting value AREA |Header Code|, CODE DCD STACK_TOP ; Stack top DCD Start ; Reset vector ENTRY ; Indicate program execution start here ; Start of main program initialize registers MOV r0, #10 ; Starting loop counter value MOV r1, #0 ; starting result ; Calculated 10+9+8+...+1 ADD r1, r0 ; R1R1 + R0 SUBS r0, #1 ; Decrement R0, update fl ag (S suffi x) BNE loop ; If result not zero jump to loop, ; result is now in R1 B deadloop ; Infi nite loop END ; End of file
28
Start
loop
deadloop
B mn K Thut in T - HBK
14
2/19/2012
2.3 ARM Programming - Simple program
Compile a assemply code
armasm --cpu cortex-m3 -o test1.o test1.s
Link to executable image
armlink --rw_base 0x20000000 --ro_base 0x0 --map -o test1.elf test1.o
Create the binary image
fromelf --bin --output test1.bin test1.elf
generate a disassembled code list file
fromelf -c --output test1.list test1.elf
B mn K Thut in T - HBK
29
2.3 ARM Programming
Using EQU to define constants
NVIC_IRQ_SETEN0 EQU 0xE000E100 NVIC_IRQ0_ENABLE EQU 0x1 LDR R0,NVIC_IRQ_SETEN0 MOV R1,#NVIC_IRQ0_ENABLE ; Move immediate data to register STR R1, [R0] ; Enable IRQ 0 by writing R1 to address in R0
Using DCI to code an instruction
DCI 0xBE00 ; Breakpoint (BKPT 0), a 16-bit instruction
Using DCB and DCD to define binary data
MY_NUMBER DCD 0x12345678 HELLO_TXT DCB Hello\n,0 ; null terminated string
B mn K Thut in T - HBK
30
15
2/19/2012
2.3 ARM Programming Moving data
Data transfers can be of one of the following types:
Moving data between register and register Moving data between memory and register Moving data between special register and register Moving an immediate data value into a register
MOV MOV MOV MRS MSR R8, R3 R0, #0x12 R1, #A R0, PSR CONTROL, R1 ; moving data from register R3 to register R8 ; Set R0 = 0x12 (hexadecimal) ; Set R1 = ASCII character A ; Read Processor status word into R0 ; Write value of R1 into control register ; R0 set to 0x4001
LDR R0, address1 ... address1 0x4000: MOV R0, R1
B mn K Thut in T - HBK
; address1 contains program code
31
2.3 ARM Programming Using Stack
Stack PUSH and POP
subroutine_1 PUSH {R0-R7, R12, R14} ; Do your processing POP {R0-R7, R12, R14} BX R14 ; Save registers ; Restore registers ; Return to calling function
Link register (LR or R14)
main BL function1 ; Main program ; Call function1 using Branch with Link ; instruction. ; PC function1 and ; LR the next instruction in main
function1 BX LR ; Return
B mn K Thut in T - HBK
; Program code for function 1
32
16
2/19/2012
2.3 ARM Programming Special Register
Special registers can only be accessed via MSR and MRS instructions
MRS MSR <reg>, <special_reg> <special_reg>, <reg> ; Read special register ; write to special register
ASP can be changed by using MSR instruction, but EPSR and IPSR are readonly
MRS MRS MRS MSR MRS MSR r0, APSR r0, IPSR r0, EPSR APSR, r0 r0, PSR PSR, r0 ; Read Flag state into R0 ; Read Exception/Interrupt state ; Read Execution state ; Write Flag state ; Read the combined program status word ; Write combined program state word
B mn K Thut in T - HBK
33
2.3 ARM Programming Special Register
To access the Control register, the MRS and MSR instructions are used:
MRS MSR r0, CONTROL CONTROL, r0 ; Read CONTROL register into R0 ; Write R0 into CONTROL register
B mn K Thut in T - HBK
34
17
2/19/2012
2.3 ARM Programming
16-Bit Load and Store Instructions
B mn K Thut in T - HBK
35
2.3 ARM Programming
16-Bit Branch Instructions
B mn K Thut in T - HBK
36
18
2/19/2012
2.3 ARM Programming Arithmetic Instructions
B mn K Thut in T - HBK
37
2.3 ARM Programming IF-THEN
The IF-THEN (IT) instructions allow up to four succeeding instructions (called an IT block) to be conditionally executed. They are in the following formats: IT<x> <cond> IT<x><y> <cond> IT<x><y><z> <cond> where: <x > specifi es the execution condition for the second instruction <y > specifi es the execution condition for the third instruction <z > specifi es the execution condition for the fourth instruction
B mn K Thut in T - HBK
38
19
2/19/2012
2.3 ARM Programming IF-THEN
B mn K Thut in T - HBK
39
2.3 ARM Programming IF-THEN
An example of a simple conditional execution
if (R1<R2) then R2=R2-R1 R2=R2/2 else R1=R1-R2 R1=R1/2 In assembly: CMP ITTEE R1, R2 LT ; If R1 < R2 (less then) ; then execute instruction 1 and 2 ; (indicated by T) ; else execute instruction 3 and 4 ; (indicated by E) ; 1st instruction ; 2nd instruction ; 3rd instruction (notice the GE is opposite of LT) ; 4th instruction
40
SUBLT.W R2,R1 LSRLT.W R2,#1 SUBGE.W R1,R2 LSRGE.W R1,#1
B mn K Thut in T - HBK
20
2/19/2012
2.3 ARM Programming Using Data Memory
STACK_TOP EQU 0x20002000 ; constant for SP starting value AREA | Header Code|, CODE DCD STACK_TOP ; SP initial value DCD Start ; Reset vector ENTRY ; Start of main program, initialize registers MOV r0, #10 ; Starting loop counter value MOV r1, #0 ; starting result. Calculated 10+9+8+...+1 ADD r1, r0 ; R1 = R1 + R0 SUBS r0, #1 ; Decrement R0, update fl ag (S suffi x) BNE loop ; If result not zero jump to loop; Result is now in R1 LDR r0,=MyData1 ; Put address of MyData1 into R0 STR r1,[r0] ; Store the result in MyData1 B deadloop ; Infi nite loop AREA | Header Data|, DATA ALIGN 4 DCD 0 ; Destination of calculation result DCD 0 END ; End of file
41
Start
loop
deadloop
MyData1 MyData2
B mn K Thut in T - HBK
2.3 ARM Programming
A Low-Cost Test Environment for Outputting Text Messages
UART interface is common output method to send messages to a console Hyper-Terminal program can be used as a console
B mn K Thut in T - HBK
42
21
2/19/2012
2.3 ARM Programming
A simple routine to output a character through UART
UART0_BASE UART0_FLAG UART0_DATA Putc EQU 0x4000C000 EQU UART0_BASE+0x018 UART0_BASE+0x000 ; Subroutine to send a character via UART ; Input R0 = character to send PUSH {R1,R2, LR} ; Save registers LDR R1,=UART0_FLAG PutcWaitLoop LDR R2,[R1] ; Get status fl ag TST R2, #0x20 ; Check transmit buffer full flag bit BNE PutcWaitLoop ; If busy then loop LDR R1,=UART0_DATA ; otherwise STRB R0, [R1] ; Output data to transmit buffer POP {R1,R2, PC} ; Return The register addresses and bit definitions here are just examples
B mn K Thut in T - HBK
43
ARM Development Kit
Mini2440 | S3C2440 ARM9 Board
CPU: 400 MHz Samsung S3C2440A ARM920T RAM: 64 MB SDRAM, 32 bit Bus Flash: 256 MB NAND Flash and 2 MB NOR Flash with BIOS EEPROM: 256 Byte (I2C)
LM3S9B96 development Kit
Stellaris LM3S9B96 MCU with fully-integrated Ethernet, CAN, and USB OTG/Host/Device Bright 3.5" QVGA LCD touch-screen display Navigation POT switch and select pushbuttons Integrated Interchip Sound (I2S) Audio Interface
IC Design Lab, 116B1
B mn K Thut in T - HBK
44
22
2/19/2012
Assignments
1. 2. 3. 4. 5. Write a program to move 10 words from 0x20000000 to 0x3000000. Write a program to read STATUS register and write to 0x20000004 Write a program to write a value in 0x30000000 to CONTROL register Write a subroutine to perform a function 40*X + 50 Write a subroutine to convert data of 10 words form big endian to little endian. 6. Write a program as pseudo code below: if (R0 equal R1) then { R3 = R4 + R5 R3 = R3 / 2 } else { R3 = R6 + R7 R3 = R3 / 2 }
B mn K Thut in T - HBK
45
23