|
1 <?xml version="1.0" encoding="utf-8"?> |
|
2 <!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. --> |
|
3 <!-- This component and the accompanying materials are made available under the terms of the License |
|
4 "Eclipse Public License v1.0" which accompanies this distribution, |
|
5 and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". --> |
|
6 <!-- Initial Contributors: |
|
7 Nokia Corporation - initial contribution. |
|
8 Contributors: |
|
9 --> |
|
10 <!DOCTYPE concept |
|
11 PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd"> |
|
12 <concept id="GUID-984C2A0D-36BE-5A99-9D65-3F8791C669FF" xml:lang="en"><title>ASSP/Variant |
|
13 Architecture</title><shortdesc>A base port must provide a software layer called the ASSP/Variant.</shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody> |
|
14 <p>The ASSP/Variant layer provides two main functions. First, it implements |
|
15 a small number of hardware-specific functions that are used by the Kernel. |
|
16 Second, it implements common peripheral control functions that other extensions |
|
17 and device drivers can use. </p> |
|
18 <p id="GUID-95C34114-F986-5428-9D40-5CF64429CDBD"> The most important of |
|
19 these functions is interrupt dispatching. During initialisation the ASSP/Variant |
|
20 must specify a dispatch function to be called for all hardware interrupts. </p> |
|
21 <p>In general, the ASSP/Variant provides control functions for hardware which |
|
22 is shared between multiple devices. For example it is often not possible to |
|
23 do a read-modify-write on a GPIO port in order to change the state of an individual |
|
24 output line. This may be either because an output port register is write-only |
|
25 or because reading the port register reads the actual logic levels on the |
|
26 pins, not the last value written to the register, and the pin level typically |
|
27 lags the written value due to capacitive loading. In this case, the ASSP/Variant |
|
28 could provide a function to set and clear individual port bits, keeping a |
|
29 RAM copy of the last value written to the port register. </p> |
|
30 <p>The simplest implementation is put all the code in a single DLL, called |
|
31 the Variant DLL (<filepath>ecust.dll</filepath>). For hardware architectures |
|
32 based on an ASSP, you can allow multiple types of phones that use the same |
|
33 ASSP to share the common code. To do this, the common ASSP code is implemented |
|
34 in a kernel extension, and the Variant DLL implements the code that is specific |
|
35 to the phone type. </p> |
|
36 <fig id="GUID-A42AFED6-372D-54A3-BC9D-FA99725464EF"> |
|
37 <image href="GUID-71271D1C-C385-5687-8A90-46E8B590BB1E_d0e365587_href.png" placement="inline"/> |
|
38 </fig> |
|
39 <p>In the Base Porting Guide, we refer to the ASSP layer and the Variant Layer, |
|
40 where the ASSP layer contains the source code tailored to a range of different |
|
41 microprocessors (e.g. ARM720/920/SA1/Xscale), and the Variant layer contains |
|
42 the source code associated with off-chip hardware (same CPU, different peripherals). </p> |
|
43 <p>For example, the standard Symbian port for the template reference board |
|
44 is split into a core layer (in directory <filepath>...\template_assp\...</filepath>) |
|
45 and code specific to the template board (in directory <filepath>...\template_variant\...</filepath>). |
|
46 The <filepath>.mmp</filepath> file for the ASSP layer is <filepath>...\template_assp\katemplate.mmp</filepath>, |
|
47 and the <filepath>.mmp</filepath> file for the Variant layer is <filepath>...\template_variant\vtemplate.mmp</filepath>. </p> |
|
48 <section id="GUID-C05E021D-6DD6-5169-947B-192026A4364F"><title>The Asic class</title> <p>The |
|
49 heart of the ASSP/Variant is the <xref href="GUID-A83A7C3C-7DC0-3B9C-842F-70FCC751365D.dita"><apiname>Asic</apiname></xref> class, defined in <filepath>..\e32\include\kernel\arm\assp.h</filepath>. |
|
50 This is a class that contains a number of pure virtual functions that must |
|
51 be implemented. </p> <p>Where there is an ASSP/Variant split, the ASSP layer |
|
52 should derive a concrete implementation from the <xref href="GUID-A83A7C3C-7DC0-3B9C-842F-70FCC751365D.dita"><apiname>Asic</apiname></xref> class. |
|
53 The most convenient way of implementing the Variant layer is to further derive |
|
54 from this ASSP class. Only the Variant DLL is declared as ‘variant’ in the |
|
55 ROM – the ASSP is declared as an extension. If there is no ASSP/Variant split, |
|
56 then the Variant is simply a concrete implementation of the <xref href="GUID-A83A7C3C-7DC0-3B9C-842F-70FCC751365D.dita"><apiname>Asic</apiname></xref> class. </p> <p>The |
|
57 ASSP layer can, itself, define additional functions to be implemented in the |
|
58 Variant layer. For example, the ASSP layer defines the pure virtual function <codeph>VideoRamSize()</codeph> which |
|
59 the Variant layer provides to map the video frame buffer. </p> <p>The template |
|
60 reference board port has the ASSP/Variant split. The ASSP layer is implemented |
|
61 by the <codeph>TemplateAssp</codeph> class, and the Variant layer is implemented |
|
62 by the <codeph>Template</codeph> class. </p> <p>For reference: the template |
|
63 port ASSP layer implementation's <filepath>.mmp</filepath> file is at <filepath>...\template_assp\katemplate.mmp</filepath>, |
|
64 and the Variant layer implementation's <filepath>.mmp</filepath> file is at <filepath>...\template_variant\vtemplate.mmp</filepath>. </p> <p>Note |
|
65 that one of the source files that forms the ASSP layer must have the <codeph>DECLARE_STANDARD_ASSP()</codeph> declaration. |
|
66 See <filepath>...\template_assp\assp.cpp</filepath>. </p> </section> |
|
67 </conbody><related-links> |
|
68 <link href="GUID-E0DCBDCF-C056-53E5-A375-778327F848E4.dita"><linktext>Asic Class |
|
69 Tutorial</linktext></link> |
|
70 <link href="GUID-B498EDA0-677E-5521-9E4F-24D7C2048F2E.dita"><linktext>Implementing |
|
71 the ASSP Register</linktext></link> |
|
72 <link href="GUID-5194A7B6-471B-5BCF-8569-16A3BA59000A.dita"><linktext>Using the |
|
73 ASSP Register</linktext></link> |
|
74 <link href="GUID-77DF7A6B-F01D-5B9F-9C7A-662A04ED8BE7.dita"><linktext>ASSP Kernel |
|
75 Extension Overview</linktext></link> |
|
76 <link href="GUID-89291394-ABDF-5895-9E09-0D80D7A9F3EC.dita"><linktext>Integrated |
|
77 Interchip Sound</linktext></link> |
|
78 </related-links></concept> |