Porting Embedded Windows CE 6.0 R2 to the OMAP-L138: Part 3
The authors discuss how to take full advantage of the Microsoft Windows CE 6.0 board support package in this final part in a series of three articles on how they ported the Windows CE 6.0 R2 embedded operating system to the Texas Instruments ARM-based family of OMAP-L138 processors.
The standard board Windows CE 6.0 board support package (BSP) for the OMAP-L138 SoC (discussed in detail in Part 1 and Part 2) does not include the DSPLink library. In complex DSP operations where it is necessary to link to the library, the developer needs to modify the mDDR/DDR2 random access memory normally used for data storage, so programs can access the library when needed.
This RAM is normally used for Windows CE 6.0 OS for operation of applications, services, drivers, and the ARM processor core . To give the developer as much flexibility as possible this memory needs to be segmented into several partitions, one available only to the ARM core and Windows CE 6.0 OS, another segment available only for DSP core and a third area available to both cores and for the DSPLinklibrary.
Figure 10 shows distribution of RAM DDR memory when using DSPLink. Windows CE 6.0 OS uses 24-Mbyte RAM for applications, drivers, and services where an additional 63 Mbyte RAM has been assigned from from one of the other partitions for use by Windows CE 6.0 OS.
Click on image to enlarge.
Figure 10: Distribution of memory in Windows CE 6.0 when DSPLink library is used
2 Mbytes of RAM have been allocated for the DSPLink library. If this is not enough, then it is necessary to change the memory configuration in the Windows CE 6.0 BSP, which will decrease the RAM area (63 Mbytes for applications). Apart from this, the BSP configuration files need to be corrected, as Windows CE 6.0 OS requires execution of an OEMGetExtensionDRAM subroutine for notifying the OS of additional areas of RAM.
Special attention needs to be paid to the process of assembly and integration of the library into the Windows CE 6.0 image. The library itself consists of five components:
- Code Generation Tool C6000;
- Windows CE 6.0 (including installed Platform Builder + Visual Studio);
- Windows CE BSP for OMAP-L138; and
- ActiveState Perl
It is also possible to make use of the OMAP‘s DSP capabilities in applications using Windows CE 6.0 OS without necessarily using TI‘s DSP/BIOS or the DSPLink library. However, this often requires solving a number of problems related to the distribution of sections of a DSP application,such as making sure the correct address of the input point is communicated in order to start a DSP operation. In our experience there are quite a few of these.
The problem is that the exchange between ARM and DSP subsystems needs to be arranged independently, as does loading and starting DSP code. In the implementation used in our projects at Axonim, the OAL has been modified for use in the BSP OMAP-L138 for Windows CE 6.0, where it can be implemented in combination with a tool for complete DSP core manipulation. This, in turn, allows implementation of communications algorithms that do not normally work in combination with the DSPLinklibrary.
Developers experienced in programming with TI‘s C6000 DSPs would find such an approach more reasonable as it would significantly reduce the time they would have to allocate to this issue.
Debugging applications for DSP
If the developer of an application for DSP has an opportunity to use JTAG and the Code Composer Studio environment, then the debugging process is simple. In the core selection window for debugging, the DSP core can be selected and the debugger can be connected to it without stopping the ARM subsystem. As a result, when Windows CE 6.0 OS is operating, simultaneous debugging of algorithms can take place with the help of both JTAG and Code Composer Studio.
But if code debugging is performed without JTAG and Code Composer Studio, the task becomes more complicated as some nonstandard methods will be needed. For example, you may need to add control points to the program in order to display the state of the DSP core in particular memory cells. There are a number of such methods, and the choice depends on how complex the implementation is and the debugging results you wish to obtain..