Facts about the ARM940T processor

From wiki.gp2x.org



  • The ARM940T CPU is an all-purpose processor independent from the ARM920.
  • It has not a MMU, but instead the ARM940T has a PU (Protection Unit). The PU can not translate virtual addresses, but has similar functions a MMU has like e.g. defining memory regions for caching.
  • The ARM940T is used by GPH's implementation of Linux to control video processing. Using the 940T core in Linux for other tasks apart from video processing is difficult but possible. Accessing the hardware directly makes it easier to use both CPUs.

For more detailed Information have a look at the data sheets: Docs and Papers

How the CPUs access memory

This is a bit simplified, but gives the general idea of how each of the two ARM CPUs can access all of the memory and ports available in the GP2X.

                                ----------    -------------
                               | 64MB     |  | On-chip     |
                               | SDRAM    |  | Peripherals |
                                ----------    -------------
                                        |      |
  -----------                           |      |                            ----------
 | 16kB Inst.|    ------     -----     ------------     -----     ------   | 4kB Inst.|
 | Cache     |---|      |   |     |   | Memory     |   |     |   |      |--| Cache    |
  -----------    | 920T |---| MMU |---| Controller |---| PU  |---| 940T |   ----------
  -----------    | Core |   |     |   |            |   |     |   | Core |   ----------
 | 16kB Data |---|      |    -----     ------------     -----    |      |--| 4kb Data |
 | Cache     |    ------                 |                        ------   | Cache    |
  -----------                            |                                  ----------
                                  | Static RAM |
                                  | Bus        |

Each core contacts the Memory Controller to get data from the RAM. If they both access the RAM at the same time, then one will have to wait (for a very short time) for its data. However, each core has its own independent cache which will mean that the cores do not need to always fetch data or instructions from the RAM. Also, if a core accesses the on-chip peripherals (ie. the memory locations which control the on-chip hardware), then it does not prevent the other core from accessing RAM. There is yet another data path, called the "Static RAM bus", which is independent of the others. The only thing connected to this currently is the USB controller.

Using sdk2x (also known as HH), programming direct hardware on the GP2X, including the 940T core, will be no harder than writing code for the GP32. And even though only a small percentage of programmers will choose to use this ability, some very interesting things are going to happen!

Decoding on the 940

Dzz released the source to the port of the tremor library running on the 940.

It is available here.

To test it, copy test.gpe, code940.bin, and test.ogg to the gp2x, then run test.gpe

Controls in the test app:

START: exit
A: pause and unpause the music playback
B: reset the music back to the beginning
X: reload the music (demonstrates loading a new music clip from a file)

940 GPU

Have a look at this project by rixed: http://gna.org/projects/gpu940/

With the Code Alone demo as an early example on how the project can be applied.

Personal tools