.. _frdm_k64f:

Freescale FRDM-K64F
###################

Overview
********

The frdm_k64f board configuration is used by Zephyr applications
that run on the Freescale Freedom Development Platform (FRDM-K64F).
It provides support for an ARM Cortex-M4 CPU and the following devices:

* Nested Vectored Interrupt Controller (NVIC)

* System Tick System Clock (SYSTICK)

* Serial Port over USB (K20)

See `Procedures`_ for using third-party tools to load
and debug (in system mode with no OS awareness) a
Zephyr application image on the target. Debugging is
done with GNU Debugger (GDB), using Eclipse plugins.

.. note::
   This board configuration may work with similar boards,
   but they are not officially supported.

Supported Boards
****************

The frdm_k64f board configuration has been tested to run on the
Freescale Freedom Development Platform.  The physical characteristics of
this board (including pin names, jumper settings, memory mappings, ...)
can be found below.  No claims are made about its suitability for use with
any other hardware system.

Pin Names
=========

**LED (RGB)**

* LED_RED = PTB22
* LED_GREEN = PTE26
* LED_BLUE = PTB21
* Original LED Naming

  * LED1 = LED_RED
  * LED2 = LED_GREEN
  * LED3 = LED_BLUE
  * LED4 = LED_RED

**Push buttons**

* SW2 = PTC6
* SW3 = PTA4

**USB Pins**

* USBTX = PTB17
* USBRX = PTB16

**Arduino Headers**

* D0 = PTC16
* D1 = PTC17
* D2 = PTB9
* D3 = PTA1
* D4 = PTB23
* D5 = PTA2
* D6 = PTC2
* D7 = PTC3
* D8 = PTA0
* D9 = PTC4
* D10 = PTD0
* D11 = PTD2
* D12 = PTD3
* D13 = PTD1
* D14 = PTE25
* D15 = PTE24
* A0 = PTB2
* A1 = PTB3
* A2 = PTB10
* A3 = PTB11
* A4 = PTC10
* A5 = PTC11

**I2C pins**

* I2C_SCL = D15
* I2C_SDA = D14
* DAC0_OUT = 0xFEFE /\* DAC does not have a Pin Name in RM \*/

Jumpers & Switches
==================

The Zephyr kernel uses the FRDM-K64F default switch and jumper settings.

The default switch settings for the Freescale FRDM-K64F are:

+---------------+------------+---------------+
| Switch Number | Switch     | ON Switch OFF |
+===============+============+===============+
|  J14          |            |      x        |
+---------------+------------+---------------+
|  J21          |     x      |               |
+---------------+------------+---------------+
|  J25          | SDA + SW1  |      MCU      |
+---------------+------------+---------------+

Memory Mappings
===============

The frdm_k64f board configuration uses the
following default hardware memory map addresses and sizes:

