mcb1700 LAB - Intro - ARM Cortex m3
mcb1700 LAB - Intro - ARM Cortex m3
ARM Keil MDK Toolkit featuring Serial Wire Viewer and ETM Trace
Version 4.7
by Robert Boys
Introduction:
bob.boys@arm.com
The purpose of this lab is to introduce you to the NXP Cortex-M3 processor using the Keil MDK-ARM Microcontroller
Development Kit featuring Vision. MDK also contains a simulator. We will use the Serial Wire Viewer (SWV) on the
LPC1768 or LPC1765 rather than the simulator in this lab. At the end of this tutorial, you will be able to confidently work
with these processors and Keil MDK. The Keil MDK you will be using supports all NXP ARM processors including Serial
Wire Viewer and ETM trace. Check the Keil Device Database on www.keil.com/dd for the complete list of NXP support.
Keil MDK comes in an evaluation version that limits code and data size to 32 Kbytes. Nearly all Keil examples will compile
within this 32K boundary. The addition of a license number will turn it into the full, unrestricted version. Keil also provides
middleware in MDK-Professional. This package includes a TCP/IP stack, CAN drivers, a Flash file system and USB drivers.
See the last page of this document for details on MDK and ARM contact information.
Serial Wire Viewer (SWV) with ULINK2, ULINK-ME and ULINKpro. ETM Trace using ULINKpro.
Real-time Read and Write to memory locations for Watch, Memory and RTX Tasks windows. These are nonintrusive to your program. No CPU cycles are stolen. No instrumentation code is added to your source files.
Six Hardware Breakpoints (can be set/unset on-the-fly) and four Watchpoints (also called Access Breaks).
RTX Viewer: a kernel awareness program for the Keil RTX RTOS that updates while the program is running.
www.keil.com
Software Installation:
This document was written for Keil MDK 4.53 which contains Vision4. MDK is available on the Keil website and the
specific example files are included with this document. Example files are subject to improvement and can change. Use the
files specified for this document. Do not confuse Vision4 with MDK 4.0. The number 4 is a coincidence.
If you have a previous version of MDK 4, do not uninstall it; just install the new version on top. For a clean install, erase
your project directories.
You can use the evaluation version of MDK and a ULINK2, ULINK-ME, ULINKpro or a Segger J-Link for these exercises.
If you are using a Segger J-Link, you do not need to install any additional files. You will need to configure Vision to use
the J-Link to run programs and program the Flash memory. This is easy to do. J-Link Version 6 and later supports Serial
Wire Viewer with Keil Vision.
Index:
1.
2.
Hardware Breakpoints:
3.
4.
5.
6.
7.
8.
9.
10
10
11
12
13
14
15
16
18
19
21
22
2
www.keil.com
1) Blinky example program using the Keil MCB1700 and ULINK2 or ULINK-ME:
Now we will connect up a Keil MDK development system using real target hardware and a ULINK2 or ULINK-ME. These
examples will also run on the MCB1750 which uses a LPC1758 processor.
1.
2.
1.
2.
3.
4.
Select the Debug tab. The bottom window below opens up.
6.
In Port: select SWJ and SW. You can use JTAG if you are not going to use Serial Wire Viewer (SWV).
7.
In the SW Device area: ARM CoreSight SW-DP MUST be displayed. This confirms you are connected to the
target processor. If there is an error displayed or it is blank this must be fixed before you can continue. Check the
target power supply. Cycle the power to the ULINK and the board.
TIP: To refresh this screen select Port: and change it or click OK once to
leave and then click on Settings again.
TIP: You can do regular debugging using JTAG. SWD and JTAG operate
at approximately the same speed. Serial Wire Viewer (SWV) will not
operate in JTAG mode.
8.
9.
.
Progress will be indicated in the Output Window.
Note: This program is now running on the Cortex-M3 processor in the LPC1700. If you remove the ULINK2/ME, this
program will run standalone as you have programmed it in the Flash. This is the complete development cycle.
3
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
2) Hardware Breakpoints:
1.
With Blinky running, click in the left margin on a darker gray block somewhere appropriate in the while(1) loop
between Lines 062 through 088 in the source file Blinky.c as shown below: Click on the Blinky.c tab if not visible.
2.
A red circle is created and soon the program will stop at this point as shown below.
3.
The yellow arrow is where the program counter is pointing to in both the disassembly and source windows. This
instruction has not been executed yet.
4.
The cyan arrow is a mouse selected pointer and is associated with the yellow band in the disassembly window.
Click on a line in one window and this place will be indicated in the other window.
5.
Note you can set and unset hardware breakpoints while the program is running. ARM CoreSight debugging
technology does this. There is no need to stop the program for many other CoreSight features.
6.
The LPC1700 family has 6 hardware breakpoints. A breakpoint does not execute the instruction it is set to.
under the
Local Variables:
The Call Stack and Local windows are incorporated into
one integrated window. Whenever the program is
stopped, the Call Stack + Locals window will display call
stack contents as well as any local variables belonging to
the active function.
If possible, the values of the local variables will be
displayed and if not the message <not in scope> will be
displayed. The Call + Stack window presence or visibility
can be toggled by selecting View/Call Stack window.
1.
Click on the Call Stack + Locals tab. Stop the program if necessary.
2.
3.
The contents of three local variables in the main() function are displayed as well as the function name(s).
4.
Using RUN, Step, Step Over and Step Out to enter and exit various functions, this window will update .
5.
Set a breakpoint at an appropriate place in GLCD_SPI_LPC1700.c source file and select RUN to see other Locals.
TIP: This is standard Stop and Go debugging. ARM CoreSight debugging technology can do much better than this. You
can display global or static variables updated in real-time while the program is running. No additions or changes to your
code are required. Update while the program is
running is not possible with local variables. They must
be converted to global or static variables so they always
remain in scope.
Call Stack:
The list of stacked functions is displayed when the
program is stopped. This is when you need to know
which functions have been called and are stored on the
stack.
6. Remove all hardware breakpoints by clicking on its red circle ! There are various options in the
Debug selection when in debug mode to manage breakpoints such as Kill All Breakpoints.
4
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
In the source file ADC.c is the global variable AD_last near line 21. Select File/Open to access ADC.c if needed.
2.
3.
Open a Watch window by selecting View/Watch Windows/Watch 1 in the main Vision window.
4.
5.
6.
7.
8.
TIP: To Drag n Drop into a tab that is not active, pick up the variable and hold it over the tab you want to open; when it
opens, move your mouse into the window and release the variable.
Memory window:
1.
Drag n Drop AD_last into the Memory window or enter it manually. You can also right-click on AD_last and
select Add AD_last to Rotate the pot and watch the memory window.
2.
Note the value of AD_last is displaying its address in Memory 1 as if it is a pointer. This is useful to see what
address a pointer is pointing at but this not what we want to see at this time.
3.
Add an ampersand & in front of the variable name and press Enter. Now the address of AD_last is shown
(0x10000028 in this case).
4.
5.
6.
TIP: You are able to configure the Watch and Memory windows and
change their values while the program is still running in real-time without
stealing any CPU cycles. See the next page for an example.
You can insert a number in a Watch or Memory window in real-time: No CPU cycles are stolen !
7.
8.
In the source file Blinky.c add a global variable counter near line 30 like this: unsigned int counter = 0;
9.
In the main function add the line counter++; just after the printf statement near line 89.
12. Enter the variable counter in the Watch 1 window by your preferred method. Note it increments every second.
13. Double-click on the value field for counter in the Watch window.
14. When it is highlighted, enter 0x0 or just 0 and press Enter.
15. counter will be set to zero or to any other number you entered. You can also do this in the memory window by
5
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
In the declaration for ad_value add static like this and recompile:
int main (void) {
uint32_t ad_avg = 0;
static uint16_t ad_val = 0, ad_val_ = 0xFFFF;
2.
TIP: You can edit files in edit or debug mode, but can compile them only in edit mode.
3.
Compile the source files by clicking on the Build icon or press F7. Hopefully they compile with no errors or
warnings.
4.
TIP: To program the Flash automatically when you enter Debug mode select Options For Target
tab and select the Update Target before Debugging box.
5.
6.
Remove the breakpoint you previously set and click on RUN. You can use Debug/Kill All Breakpoints to do this.
7.
8.
Stop the CPU and exit debug mode for the next step. Click on
and then
How It Works:
Vision uses ARM CoreSight technology to read or write memory locations without stealing any CPU cycles. This is nearly
always non-intrusive and does not impact the program execution timings. Remember the Cortex-M3 is a Harvard
architecture. This means it has separate instruction and data buses. While the CPU is fetching instructions at full speed,
there is plenty of time for the CoreSight debug module to read or write values without stealing any CPU cycles.
This can be slightly intrusive in the unlikely event the CPU and Vision reads or writes to the same memory location at
exactly the same time. Then the CPU will be stalled for one clock cycle. In practice, this cycle stealing never happens.
TIP: If various windows update only when the programs stops, make sure the update is selected:
In the main menu select View/Periodic Window Update:
6
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
6) RTX_Blinky Example Program with Keil RTX RTOS: A Stepper Motor example
Keil provides RTX, a full feature RTOS. RTX now comes with a BSD type license. This means it is free and no licensing or
product fees or royalties are payable with RTX. RTX is easy to implement full feature RTOS with up to 255 tasks.
Users often want to know the current operating task number and the status of the other tasks. This information is usually
stored in a structure or memory area by the RTOS. Keil provides two Task Aware windows for RTX by accessing this
information. Other RTOS companies also provide awareness plug-ins for Vision. Any RTOS ported to a Cortex-M or R
processor will compile with MDK. See www.keil.com/rl-arm/kernel.asp for complete RTX details.
RTX is a Keil produced RTOS that is provided with MDK. Source code is provided with all versions of MDK.
TIP: You can also run this program with the simulator.
1.
Start Vision4 by clicking on its icon on your Desktop if it is not already running.
2.
3.
4.
5.
6.
The LEDs will blink indicating the waveforms of a stepper motor driver. This will also be displayed on the LCD
screen. Click on STOP
.
1.
Click on the RTX_Conf_CM.c source file tab as shown below on the left. You can open it with File/Open or
double-click on it in the Project window if you are not in Debug mode.
2.
Click on Configuration Wizard at the bottom and your view will change to the Configuration Wizard.
3.
Open up the individual directories to show the various configuration items available.
4.
See how easy it is to modify these settings here as opposed to finding and changing entries in the source code.
5.
This is a great feature as it is much easier changing items here than in the source code.
6.
You can create Configuration Wizards in any source file with the scripting language as used in the Text Editor.
7.
This scripting language is shown below in the Text Editor as comments starting such as a </h> or <i>.
8.
The Vision4 System Viewer windows used to display the peripherals are created in a similar fashion.
Text Editor
Configuration Wizard
TIP: Vision windows can be floated anywhere. You can restore them by selecting Window/Reset Views to
default. Vision supports dual monitors.
7
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
2.
In order to get the Event Viewer working we have to configure the Serial Wire Viewer section of Vision. This is easy to do.
1.
2.
3.
Select the Debug tab and then click the Settings box
next to ULINK Cortex Debugger dialog.
4.
5.
6.
7.
8.
9.
8
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
1.
2.
Add 4 global variables unsigned int phasea through unsigned int phased to Blinky.c as shown here:
3.
Add 2 lines to each of the four tasks Task1 through Task4 in Blinky.c as shown
below: phasea=1; and phasea=0; :the first two lines are shown added at lines 081
and 084 (just after LED_On and LED_Off function calls. For each task, add the
corresponding variable assignment statements phasea, phaseb, phasec and phased.
4.
We do this because in this example program there are not enough global or static
variables to connect to the Logic Analyzer.
TIP: The Logic Analyzer can display static and global variables, structures and arrays. It
cant see locals: make them static. To see peripheral registers values, read or write to them.
Program the Flash
5.
6.
7.
8.
9.
TIP: You can also enter these variables into the Watch and Memory windows to display and modify them in real-time.
9
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
You need to have configured Serial Wire Viewer (SWV) in xyzxyz under Event Viewer: Configuring the Serial Wire Viewer:
Wwe will examine some of the features available to you. SWV works with uVision and a ULINK2, ULINK-ME, ULINKpro
or a Segger J-Link V6 or higher. SWV is included with MDK and no additional equipment or software need be purchased.
Everything shown here is done without stealing any CPU cycles and is completely non-intrusive. A user program runs at full
speed and needs no code stubs or instrumentation software added to your programs.
1.
Use RTX_Blinky from the last exercise. Enter Debug mode and run the program if not already running.
2.
3.
4.
5.
6.
7.
Click on OK to return.
8.
9.
2.
The Address column shows where the four variables are located.
3.
4.
5.
www.keil.com
The LPC1700 family has many interrupts and it can be difficult to determine when or how many times they are activated.
Serial Wire Viewer on the LPC1700 family makes this easy.
1.
2.
3.
4.
Click OK twice.
5.
6.
7.
What Is Happening ?
1.
2.
3.
4.
5.
6.
TIP: The SWO pin is a one pin output on the LPC1700 family processors that all SWV information is fed out. There are
limitations on how much information we can feed out this one pin. These exceptions are happening at a very fast rate.
1.
2.
3.
4.
5.
6.
All this information is displayed in real-time and without stealing CPU cycles !
TIP: Num is the exception number: RESET is 1. External interrupts start at Num 16. For LPC1768, 41 is CAN IRQ. This
is found in the LPC17xx Users Manual. Num 41 is also known as 41-16 = External IRQ 25.
11
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
External Interrupt Example: EXTI This example uses a ULINK2/ME. You can configure a ULINKpro or J-Link.
Serial Wire Viewer can help debug many tricky interrupt issues. The project EXTI is available to demonstrate these
powerful SWV features. The Serial Wire Viewer must be configured.
In this program the button INT0 is connected to a GPIO port (p2.10) and each time it is pressed an interrupt is generated.
1.
3.
4.
5.
Select EXCTRC, unselect Periodic and on Data R/W Sample. Click on OK twice to return to the main menu.
and select the Debug tab. Confirm the SJ box is checked and SW is selected.
The Trace Records and Exception Trace windows should still be open. Open them if they are not.
7.
Press the INT0 button and EXTIrq 21 (Number 37) will display. You may have to scroll down to see this.
8.
When you press the INT0 button, Exception 37 events are displayed in both windows.
9.
The interrupt handler function EINT3_IRQHandler() is executed each time you press INT0.
1.
2.
3.
4.
5.
6.
i++)
and enter the two C lines to the beginning of the interrupt handler found in EXTI.c.
12
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
PC Samples:
Serial Wire Viewer can only display a sampling of the program counter. To capture all of the PCs use the ETM trace. ETM
is perfect to find problems associated with program flow such as I went into the weeds and how did I get here?.
SWV can display at best every 64th instruction (with ULINKpro). It is better to keep the sample rate as high as possible to
avoid overloading the Serial Wire Output (SWO) pin. This is easily set in the Trace configuration window.
1.
2.
Unselect EXCTRC, On Data R/W Sample and select Periodic in the PC Sampling area.
3.
4.
5.
6.
7.
8.
Not all the PCs will be captured. Still, PC Samples can give you some idea of where your program is; especially if it
is caught in a loop (like at 0x6DE).
9.
13
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
Open the RTX_Blinky project you used before. You can select it at the bottom of Project menu in the recent files
list.
2.
Add this code to Blinky.c. A good place is right after the place where you declared the four phasex variables.
#define ITM_Port8(n)
3.
4.
5.
6.
1.
2.
3.
4.
Click OK twice.
5.
6.
7.
Explanation:
The writes to ITM Stimulus Port 0 are intrusive and are usually one cycle. It takes no CPU cycles to get the data out the
LPC1700 processor via the Serial Wire Output pin to Vision to be displayed.
Note the X in the Dly column. The three writes are too fast for the SWO and you can see the timing as shown in the Cycles
column are all the same but the data values are correct. As mentioned before, this is a limitation of SWV. But SWV is
intensely useful for debugging.
Examination with an ETM Trace shows the total time to display the digit is 25 CPU cycles including the while wait time.
TIP: ITM_SendChar is a useful function you can use to send characters. It is found in the header core.CM3.h.
14
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
1.
2.
Add this line in Blinky.c in the area where you declared phasea. This means we want this to be a global variable.
unsigned int pass = 0;
3.
In task1(phasea) near where you entered the ITM write code, enter this line: pass++;
4.
Your result should look similar to the screen displayed below for the declaration of pass.
5.
6.
7.
8.
9.
10. In the Expression box enter: pass == 3. Select the Write box.
11. Click on Define and it will be accepted as on the right here:
12. Click on Close.
13. Enter the variable pass to the Watch window by dragging and
dropping it or enter manually.
14. Open Debug/Debug Settings and select the trace tab. Check
on Data R/W sample and uncheck EXTRC if checked.
15. Click on OK twice. Open the Trace Records window.
16. Click on RUN.
17. When pass equals 3, the program will stop. This is how a
Watchpoint works. There are more options.
18. You will see pass incremented in the
Logic Analyzer as well as in the Watch
window.
19. Note the three data writes in the Trace
Records window shown here. 1, 2 and 3 in
the Data column. Plus the address written
to and the PC of the write instruction.
20. Also note the data writes 0x35, 0x0D and
0x0A from your previous ITM exercise.
21. There are other types of expressions you
can enter and are detailed in the Help button
in the Breakpoints box.
22. To repeat this, click on the RESET icon and then RUN.
TIP: You cannot set Watchpoints on-the-fly while the program is running like you can with hardware breakpoints.
TIP: To edit a Watchpoint, double-click on it in the Breakpoints window and its information will be dropped down into the
configuration area. Clicking on Define will create another Watchpoint. You should delete the old one by highlighting it and
click on Kill Selected or try the next TIP:
TIP: The checkbox beside the expression allows you to temporarily unselect or disable a Watchpoint without deleting it.
15
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
Connectors: The MCB1700 board has two DB-9 connectors labeled CAN1 and CAN2. These are the two CAN
controllers. You must connect pin 2 of each connector to the other and also pin 7 to the other. Do not cross them.
You can use two DB-9 connectors or jumper wires. Make sure the connections are reasonably sturdy. See the first
TIP below for an explanation.
2.
Start Vision by clicking on its icon on your Desktop if it is not already running.
3.
4.
5.
6.
7.
The LCD screen will display a value of both Tx: and Rx: and will vary when you rotate the potentiometer P2.
What is happening: The LPC1758 or 68 contains two CAN controllers and we have connected them together to form a two
node network. CAN2 is sending messages to CAN1 and they are displayed on the LCD as TX: and RX: respectively. You
need at least two CAN nodes to have a working CAN network. See the Keil CAN Primer for more information.
I connected a CAN analyzer to the CAN bus and it displays the CAN frames transmitted
as shown here: CAN analyzers are a good investment.
The CAN Identifier is 21 (ID column) and the data values displayed. There is one data
byte per frame in this case. It is possible to have from 0 to 8 data bytes per frame.
TIP: If only Tx: changes, either the loopback cable isnt connected or you are using only
a ULINK-ME to power the board. Connect a USB cable from your computer to the
MCB1700 board to provide 5 volts to the CAN transceiver in this case.
Logic Analyzer Window:
We can display the CAN data as a graph updated in real-time with Serial Wire Viewer.
1.
2.
3.
4.
5.
6.
7.
8.
You will see the data change as you rotate the pot
in both the LA window shown here and in the
Watch window in real time stealing no CPU
cycles.
9.
www.keil.com
1.
Stop the program if still running. Vision must be in debug mode to access the watchpoints.
2.
Double-click on trace Records to clear it. (this step is not strictly necessary: new trace frames are appended to the
end).
3.
Open Debug/Breakpoints and enter in the dialog box: val_Tx == 0x44 Select Read and click on Define and then
Close.
4.
Double-click in the Trace Records box to clear it and run the program by clicking on RUN. Or open it if it is not.
5.
Adjust the pot to indicate 0x44. The first time this value is written to val_Tx, the program will stop.
6.
Note the value in the Watch window will equal 0x44 ! The LCD may or may not have been updated yet.
7.
Scroll to the bottom of the Trace Records and the value of 0x44 will be visible on the last line as shown below.
8.
There will be a read of 0x44 at the end of the trace plus the address of the instruction that caused the trigger !
9.
In this case, the last frame says a Data Read 0f 0x44 occurred to address 0x1000001C by the instruction located at
0x09AC.
TIP: Recall that you can right click in the Trace Records window to filter out various Types of frames.
TIP: The ULINKpro displays the source code and disassembly instructions in the new Trace window. Here is an example:
ULINKpro also provides Code Coverage, Performance Analysis and Execution Profiling by using the ETM trace.
Note: The current version of Keil MDK (4.53) only displays data writes and not reads. This is to prevent data overruns in
the Trace Records window. Future versions may include data reads.
17
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
13) Creating a new project: Using the Blinky source files: optional exercise
All examples provided by Keil are pre-configured. All you have to do is compile them. You can use them as a starting point
for your own projects. However, we will start this example project from the beginning to illustrate how easy this process is.
We will use the existing source code files so you will not have to type them in. Once you have the new project configured;
you can build, load and run the Blinky example as usual. You can use this process to create any new project from your own
source files created with Visions editor or any other editor.
With Vision running and not in debug mode, select Project/New Vision Project.
In the window Create New Project go to the folder C:\Keil\ARM\Boards\Keil\MCB1700.
Right click and create a new folder by selecting New/Folder. I named this new folder FAE.
Double-click on the newly created folder FAE to enter this folder as is shown below.
Name your project. I called mine Mytest. You can choose your own name but you will have to keep track of it.
Click on Save.
7.
8.
1.
2.
3.
4.
5.
6.
18
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
Once we have all the PC values, we can easily determine the following four functions and display them in Vision:
1.
Instruction Trace:
This enables program flow debugging such as the infamous in the weeds problem since a complete record of the
program flow is recorded for later examination. The PC values are tied to the appropriate C source and assembly
instructions as shown in the first window shown below:
Problems that normally would take extensive debugging time can be found very quickly with ETM trace. Double
click on a line in this window and you will be taken to that location in the Disassembly and Source windows.
19
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
2.
2.
3.
4.
5.
6.
7.
3.
Execution Profiling: How long did it take for this function or set of assembly instructions to execute ? How many
times did they execute ? With a configurable resolution from many C source lines down to individual instructions,
Instruction profiling gives you an accurate indication of program timings.
How many times an instruction or a
section of code was executed is also
available.
This screen shows how much time each
source line has executed. Number of
times a line or section of code was
executed can also be shown instead.
Hover your mouse over an instruction or
section and the statistics are displayed as
shown in this window:
4.
Performance Analysis (PA): Where is my program spending all of its time ? PA tells you in a graphical format
how long it takes for each function to execute. You can compare this to how long you expected them to run and to
find areas where the program is outside of your expectations and design. This information and more is presented in
the Performance Analysis window shown below:
If you have a ULINKpro, you can try the MCB1700 example BlinkyUlp: C:\Keil\ARM\Boards\Keil\MCB1700\Blinky_ULp
20
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
Global variables.
Static variables.
Structures.
Cant see DMA transfers DMA bypasses CPU and SWV by definition.
PC Samples.
CPU counters.
Trace adds significant power to debugging efforts. Tells where the program has been.
Especially where the bug occurs a long time before the consequences are seen.
These are the types of problems that can be found with a quality trace:
Pointer problems.
Code overwrites writes to Flash, unexpected writes to peripheral registers (SFRs), corrupted stack.
How did I get here ?
Stack overflows. What causes the stack to grow bigger than it should ?
Runaway programs: your program has gone off into the weeds and you need to know what instruction caused this.
Is very tough to find these problems without a trace.
For complete information on CoreSight for the Cortex-M3: Search for DDI0314F_coresight_component_trm.pdf on
www.arm.com. You do not need to know the information in this document to use Serial Wire Viewer or the ETM trace.
Other Useful Documents:
1.
The Definitive Guide to the ARM Cortex-M3 by Joseph Yiu. (he also has one for the Cortex-M0) Search the
web.
2.
3.
21
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com
MDK-Professional (Includes Flash File, TCP/IP, CAN and USB driver libraries)
$9,995
MDK-Standard (unlimited compile and debug code and data size) - $4,895
For special promotional pricing and offers, please contact Keil Sales for details.
The Keil RTX RTOS is now provided under a Berkeley BSD type license. This makes it free.
Keil also provides free DSP libraries for the Cortex-M3 and Cortex-M4.
All versions, including MDK-Lite, includes Keil RTX RTOS with source code !
Call Keil Sales for more details on current pricing. All products are available.
All products include Technical Support for 1 year. This can easily be renewed.
Call Keil Sales for special university pricing.
For the ARM University program: go to www.arm.com and search for
university.
Keil supports many other NXP processors including 8051, ARM7 and
ARM9 processors. See the Keil Device Database on www.keil.com/dd for
the complete list of NXP support. This information is also included in MDK.
Note: USA prices. Contact sales.intl@keil.com for pricing in other countries.
Prices are for reference only and are subject to change without notice.
For the entire Keil catalog see www.keil.com or contact Keil or your local distributor.
See www.keil.com/nxp for more NXP specific information.
or www.embeddedsoftwarestore.com
Keil Direct Sales In USA: sales.us@keil.com or 800-348-8051. Outside the US: sales.intl@keil.com
Keil Technical Support in USA: support.us@keil.com or 800-348-8051. Outside the US: support.intl@keil.com.
For comments or corrections please email bob.boys@arm.com.
For the latest version of this document, see www.keil.com/nxp
22
NXP LPC1700 Lab. Summer 2012 Revision 4.1
www.keil.com