1. Introduce some of the ARM architecture to students. 2. Begin to use the lab tool - Keil uVision. 3. The students will create a project and write an ARM assembly language program based on a simulated target.The ARM (Advanced RISC Machine) architecture is introduced in the class (also see http://www.arm.com.) Keil MDK-ARM is a complete software development toolkit for ARM processor-based microcontrollers. Keil uVision5 will be used in the lab. The ARM Cortex-M3 processor will be examined with the STM32VLDISCOVERY board. The following is some important information for you.
1. In the lab room CL105, computers are running the operating system Windows 10 Pro, and ARM Software Microcontroller Development Kit Version 5.21a (Keil uVision5) is installed. 2. To install it on your home computer, you can download the following files:
~ftp/pub/class/301/ftp/uVision5/Keil.STM32F1xx_DFP.2.1.0.pack 3. To know more about Keil, visit http://www.keil.com/ 4. To know more about the ARM Cortex-M family, visit http://www.arm.com/products/processors/cortex-m/index.php 5. To see STM32VLDISCOVERT board, visit STM32VLDISCOVERY Board.
To create an assembly language program, you need to use a text editor such as NotePad in Microsoft Windows environment. There is a text edit in the Keil uVision5 for you to use too. The file name must have a .s at the end. Let's look at the following program called FirstArm.s on a PC. The file FirstArm.s contains the source code of the program to load registers and demonstrate a few other operations. We will use Keil uVision5 to create a project and execute this program so that you can get a feel of how Keil uVision5 works.
;The semicolon is used to lead an inline documentation ;This is the first ARM Assembly language program you see in the lab ;This program skeleton was from Dave Duguid and Trevor Douglas in summer 2013. ;When you write your program, you could have your info at the top document block ;For Example: Your Name, Student Number, what the program is for, and what it does etc. ;;; Directives PRESERVE8 THUMB ; Vector Table Mapped to Address 0 at Reset ; Linker requires __Vectors to be exported AREA RESET, DATA, READONLY EXPORT __Vectors __Vectors DCD 0x20001000 ; stack pointer value when stack is empty DCD Reset_Handler ; reset vector ALIGN ; The program ; Linker requires Reset_Handler AREA MYCODE, CODE, READONLY ENTRY EXPORT Reset_Handler Reset_Handler ;;;;;;;;;;User Code Starts from the next line;;;;;;;;;;;; MOV R0, #12 STOP ADD R0, R0, #4 B STOP END ;End of the programReferences:
You can start up uVision5 by clicking on the icon
from the desktop or from the "Start" menu or "All Programs" on a lab PC.
The following screen is what you will see.
Let's create our first ARM uVision5 project now.
To create a project, click on the "Project" menu from the uVision5 screen
and select "New uVision Project...".
Then, select the folder that you prepared for, give project a name and save it.
From the "Select Device for Target" window, select "STMicroelectronics" and then "STM32F1 Series".
click on "+" beside "STM32F100" and then select "STM32F100RB" and click on "OK".
Make sure you click on "OK" for the following pop up window.
You will see the following window and make the suggested selctions to proceed.
You will see the "FirstARM.s*" text edit window. That is the place you will write your ARM Assembly language program. For a test, you can copy and paste the example program into this window. You can click on the "save" buttom to save your project.
You can right click on "Target 1" and select "options for Target 'Target 1'..." to see the following screen.
You have the chance to selct "Use Simulator" or "Use ST-Link Debugger" with the circuit board.
To "Use ST-Link Debugger" with the circuit board, make sure the "Settings" are the same as follows.
Click on "OK" for the pop up window showing "EVALUATION MODE, Running with Code Size Limit: 32K".
Open your uVision5 to full screen to have a better and complete view.
The left hand side window shows you the registers and the right side
window shows the program code. There are some other windows open.
You may adjust the size of them to see better.
Run the program step by step, you can observe the change of the values in the registers.
Click on the "Start/Stop Debug Session" from the "Debug" menu or click on the debug button to stop executing the program.
We will analyze the program and see how it works.
It works with both the simulated target and the real circuit board STM32VLDISCOVERY Board.
I will demonstrate it in the lab for you.
Here is a diagram of the ARM architecture for your reference.
ARM Architecture is an Enhanced RISC Architecture. It has large uniform Register file and uses Load Store Architecture. i.e. operations operate on registers and not in memory locations. ARM Architecture instructions are of uniform and fixed length. It is a 32 bit processor. It also has 16 bit variant called THUMB. i.e. it can be used as 32 bit and as 16 bit processor.Here is a link with more info.
ARM cores are licensed to partners/manufacturers so as to develop
and fabricate new microcontrollers around same processor cores.
A microcontroller is a small computer on a single integrated circuit
containing a processor core, memory, and programmable input/output peripherals.
The ARM Cortex-M3 microcontroller will be used in the lab with the
For more information, visit STM32VLDISCOVERY Board.
Here is the Register Organization in ARM State.
Here is the Register Organization in THUMB State.
Here is the Program Status Register Format:
In ARM State, there are 16 general purpose registers; one or more status registers are accessible at any one time. In THUMB State, there are 8 general purpose registers; PC, SP, LR and CPSR are accessible. Conditonion code flags in CPSR: N - Negative or less than flag Z - Zero flag C - Carry or bowrrow or extendedflag V - Overflow flagA link to Register Organization for your reference: reference.
MOV R2, #0x76 ; Move the 8-bit Hex number 76 to the low portion of R2 MOV R2, #0x7654 ; Move the 16-bit Hex number 7654 to the low portion of R2 MOVT R2, #0x7654 ; Move the 16-bit Hex number 7654 to the high portion of R2 MOV32 R2, #0x76543210 ; Move the 32-bit Hex number 76543210 to the R2 LDR R2, = 0x76543210 ; Load R2 with the 32-bit Hex number 76543210 ADD R1, R2, R3 ; R1 = R2 + R3 ADDS R1, R2, R3 ; R1 = R2 + R3, and FLAGs are updated SUB R1, R2, R3 ; R1 = R2 - R3 SUBS R1, R2, R3 ; R1 = R2 - R3, and FLAGs are updated B LABEL ; Branch to LABELThe entire list of the Instructions can be found in the Cortex-M3 Devices Generic User Guide. Chapter 3: The Cortex-M3 Instruction Set.
Tuesday, 23-Jan-2018 18:49:35 CST