+--------------------------+---------+------------------+
| Physical Address         | Size    | Access To        |
+==========================+=========+==================+
| 0xFFFFFFFF - 0xE0100000  |    -    | System           |
+--------------------------+---------+------------------+
| 0xE0100000 - 0xE0040000  |    -    | External Private |
|                          |         | Peripheral Bus   |
+--------------------------+---------+------------------+
| 0xE0100000 - 0xE00FF000  |    -    | ROM Table        |
+--------------------------+---------+------------------+
| 0xE00FF000 - 0xE0042000  |    -    | External PPB     |
+--------------------------+---------+------------------+
| 0xE0042000 - 0xE0041000  |    -    | ETM              |
+--------------------------+---------+------------------+
| 0xE0041000 - 0xE0040000  |    -    | TIPU             |
+--------------------------+---------+------------------+
| 0xE0040000 - 0xE0000000  |    -    | Internal Private |
|                          |         | Peripheral Bus   |
+--------------------------+---------+------------------+
| 0xE0040000 - 0xE000F000  |    -    | Reserved         |
+--------------------------+---------+------------------+
| 0xE000F000 - 0xE000E000  |    -    | SCS              |
+--------------------------+---------+------------------+
| 0xE000E000 - 0xE0003000  |    -    | Reserved         |
+--------------------------+---------+------------------+
| 0xE0003000 - 0xE0002000  |    -    | FPB              |
+--------------------------+---------+------------------+
| 0xE0002000 - 0xE0001000  |    -    | DWT              |
+--------------------------+---------+------------------+
| 0xE0001000 - 0xE0000000  |    -    | ITM              |
+--------------------------+---------+------------------+
| 0xE0000000 - 0xA0000000  |   1GB   | External device  |
+--------------------------+---------+------------------+
| 0xA0000000 - 0x60000000  |   1GB   | External RAM     |
+--------------------------+---------+------------------+
| 0x60000000 - 0x40000000  |  .5GB   | Peripheral       |
+--------------------------+---------+------------------+
| 0x44000000 - 0x42000000  |  32MB   | Bit band alias   |
+--------------------------+---------+------------------+
| 0x42000000 - 0x40100000  |  31MB   | unnamed          |
+--------------------------+---------+------------------+
| 0x40100000 - 0x40000000  |   1MB   | Bit band region  |
+--------------------------+---------+------------------+
| 0x40000000 - 0x20000000  |  .5GB   | SRAM             |
+--------------------------+---------+------------------+
| 0x24000000 - 0x22000000  |  32MB   | Bitband alias    |
+--------------------------+---------+------------------+
| 0x22000000 - 0x20100000  |  31MB   | unnamed          |
+--------------------------+---------+------------------+
| 0x20100000 - 0x20000000  |   1MB   | Bitband region   |
+--------------------------+---------+------------------+
| 0x20000000 - 0x00000000  |  .5GB   | Code             |
+--------------------------+---------+------------------+

For a diagram, see  `Cortex-M3 Revision r2p1 Technical Reference Manual page 3-11`_.

.. _Cortex-M3 Revision r2p1 Technical Reference Manual page 3-11: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337h/index.

Component Layout
================

Refer to page 2 of the FRDM-K64F Freedom Module User's Guide,
Rev. 0, 04/2014 (Freescale FRDMK64FUG) for a component layout
block diagram. See
http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/DUI0552A_cortex_m3_dgug.pdf

Supported Features
******************

The frdm_k64f board configuration supports the following
hardware features:

+--------------+------------+----------------------+
| Interface    | Controller | Driver/Component     |
+==============+============+======================+
| NVIC         | on-chip    | nested vectored      |
|              |            | interrupt controller |
+--------------+------------+----------------------+
| SYSTICK      | on-chip    | system clock         |
+--------------+------------+----------------------+
| UART  1      | on-chip    | serial port          |
| (OpenSDA v2) |            |                      |
+--------------+------------+----------------------+


Other hardware features are not currently supported by the Zephyr kernel.
See `vendor documentation`_ for a complete list of
Freescale FRDM-K64F board hardware features.

.. _vendor documentation: http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/DUI0552A_cortex_m3_dgug.pdf


Interrupt Controller
====================

There are 15 fixed exceptions including exceptions 12 (debug
monitor) and 15 (SYSTICK) that behave more as interrupts
than exceptions. In addition, there can be a variable number
of IRQs. Exceptions 7-10 and 13 are reserved. They don't need
handlers.

A Cortex-M3/4-based board uses vectored exceptions. This
means each exception calls a handler directly from the
vector table.

Handlers are provided for exceptions 1-6, 11-12, and 14-15.
The table here identifies the handlers used for each exception.

+------+------------+----------------+--------------------------+
| Exc# | Name       | Remarks        | Used by Zephyr Kernel    |
+======+============+================+==========================+
| 1    | Reset      |                | system initialization    |
+------+------------+----------------+--------------------------+
| 2    | NMI        |                | system fatal error       |
+------+------------+----------------+--------------------------+
| 3    | Hard fault |                | system fatal error       |
+------+------------+----------------+--------------------------+
| 4    | MemManage  | MPU fault      | system fatal error       |
+------+------------+----------------+--------------------------+
| 5    | Bus        |                | system fatal error       |
+------+------------+----------------+--------------------------+
| 6    | Usage      | undefined      | system fatal error       |
|      | fault      | instruction,   |                          |
|      |            | or switch      |                          |
|      |            | attempt to ARM |                          |
|      |            | mode           |                          |
+------+------------+----------------+--------------------------+
| 11   | SVC        |                | context switch           |
+------+------------+----------------+--------------------------+
| 12   | Debug      |                | system fatal error       |
|      | monitor    |                |                          |
+------+------------+----------------+--------------------------+
| 14   | PendSV     |                | context switch           |
+------+------------+----------------+--------------------------+
| 15   | SYSTICK    |                | system clock             |
+------+------------+----------------+--------------------------+

