Symbian3/PDK/Source/GUID-984C2A0D-36BE-5A99-9D65-3F8791C669FF.dita
changeset 1 25a17d01db0c
child 3 46218c8b8afa
equal deleted inserted replaced
0:89d6a7a84779 1:25a17d01db0c
       
     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>