Search by Tags

How to Run Simple Code on the Cortex M4 (Windows Embedded Compact)

Applicable for

Article updated at 12 Aug 2020
Compare with Revision

This article explains how to run code on the Cortex-M4 core on targets running Windows Embedded Compact.

Note: For information about running code on a Cortex-M4 of other modules and Operating Systems, see the FreeRTOS article


Let's first start with the actual work. Use the Reg Access Tool to access the following physical memory locations.

# Address Value Operation Comment
1 0x3f04'0000 0x3001'a101 Write
2 0x3f04'0004 0xe7fc'6008 Write
3 0x4006'e028 0x3f04'0001 Write
4 0x4006'b08c 0x0001'5a5a Write
5 0x3f04'0008 Read Repeat this step. You will see incrementing values.

That's it. You are already done.


Let's look at the details:

M4 Application

This is the assembly code that we want to run on the Cortex M4:

      0x3f040000      a101    ADD     R1, PC, #4     ; load counter address [0x3f040008] into R1
  .-> 0x3f040002      3001    ADD     R0, 1          ; increment counter
  |   0x3f040004      6008    STR     R0, [R1, 0]    ; store new counter value
  `=< 0x3f040006      e7fc    B       0x3f040002

Code and variable are located in the SRAM. The memory map looks like this:

Address Range Content
0x3f04'0000 - 0x3f04'0007 Program code
0x3f04'0008 - 0x3f04'000b 32bit counter

Steps to Run the Code

  • In steps #1 to #2 we write the assembly code to the SRAM.
  • In step #3, we write the M4 starting address into the SRC_GPR2 register. Bit 0 is set to start in THUMB mode.
  • In step #4, we start the M4 by setting the AUX_CORE_WAKEUP bit in the CCM_CCOWR register. Reading back this register will show 0x00010000.
  • Step #5 is only to verify that the application is running.