.. note::
   After a reset, all exceptions have a priority of 0.
   Interrupts cannot run at priority 0 for the interrupt
   locking mechanism and exception handling to function properly.

Interrupts
----------

Interrupt numbers are virtual and numbered from 0 through N,
regardless of how the interrupt controllers are set up.
However, with the Cortex-M3 which has only one NVIC, interrupts map
directly to physical interrupts 0 through N, and to exceptions
16 through (N + 16).

The Cortex-M4 has an 8-bit priority register. However, some of the
lowest-significant bits are often not implemented. When citing
priorities, a priority of 1 means the first priority lower than 0,
not necessarily the priority whose numerical value is 1.
For example, when only the top three bits are implemented,
priority 1 has a priority numerical value of 0x20h.

When specifying an interrupt priority either to connect
an ISR or to set the priority of an interrupt, use low numbers.
For example, if 3 bits are implemented, use 1, 2, and 3,
not 0x20h, 0x40h, and 0x60h.

Interrupt priority is set using the *prio* parameter of
:c:macro:`IRQ_CONNECT()` or :c:func:`irq_connect_dynamic()`.

The range of available priorities is different if using Zero Latency Interrupts
(ZLI) or not.

When not using ZLI:

* 2 to 2\ :sup:`n`\ -2, where *n* is the number of implemented bits
  (e.g. 2 to 14 for 4 implemented bits)

* Interrupt locking is done by setting :envvar:`BASEPRI` to 2, setting
  exceptions 4, 5, 6, and 11 to priority 1, and setting all other exceptions,
  including interrupts, to a lower priority (2+).

When using ZLI:

* 3 to 2\ :sup:`n`\ -2, where *n* is the number of implemented bits
  (e.g. 3 to 6 for 3 implemented bits)

* Interrupt locking is done by setting :envvar:`BASEPRI` to 3, setting
  exceptions 4, 5, 6, and 11 to priority 1, setting ZLI interupts to priority 2
  and setting all other exceptions, including interrupts, to a lower priority
  (3+).

.. note::
   The hard fault exception is always kept at priority 0 so that it is
   allowed to occur while handling another exception.

.. note::
   The PendSV exception is always installed at the lowest priority
   available, and that priority level is thus not avaialble to other
   exceptions and interrupts.

Interrupt Tables
----------------

There are a number of ways of setting up the interrupt
table depending on the range of flexibility and performance
needed. The two following kconfig options drive the interrupt
table options:

:option:`SW_ISR_TABLE` and :option:`SW_ISR_TABLE_DYNAMIC`

Depending on whether static tables are provided by the platform
configuration or by the application, two other kconfig options
are available:

:option:`SW_ISR_TABLE_STATIC_CUSTOM` and
:option:`IRQ_VECTOR_TABLE_CUSTOM`

The following interrupt table scenarios exist:

:option:`SW_ISR_TABLE=y`, :option:`SW_ISR_TABLE_DYNAMIC=y`
   For maximum ease of use, maximum flexibility, a larger
   footprint, and weaker performance.

   This is the default setup. The vector table is static
   and uses the same handler for all entries. The handler
   finds out at runtime what interrupt is running and
   invokes the correct ISR. An argument is passed to the
   ISR when the ISR is connected.

   The table, in the data section and therefore in SRAM,
   has one entry per interrupt request (IRQ) in the vector
   table. An entry in that table consists of two words, one
   for the ISR and one for the argument. The table size,
   calculated by multiplying the number of interrupts by 8
   bytes, can add significant overhead.

   In this scenario, some demuxing must take place which
   causes a delay before the ISR runs. On the plus side,
   the vector table can be automatically generated by the Zephyr kernel.
   Also, an argument can be passed to the ISR, allowing
   multiple devices of the same type to share the same ISR.
   Sharing an ISR can potentially save as much, or even more,
   memory than a software table implementation might save.

   Another plus is that the vector table is able to take
   care of the exception handling epilogue because the
   handler is installed directly in the vector table.

:option:`SW_ISR_TABLE=y`, :option:`SW_ISR_TABLE_DYNAMIC=n`
   For advanced use, medium flexibility, a medium footprint,
   and medium performance.

   In this setup, the software table exists, but it is static
   and pre-populated. ISRs can have arguments with an automatic
   exception handling epilogue. Table pre-population provides
   better boot performance because there is no call to
   :c:func:`irq_connect` during boot up; however,
   the user must provide a file to override the platform's
   default ISR table defined in :file:`sw_isr_table.S`.
   This file must contain the :makevar:`_sw_isr_table[]`
   variable initialized with each interrupt's ISR. The variable
   is an array of type struct _IsrTableEntry. When a user
   provides their own :file:`sw_isr_table.c`, the type can be found
   by including :file:`sw_isr_table.h`.

:option:`SW_ISR_TABLE=n`
   For advanced use, no flexibility, the best footprint, and
   the best performance.

   In this setup, there is no software table. ISRs are installed
   directly in the vector table using the **_irq_vector_table** symbol
   in the .irq_vector_table section. The symbol resolves to an
   array of words containing the addresses of ISRs. The linker
   script puts that section directly
   after the section containing the first 16 exception vectors
   (.exc_vector_table) to form the full vector table in ROM.
   An example of this can be found in the platform's
   :file:`irq_vector_table.c`.  Because ISRs
   hook directly into the vector table, this setup gives the best
   possible performance regarding latency when handling interrupts.

   When the ISR is hooked directly to the vector, the ISR
   must manually invoke the :c:func:`_IntExit()` function
   as its very last action.

.. note::
   This configuration prevents the use of tickless idle.

:option:`SW_ISR_TABLE=y`, :option:`SW_ISR_TABLE_STATIC_CUSTOM=y`
   For overriding the static ISR tables defined by the platform:

   In this setup, the platform provides the **_irq_vector_table**
   symbol and data in :file:`sw_isr_table.s`.

:option:`SW_ISR_TABLE=n`, :option:`IRQ_VECTOR_TABLE_CUSTOM=y`
   In this setup, the platform provides the **_irq_vector_table** symbol
   and data in `irq_vector_table.c`.

Configuration Options
=====================

:option:`LDREX_STREX_AVAILABLE`
      Set to 'n' when the ldrex/strex instructions are not available.

:option:`DATA_ENDIANNESS_LITTLE`
      Set to 'n' when the data sections are big endian.

:option:`STACK_ALIGN_DOUBLE_WORD`
      Set to 'n' only when there is a good reason to do it.

:option:`NUM_IRQ_PRIO_BITS`
      The board configuration sets this to the correct value for the board
      ("4" for FRDM board, IIRC).

:option:`RUNTIME_NMI`
      The kernel provides a simple NMI handler that simply
      hangs in a tight loop if triggered. This fills the
      requirement that there must be an NMI handler installed
      when the CPU boots.If a custom handler is needed,
      enable this option and attach it via _NmiHandlerSet().

:option:`NUM_IRQS`
      The board configuration sets this value to the correct number of
      interrupts available on the board. The default is '34'.

:option:`SW_ISR_TABLE`
      Set to 'n' when the board configuration does not provide one.

:option:`SW_ISR_TABLE_DYNAMIC`
      Set to 'n' to override the default.

System Clock
============
FRDM-K64F uses an external oscillator/resonator.
It can have a frequency range of 32.768 KHz to 50 MHz.

Serial Port
===========

The FRDM_K64F board has a single out-of-the-box available
serial communication channel that uses the CPU's UART0.
It is connected via a "USB Virtual Serial Port"
over the OpenSDA USB connection.

See the `Procedures`_ in the next section for instruction
on how to direct output from the board to a console.

Procedures
**********

Use the following procedures:

* `Loading a Project Image with FRDM K64F firmware`_

* `Installing Hardware Debug Support on the Host and Target`_

* `Installing the IDE and Eclipse Plug-ins`_

* `Configuring the J-Link Debugger`_

* `Programming Flash with J-link`_

Loading a Project Image with FRDM K64F Firmware
===============================================

Load a project image with FRDM K64F firmware from the mbed project
if you only need to load and run an image without debug tools.
FRDM K64F firmware is available for the board (and may already be
pre-installed).


Prerequisite
------------

Although FRDM K64F firmware may be pre-installed on the
FRDM_K64F, you must replace it with the latest version.

Steps
-----

1. Go to the `FRDM K64F firmware instructions
   <http://developer.mbed.org/handbook/Firmware-FRDM-K64F>`_.

2. Download the lastest version of the FRDM K64F firmware from the mbed project.

3. Update the FRDM K64F firmware using the following `online
   instructions <http://developer.mbed.org/handbook/Firmware-FRDM-K64F>`_:

    a) *Enter Bootloader mode*.
    b) *Update Using Windows and Linux*.
    c) *Power Down, Power Up*.

3. Follow the online instructions to `Connect the microcontroller to a PC
   <https://developer.mbed.org/platforms/frdm-k64f/#pc-configuration>`_.

    a) *Connect your microcontroller to a PC*.
    b) *Click the MBED.HTM link to log in*.

4. Follow the online instructions to `Configure a terminal application
   <http://mbed.org/handbook/Terminals>`_.

    a) *Install a Terminal Application*.
    b) *Setup the Connection Use COMx at 8-N-1 with 115200 baud*.

   The Status light on the FRDM K64F Microcontroller flickers
   when you type in the terminal application.

5. Configure the host to run a progam binary using the online instructions
   `Downloading a Program
   <http://mbed.org/platforms/frdm-k64f/#pc-configuration>`_.

    a) *Save a program binary (.bin) to the FRDM Platform*.
    b) *Press the Reset button*.
    c) *Download a program binary*.

6. Disconnect and re-connect the terminal serial port
   connection after copying each :file:`.bin` file.

Installing Hardware Debug Support on the Host and Target
========================================================

.. Caution::
   Debug firmware and FRDM K64F firmware cannot be used together.
   Debug firmware overwrites FRDM K64F firmware when installed.


Install hardware debug support on the host and target to use debug tools.

Prerequisites
-------------

* You understand that Segger does not warranty or support OpenSDA V2 firmware.

* You comply with all OpenSDA V2 firmware conditions of use, but particularly:

    - Use with Freescale target devices only. Use with other devices
          is prohibited and illegal.

    - Use with evaluation boards only; not with custom hardware.

    - Use for development and/or evaluation purposes only.

* You have licensed J-Link firmware.

* You have USB drivers for J-Links with VCOM support.


Steps
-----

1.  Go to the `J-Link
    <https://www.segger.com/jlink-software.html>`_ site.

2.  Locate the section, **J-Link software &
    documentation pack for Linux ARM systems** and
    click the **Download** button for **Software and
    documentation pack for Linux ARM systems V5.00b**.

3.  Go to `Segger OpenSDA <https://www.segger.com/opensda.html>`_.

4.  Download :file:`JLink_OpenSDA_V2_2015-04-23.zip`.

5.  Install the :program:`USB Driver for J-Link with Virtual COM
    Port` on the PC.

6.  Extract the OpenSDA image from the download.

7.  Press and hold the board **Reset** button while
    connecting the board to the PC with a USB cable.

    The OpenSDA platform starts in MSD mode.

8.  From the PC, drag & drop the :file:`.sda/.bin` file to
    the board to load the firmware.

9.  Disconnect and reconnect the board.

    The OpenSDA platform is now available on the PC as a
    J-Link appearance.

10. Run the :program:`J-Link Commander` (JLinkExe on Linux)
    program on the PC to test if the J-Link connects
    to the target.

Installing the IDE and Eclipse Plug-ins
=======================================

Install the GNU ARM Eclipse plug-in to debug with J-Link
in an Eclipse environment.


Prerequisites
-------------

* You already have the GDB Server and J-Link
  Commander utility you downloaded with the
  `Software and documentation pack for Linux ARM systems V5
  <https://www.segger.com/jlink-software.html>`_.

* Review the `GNU Tools for ARM Embedded Processors
  <https://launchpad.net/gcc-arm-embedded>`_ documentation.


Steps
-----

1.  Download and install a Linux version of `Eclipse IDE for
    C/C++ Developers
    <https://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/lunasr2>`_
    if you do not have Eclipse installed already.

2.  Download and install the
    `GNU ARM Eclipse Plug-ins <http://sourceforge.net/projects/gnuarmeclipse/>`_,
    and follow the `online instructions
    <http://gnuarmeclipse.livius.net/blog/>`_.

3.  Follow the online instructions to install the
    `GDB Server <https://www.segger.com/jlink-gdb-server.html>`_.

4.  Download and install the
    `GCC, the GNU Compiler Collection <https://gcc.gnu.org/>`_.
    [This step does not apply to Wind River customers.]

5.  Download and install `GDB: The GNU Project Debugger
    <http://www.gnu.org/software/gdb/download/>`_.
    [This step does not apply to Wind River customers.]

6.  Download and install the `J-Link hardware debugging
    Eclipse plug-in <http://gnuarmeclipse.livius.net/blog/jlink-debugging/>`_.



Configuring the J-Link Debugger
===============================

Configure the J-Link Debugger to work with all the software installed.


Prerequisites
-------------

* The `J-Link hardware debugging Eclipse plug-in
  <http://gnuarmeclipse.livius.net/blog/jlink-debugging/>`_ page is open.


Steps
-----

1.  Follow the online configuration instructions that
    should be open already from the previous procedure,
    then optimize the configuration using the remaining
    steps in this procedure.

2.  Create an empty C project.

3.  Create a reference to the project.

    a) In the **Eclipse** menu, select **Run ->
       Debug Configurations -> C/C++Application -> Main**.

    b) Click the Project: **Browse** button and select the
       project you created a reference to.

    c) Click the C/C++Application: **Browse** button and select
       an existing ELF or binary file.

    d) Deselect **Enable auto build** and click **Apply**.

4.  Select the **Common** tab.

5.  In the **Save as:** field, type `Local file` and
    click **Apply**.

6.  Select the **Debugger** tab.

7.  In the **Executable:** field, type the path to the GDB installation.

8.  In the **Device name:** field, type `MK64FN1M0xxx12`
    and click **Apply**.

9.  Select the **Startup** tab.

10. Deselect **SWO Enable**.

11. Deselect **Enable semihosting**.

12. Select :guilabel:`Load symbols`.

13. Click **Use File** and type the name of a Zephyr
    .elf file.

14. Click **Apply**.

Programming Flash with J-link
=============================

Program Flash with J-Link to run the an image directly
from the shell.


Prerequisites
-------------

* Have the Zephyr application image file saved as a binary file.
  (The build should have created this binary file automatically.)


Steps
-----

1.  In a console, change directory to the J-Link installation directory.

2.  At the *J-Link>* prompt, enter::

       exec device = MK64FN1M0xxx12

3.  Enter::

       loadbin [filename], [addr]

    Example: ``loadbin zephyr.bin, 0x0``

4.  Enter::

       verifybin [filename],[addr]

    Example: ``verifybin zephyr.bin, 0x0``

5.  To reset the target, enter::

       r

6.  To start the image running directly from the shell, enter::

       g

7.  To stop the image from running, enter::

       h

Known Problems and Limitations
******************************

There is no support for the following:

* Memory protection through optional MPU.
  However, using a XIP kernel effectively provides
  TEXT/RODATA write protection in ROM.

* SRAM at addresses 0x1FFF0000-0x1FFFFFFF

* Writing to the hardware's flash memory

Bibliography
************

1. The Definitive Guide to the ARM Cortex-M3,
   Second Edition by Joseph Yiu (ISBN?978-0-12-382090-7)
2. ARMv7-M Architecture Technical Reference Manual
   (ARM DDI 0403D ID021310)
3. Procedure Call Standard for the ARM Architecture
   (ARM IHI 0042E, current through ABI release 2.09,
   2012/11/30)
4. Cortex-M3 Revision r2p1 Technical Reference Manual
   (ARM DDI 0337I ID072410)
5. Cortex-M4 Revision r0p1 Technical Reference Manual
   (ARM DDI 0439D ID061113)
6. Cortex-M3 Devices Generic User Guide
   (ARM DUI 0052A ID121610)
7. K64 Sub-Family Reference Manual, Rev. 2, January 2014
   (Freescale K64P144M120SF5RM)
8. FRDM-K64F Freedom Module User's Guide, Rev. 0, 04/2014
   (Freescale FRDMK64FUG)
