5245 lines
146 KiB
Plaintext
5245 lines
146 KiB
Plaintext
|
Name:
|
||
|
=====
|
||
|
adc_vbatt
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ADC VBATT voltage divider, BATT load, and temperature reading example.
|
||
|
|
||
|
|
||
|
This example initializes the ADC, and a timer. Two times per second it
|
||
|
reads the VBATT voltage divider and temperature sensor and prints them.
|
||
|
It monitors button 0 and if pressed, it turns on the BATT LOAD resistor.
|
||
|
One should monitor MCU current to see when the load is on or off.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
bc_boot_demo
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
This example is a copy of the "binary counter" demo compiled and linked to
|
||
|
run at flash address 0x8000 instead of 0x0000. This is useful for users who
|
||
|
would like to run their applications with a permanent bootloader program in
|
||
|
the first page of flash.
|
||
|
|
||
|
Please see the linker configuration files for an example of how this offset
|
||
|
can be built into the compilation process.
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
binary_counter
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
This example increments a variable on every timer interrupt. The global
|
||
|
variable is used to set the state of the LEDs. The example sleeps otherwise.
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
clkout
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Enables a clock source to clkout and then tracks it on an LED array.
|
||
|
|
||
|
|
||
|
This example enables the LFRC to a clkout pin then uses GPIO polling to
|
||
|
track its rising edge and toggle an LED at 1 hertz.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrating how to enter deepsleep.
|
||
|
|
||
|
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
sleep mode the device has no ability to wake up. This example is merely to
|
||
|
provide the opportunity to measure deepsleep current without interrupts
|
||
|
interfering with the measurement.
|
||
|
|
||
|
The example begins by printing out a banner annoucement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep_wake
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that goes to deepsleep and wakes from either the RTC or GPIO.
|
||
|
|
||
|
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
deep sleep the device has the ability to wake from button 0 or
|
||
|
the RTC configured to interrupt every second. If the MCU woke from a button
|
||
|
press, it will toggle LED0. If the MCU woke from the RTC, it will toggle
|
||
|
LED1.
|
||
|
|
||
|
The example begins by printing out a banner annoucement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
flash_write
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Flash write example.
|
||
|
|
||
|
|
||
|
This example shows how to modify the internal Flash using HAL flash helper
|
||
|
functions.
|
||
|
|
||
|
This example works on instance 1 of the Flash, i.e. the portion of the
|
||
|
Flash above 256KB/512KB.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_lowpower
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the app running under FreeRTOS.
|
||
|
|
||
|
|
||
|
This example implements LED task within the FreeRTOS framework. It monitors
|
||
|
three On-board buttons, and toggles respective on-board LEDs in response.
|
||
|
To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_fault
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple example that causes a hard-fault.
|
||
|
|
||
|
|
||
|
This example demonstrates the extended hard fault handler which can
|
||
|
assist the user in decoding a fault condition. The handler pulls the
|
||
|
registers that the Cortex M4 automatically loads onto the stack and
|
||
|
combines them with various other fault information into a single
|
||
|
data structure saved locally. It can optionally print out the fault
|
||
|
data structure (assuming the stdio printf has previously been enabled
|
||
|
and is still enabled at the time of the fault).
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example.
|
||
|
|
||
|
|
||
|
This example prints a "Hello World" message with some device info
|
||
|
over SWO at 1M baud. To see the output of this program, run AMFlash,
|
||
|
and configure the console for SWO. The example sleeps after it is done
|
||
|
printing.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world_uart
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example using the UART peripheral.
|
||
|
|
||
|
|
||
|
This example prints a "Hello World" message with some device info
|
||
|
over UART at 115200 baud. To see the output of this program, run AMFlash,
|
||
|
and configure the console for UART. The example sleeps after it is done
|
||
|
printing.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
i2c_boot_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to drive the IO Slave on a second board.
|
||
|
|
||
|
|
||
|
This example acts as the boot host for spi_boot and multi_boot on Apollo
|
||
|
and Apollo2 MCUs. It will deliver a predefined firmware image to a boot
|
||
|
slave over an I2C protocol. The purpose of this demo is to show how a host
|
||
|
processor might store, load, and update the firmware on an Apollo or
|
||
|
Apollo2 device that is connected as a slave.
|
||
|
|
||
|
Please see the multi_boot README.txt for more details on how to run the
|
||
|
examples.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
GND GND
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example slave used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
This slave component runs on one EVB and is used in conjunction with
|
||
|
the companion host example, ios_fifo_host, which runs on a second EVB.
|
||
|
|
||
|
The ios_fifo example has no print output.
|
||
|
The host example does use the ITM SWO to let the user know progress and
|
||
|
status of the demonstration.
|
||
|
|
||
|
This example implements the slave part of a protocol for data exchange with
|
||
|
an Apollo IO Master (IOM). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgement to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partitally or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
In order to run this example, a host device (e.g. a second EVB) must be set
|
||
|
up to run the host example, ios_fifo_host. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example host used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
This host component runs on one EVB and is used in conjunction with
|
||
|
the companion slave example, ios_fifo, which runs on a second EVB.
|
||
|
|
||
|
The host example uses the ITM SWO to let the user know progress and
|
||
|
status of the demonstration. The SWO is configured at 1M baud.
|
||
|
The ios_fifo example has no print output.
|
||
|
|
||
|
This example implements the host part of a protocol for data exchange with
|
||
|
an Apollo IO Slave (IOS). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgement to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partitally or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
In order to run this example, a slave device (e.g. a second EVB) must be set
|
||
|
up to run the companion example, ios_fifo. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
itm_printf
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that uses the ITM interface for printf.
|
||
|
|
||
|
|
||
|
This example walks through the ASCII table (starting at character 033('!')
|
||
|
and ending on 126('~')) and prints the character to the ARM ITM. This output
|
||
|
can be decoded by running a terminal emulator (e.g. SEGGER J-Link SWO Viewer)
|
||
|
and configuring the console for SWO at 1M Baud. This example works by
|
||
|
configuring a timer and printing a new character after ever interrupt and
|
||
|
sleeps in between timer interrupts.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
multi_boot
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Bootloader program accepting multiple host protocols.
|
||
|
|
||
|
|
||
|
Multiboot is a bootloader program that supports flash programming over UART,
|
||
|
SPI, and I2C. The correct protocol is selected automatically at boot time.
|
||
|
The messaging is expected to follow little-endian format, which is native to
|
||
|
the Cortex M4 used in Apollo and Apollo2.
|
||
|
|
||
|
If a valid image is already present on the target device, Multiboot will run
|
||
|
that image. Otherwise it will wait for a new image to be downloaded from
|
||
|
the host. A new image download can be forced on the target by using the
|
||
|
"override" capability via one of the pins.
|
||
|
|
||
|
Running this example requires 2 EVBs - one EVB to run multi_boot, the second
|
||
|
to run a host example such as spi_boot_host or i2c_boot_host. The two EVBs
|
||
|
are generally fly wired together as shown below.
|
||
|
|
||
|
The most straightforward method of running the demonstration is to use two
|
||
|
EVBs of the same type (i.e. 2 Apollo EVBs or 2 Apollo2 EVBs) as both the
|
||
|
host and the target. Then the pins on the two EVBs are connected as shown
|
||
|
in the chart including the optional reset and override pins. With these
|
||
|
connections, the host controls everything and no user intervention is
|
||
|
required other than the press the reset button on the host to initiate the
|
||
|
process.
|
||
|
|
||
|
The host downloads an executable (target) image to the slave that will run
|
||
|
on the target. By default that image is binary_counter, which is obvious
|
||
|
to see running on the slave.
|
||
|
|
||
|
In the default scenario (two boards of the same type), the image downloaded
|
||
|
by the host is compatible with the host board type, so it will run without
|
||
|
modification on the target. In the case of the host device being different
|
||
|
from the target, the image downloaded from the host must be modified to be
|
||
|
compatible with the target (requires rebuilding the host example).
|
||
|
|
||
|
The EVB Button1 (usually labelled BTN2 on the EVB silkscreen) is the manual
|
||
|
override which can be used to force downloading of a new image even if a
|
||
|
valid image already exists on the target. The host examples use the same
|
||
|
"override" pin signal when downloading a new image.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin (NRST) or n/c
|
||
|
GND GND
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
multi_boot
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Bootloader program accepting multiple host protocols.
|
||
|
|
||
|
|
||
|
This is a bootloader program that supports flash programming over UART,
|
||
|
SPI, and I2C. The correct protocol is selected automatically at boot time.
|
||
|
The messaging is expected to follow little-endian format, which is native to
|
||
|
Apollo1/2.
|
||
|
This version of bootloader also supports security features -
|
||
|
Image confidentiality, Authentication, and key revocation is supported
|
||
|
using a simple CRC-CBC based encryption mechanism.
|
||
|
|
||
|
Default override pin corresponds to Button1. So, even if a valid image is
|
||
|
present in flash, bootloader can be forced to wait for new image from host.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
pwm_gen
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Breathing LED example.
|
||
|
|
||
|
|
||
|
This example shows one way to vary the brightness of an LED using timers in
|
||
|
PWM mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
reset_states
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of various reset options in Apollo.
|
||
|
|
||
|
|
||
|
This example shows a simple configuration of the watchdog. It will print
|
||
|
a banner message, configure the watchdog for both interrupt and reset
|
||
|
generation, and immediately start the watchdog timer.
|
||
|
The watchdog ISR provided will 'pet' the watchdog four times, printing
|
||
|
a notification message from the ISR each time.
|
||
|
On the fifth interrupt, the watchdog will not be pet, so the 'reset'
|
||
|
action will eventually be allowed to occur.
|
||
|
On the sixth timeout event, the WDT should issue a system reset, and the
|
||
|
program should start over from the beginning.
|
||
|
|
||
|
The program will repeat the following sequence on the console:
|
||
|
(POI Reset) 5 Interrupts - (WDT Reset) 3 Interrupts - (POR Reset) 3 Interrupts
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
rtc_print
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using the internal RTC.
|
||
|
|
||
|
|
||
|
This example demonstrates how to interface with the RTC and prints the
|
||
|
time over SWO.
|
||
|
|
||
|
The example works by configuring a timer interrupt which will periodically
|
||
|
wake the core from deep sleep. After every interrupt, it prints the current
|
||
|
RTC time.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
spi_boot_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to drive the IO Slave on a second board.
|
||
|
|
||
|
|
||
|
This example acts as the boot host for spi_boot and multi_boot on Apollo
|
||
|
and Apollo2 MCUs. It will deliver a predefined firmware image to a boot
|
||
|
slave over a SPI protocol. The purpose of this demo is to show how a host
|
||
|
processor might store, load, and update the firmware on an Apollo or
|
||
|
Apollo2 device that is connected as a slave.
|
||
|
|
||
|
Please see the multi_boot README.txt for more details on how to run the
|
||
|
examples.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
GND GND
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using a ctimer with interrupts.
|
||
|
|
||
|
|
||
|
This example demonstrates how to setup the ctimer for counting and
|
||
|
interrupts. It toggles LED 0 every interrupt.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
uart_printf
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that uses the UART interface for printf.
|
||
|
|
||
|
|
||
|
This example walks through the ASCII table (starting at character 033('!')
|
||
|
and ending on 126('~')) and prints the character to the UART. This output
|
||
|
can be decoded by running AM Flash and configuring the console for UART at
|
||
|
115200 Baud. This example works by configuring a timer and printing a new
|
||
|
character after ever interrupt and sleeps in between timer interrupts.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
watchdog
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of a basic configuration of the watchdog.
|
||
|
|
||
|
|
||
|
This example shows a simple configuration of the watchdog. It will print
|
||
|
a banner message, configure the watchdog for both interrupt and reset
|
||
|
generation, and immediately start the watchdog timer.
|
||
|
The watchdog ISR provided will 'pet' the watchdog four times, printing
|
||
|
a notification message from the ISR each time.
|
||
|
On the fifth interrupt, the watchdog will not be pet, so the 'reset'
|
||
|
action will eventually be allowed to occur.
|
||
|
On the sixth timeout event, the WDT should issue a system reset, and the
|
||
|
program should start over from the beginning.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
binary_counter
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
This example increments a variable on every timer interrupt. The global
|
||
|
variable is used to set the state of the LEDs. The example sleeps otherwise.
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_amdtp
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
AMDTP example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_amdtp
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
AMDTP example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amota
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the freertos amota app running under FreeRTOS.
|
||
|
|
||
|
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amota_blinky
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of an OTA-capable application.
|
||
|
|
||
|
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_ancs
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ANCS example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_beaconscanner
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
BLE Freertos Beacon Scanner Example
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_datc
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
BLE FreeRTOS Cordio Data Client example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_dats
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio Data Server example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_eddystone_url
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio EddyStone URL Example
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_power_cycle
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio Power Cycle EM9304 Example
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_fit
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the exactle_fit app running under FreeRTOS.
|
||
|
|
||
|
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_hid
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the hid app running under FreeRTOS.
|
||
|
|
||
|
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_ibeacon
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio based iBeacon example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_power_cycle
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio Power Cycle EM9304 Example
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_prodtest_datc
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
BLE FreeRTOS Cordio Data Client example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_prodtest_dats
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio Data Server example.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_tag
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio Proximity Tag Example
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_txpower_ctrl
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Cordio Tx power control Example
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_watch
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Concurrent Master/Slave Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates an BLE application in the Central role.
|
||
|
That is the BLE application operates as a slave to phone master and as the
|
||
|
master of subordinate slave devices running freertos_fit example in this SDK.
|
||
|
|
||
|
|
||
|
1. Printing takes place over the ITM at 1M Baud.
|
||
|
2. When the example powers up,
|
||
|
2.A. it enters advertising mode by default to wait for connection from
|
||
|
smart phone with Time profile, Alert Notification profile and Phone
|
||
|
Alert Status profile supported.
|
||
|
2.B. when BTN2 on Apollo3 EVB is short-pressed, if advertising is on, it
|
||
|
stops advertising first and then starts scanning when advertising is
|
||
|
stopped; if scanning is on, it stops scanning and re-start advertising
|
||
|
when scanning stops.
|
||
|
2.C. During scanning, the device (if discovered) running freertos_fit
|
||
|
example in this SDK will be connected and scanning will be stopped.
|
||
|
2.D. Repeat 2.B. and 2.C. above to connect to a new slave device running
|
||
|
freertos_fit example (max slaves is 3).
|
||
|
3. when phone (iPhone is used) connects to this example, the services of Time
|
||
|
profile, Alert Notification profile and Phone Alert Status profile will be
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrating how to enter deepsleep.
|
||
|
|
||
|
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
sleep mode the device has no ability to wake up. This example is merely to
|
||
|
provide the opportunity to measure deepsleep current without interrupts
|
||
|
interfering with the measurement.
|
||
|
|
||
|
The example begins by printing out a banner annoucement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
em9304_test_bridge
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
UART-to-SPI bridge for Bluetooth Direct Mode testing of EM9304.
|
||
|
|
||
|
|
||
|
This project implements a UART to SPI bridge for Direct Mode testing of
|
||
|
the EM9304 BLE Controller. The project uses UART0 and IOM5 in SPI mode.
|
||
|
HCI packets are provided over the UART which the Apollo2 transfers via
|
||
|
the SPI interface according to the EM9304 data sheet. Responses from the
|
||
|
EM9304 are read from the SPI interface and relayed over the UART. The
|
||
|
project uses the FIFOs and interrupts of the UART and IOM in order to
|
||
|
implement non-blocking processing of the next received packet from either
|
||
|
interface.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_lpmode0
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that takes samples with the ADC at high-speed.
|
||
|
|
||
|
|
||
|
This example shows the CTIMER-A3 triggering repeated samples of an external
|
||
|
input at 1.2Msps in LPMODE0. The example uses the CTIMER-A3 to trigger
|
||
|
ADC sampling. Each data point is 128 sample average and is read from the
|
||
|
ADC FIFO into an SRAM circular buffer.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_lpmode1
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that periodically takes samples with the ADC.
|
||
|
|
||
|
|
||
|
This example shows the CTIMER-A3 triggering repeated samples of the
|
||
|
temperature sensor in low-power mode 1.
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_lpmode2
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that takes samples with the ADC at 1Hz and powers off the
|
||
|
|
||
|
ADC between samples. CTIMER-A1 is used to drive the process.
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_vbatt
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ADC VBATT voltage divider, BATT load, and temperature reading example.
|
||
|
|
||
|
|
||
|
This example initializes the ADC, and a timer. Two times per second it
|
||
|
reads the VBATT voltage divider and temperature sensor and prints them.
|
||
|
It monitors button 0 and if pressed, it turns on the BATT LOAD resistor.
|
||
|
One should monitor MCU current to see when the load is on or off.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
bc_boot_demo
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
This example is a copy of the "binary counter" demo compiled and linked to
|
||
|
run at flash address 0x8000 instead of 0x0000. This is useful for users who
|
||
|
would like to run their applications with a permanent bootloader program in
|
||
|
the first page of flash.
|
||
|
|
||
|
Please see the linker configuration files for an example of how this offset
|
||
|
can be built into the compilation process.
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
binary_counter
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
This example increments a variable on every timer interrupt. The global
|
||
|
variable is used to set the state of the LEDs. The example sleeps otherwise.
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
buckzx_demo
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Demonstrate operation of the buck zero-cross implementation.
|
||
|
|
||
|
|
||
|
See Errata ERR019 for additional details on this issue.
|
||
|
|
||
|
Heavily based on deepsleep_wake, this example demonstrates the
|
||
|
operation of the buck zero-cross implementation.
|
||
|
|
||
|
The example uses 5 GPIOs in total for the demonstration as follows:
|
||
|
GPIO 3: Shows the CTIMER A buck pulse.
|
||
|
GPIO 4: Shows The CTIMER B buck pulse.
|
||
|
GPIO 5: Demarcates the sleep cycle; high while sleeping,
|
||
|
low when awake.
|
||
|
GPIO 6: Demarcates am_ctimer_isr(), high when the ISR is
|
||
|
entered, low on exit. Basically envelopes each of
|
||
|
the buck pulses.
|
||
|
GPIO 7: Toggling pattern of approximately 1us width during
|
||
|
the time the bucks are being restored.
|
||
|
|
||
|
To run the buckzx_demo example:
|
||
|
- Connect an analyzer to GPIOs 3-7 on the apollo2_evb board with
|
||
|
a trigger (high-to-low) on GPIO5.
|
||
|
- Flash the example binary and reset.
|
||
|
- As on deepsleep_wake, the Apollo2 will incur an RTC interrupt
|
||
|
once every second. It will stay awake for one second, then it
|
||
|
will deep sleep for one second.
|
||
|
- The sleep time is indicated by GPIO 5 being high. The awake
|
||
|
time is indicated by GPIO 5 being low.
|
||
|
- Zooming in on the GPIO5 low-going pulse shows the buck handling
|
||
|
in action.
|
||
|
- GPIO 3 & 4 will each pulse once during the wake time. These
|
||
|
pulses show the core and memory bucks.
|
||
|
Note that the 2 signals occur differently depending on the
|
||
|
CTIMER used. CTIMERs 0 and 1 will see core buck on GPIO4
|
||
|
(CTimer B) and mem buck on GPIO3 (CTimer A). CTIMERs 2 and 3
|
||
|
are vice-versa.
|
||
|
- GPIO 6 pulses each time the CTIMER fires. Therefore, there
|
||
|
should be as many GPIO6 pulses as 3 & 4 combined.
|
||
|
- GPIO 7 simply demonstrates MCU usage while the bucks are resumed.
|
||
|
- Modify BUCK_TIMER (0 - 3) to change the timer that is actually
|
||
|
used for the operation.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
clkout
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Enables a clock source to clkout and then tracks it on an LED array.
|
||
|
|
||
|
|
||
|
This example enables the LFRC to a clkout pin then uses GPIO polling to
|
||
|
track its rising edge and toggle an LED at 1 hertz.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrating how to enter deepsleep.
|
||
|
|
||
|
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
sleep mode the device has no ability to wake up. This example is merely to
|
||
|
provide the opportunity to measure deepsleep current without interrupts
|
||
|
interfering with the measurement.
|
||
|
|
||
|
The example begins by printing out a banner annoucement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep_wake
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that goes to deepsleep and wakes from either the RTC or GPIO.
|
||
|
|
||
|
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
deep sleep the device has the ability to wake from button 0 or
|
||
|
the RTC configured to interrupt every second. If the MCU woke from a button
|
||
|
press, it will toggle LED0. If the MCU woke from the RTC, it will toggle
|
||
|
LED1.
|
||
|
|
||
|
The example begins by printing out a banner annoucement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
flash_write
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Flash write example.
|
||
|
|
||
|
|
||
|
This example shows how to modify the internal Flash using HAL flash helper
|
||
|
functions.
|
||
|
|
||
|
This example works on instance 1 of the Flash, i.e. the portion of the
|
||
|
Flash above 256KB/512KB.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
flash_write_apollo2
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Flash write example specifically for Apollo 2.
|
||
|
|
||
|
|
||
|
This example shows how to modify the internal Flash using HAL flash helper
|
||
|
functions.
|
||
|
|
||
|
This example works on instance 1 of the Flash, i.e. the portion of the
|
||
|
Flash above 512KB. It is intended to execute from instance 0.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_lowpower
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the app running under FreeRTOS.
|
||
|
|
||
|
|
||
|
This example implements LED task within the FreeRTOS framework. It monitors
|
||
|
three On-board buttons, and toggles respective on-board LEDs in response.
|
||
|
To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_fault
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple example that causes a hard-fault.
|
||
|
|
||
|
|
||
|
This example demonstrates the extended hard fault handler which can
|
||
|
assist the user in decoding a fault condition. The handler pulls the
|
||
|
registers that the Cortex M4 automatically loads onto the stack and
|
||
|
combines them with various other fault information into a single
|
||
|
data structure saved locally. It can optionally print out the fault
|
||
|
data structure (assuming the stdio printf has previously been enabled
|
||
|
and is still enabled at the time of the fault).
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example.
|
||
|
|
||
|
|
||
|
This example prints a "Hello World" message with some device info
|
||
|
over SWO at 1M baud. To see the output of this program, run AMFlash,
|
||
|
and configure the console for SWO. The example sleeps after it is done
|
||
|
printing.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world_uart
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example using the UART peripheral.
|
||
|
|
||
|
|
||
|
This example prints a "Hello World" message with some device info
|
||
|
over UART at 115200 baud. To see the output of this program, run AMFlash,
|
||
|
and configure the console for UART. The example sleeps after it is done
|
||
|
printing.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
i2c_boot_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to drive the IO Slave on a second board.
|
||
|
|
||
|
|
||
|
This example acts as the boot host for spi_boot and multi_boot on Apollo
|
||
|
and Apollo2 MCUs. It will deliver a predefined firmware image to a boot
|
||
|
slave over an I2C protocol. The purpose of this demo is to show how a host
|
||
|
processor might store, load, and update the firmware on an Apollo or
|
||
|
Apollo2 device that is connected as a slave.
|
||
|
|
||
|
Please see the multi_boot README.txt for more details on how to run the
|
||
|
examples.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
GND GND
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
i2c_loopback
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of I2C operation using IOM #0 talking to the IOS over I2C
|
||
|
|
||
|
|
||
|
SWO is configured in 1M baud, 8-n-1 mode.
|
||
|
PIN Fly Lead Assumptions for the I/O Master (IOM):
|
||
|
IOM0
|
||
|
GPIO[5] == IOM4 I2C SCL
|
||
|
GPIO[6] == IOM4 I2C SDA
|
||
|
|
||
|
IOS
|
||
|
PIN Fly Lead Assumptions for the I/O Slave (IOS):
|
||
|
GPIO[0] == IOS I2C SCL
|
||
|
GPIO[1] == IOS I2C SDA
|
||
|
|
||
|
Connect IOM4 I2C pins to corresponding IOS I2C pins
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example slave used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
This slave component runs on one EVB and is used in conjunction with
|
||
|
the companion host example, ios_fifo_host, which runs on a second EVB.
|
||
|
|
||
|
The ios_fifo example has no print output.
|
||
|
The host example does use the ITM SWO to let the user know progress and
|
||
|
status of the demonstration.
|
||
|
|
||
|
This example implements the slave part of a protocol for data exchange with
|
||
|
an Apollo IO Master (IOM). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgement to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partitally or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
In order to run this example, a host device (e.g. a second EVB) must be set
|
||
|
up to run the host example, ios_fifo_host. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example host used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
This host component runs on one EVB and is used in conjunction with
|
||
|
the companion slave example, ios_fifo, which runs on a second EVB.
|
||
|
|
||
|
The host example uses the ITM SWO to let the user know progress and
|
||
|
status of the demonstration. The SWO is configured at 1M baud.
|
||
|
The ios_fifo example has no print output.
|
||
|
|
||
|
This example implements the host part of a protocol for data exchange with
|
||
|
an Apollo IO Slave (IOS). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgement to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partitally or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
In order to run this example, a slave device (e.g. a second EVB) must be set
|
||
|
up to run the companion example, ios_fifo. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
itm_printf
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that uses the ITM interface for printf.
|
||
|
|
||
|
|
||
|
This example walks through the ASCII table (starting at character 033('!')
|
||
|
and ending on 126('~')) and prints the character to the ARM ITM. This output
|
||
|
can be decoded by running a terminal emulator (e.g. SEGGER J-Link SWO Viewer)
|
||
|
and configuring the console for SWO at 1M Baud. This example works by
|
||
|
configuring a timer and printing a new character after ever interrupt and
|
||
|
sleeps in between timer interrupts.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
multi_boot
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Bootloader program accepting multiple host protocols.
|
||
|
|
||
|
|
||
|
Multiboot is a bootloader program that supports flash programming over UART,
|
||
|
SPI, and I2C. The correct protocol is selected automatically at boot time.
|
||
|
The messaging is expected to follow little-endian format, which is native to
|
||
|
the Cortex M4 used in Apollo and Apollo2.
|
||
|
|
||
|
If a valid image is already present on the target device, Multiboot will run
|
||
|
that image. Otherwise it will wait for a new image to be downloaded from
|
||
|
the host. A new image download can be forced on the target by using the
|
||
|
"override" capability via one of the pins.
|
||
|
|
||
|
Running this example requires 2 EVBs - one EVB to run multi_boot, the second
|
||
|
to run a host example such as spi_boot_host or i2c_boot_host. The two EVBs
|
||
|
are generally fly wired together as shown below.
|
||
|
|
||
|
The most straightforward method of running the demonstration is to use two
|
||
|
EVBs of the same type (i.e. 2 Apollo EVBs or 2 Apollo2 EVBs) as both the
|
||
|
host and the target. Then the pins on the two EVBs are connected as shown
|
||
|
in the chart including the optional reset and override pins. With these
|
||
|
connections, the host controls everything and no user intervention is
|
||
|
required other than the press the reset button on the host to initiate the
|
||
|
process.
|
||
|
|
||
|
The host downloads an executable (target) image to the slave that will run
|
||
|
on the target. By default that image is binary_counter, which is obvious
|
||
|
to see running on the slave.
|
||
|
|
||
|
In the default scenario (two boards of the same type), the image downloaded
|
||
|
by the host is compatible with the host board type, so it will run without
|
||
|
modification on the target. In the case of the host device being different
|
||
|
from the target, the image downloaded from the host must be modified to be
|
||
|
compatible with the target (requires rebuilding the host example).
|
||
|
|
||
|
The EVB Button1 (usually labelled BTN2 on the EVB silkscreen) is the manual
|
||
|
override which can be used to force downloading of a new image even if a
|
||
|
valid image already exists on the target. The host examples use the same
|
||
|
"override" pin signal when downloading a new image.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin (NRST) or n/c
|
||
|
GND GND
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
multi_boot
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Bootloader program accepting multiple host protocols.
|
||
|
|
||
|
|
||
|
This is a bootloader program that supports flash programming over UART,
|
||
|
SPI, and I2C. The correct protocol is selected automatically at boot time.
|
||
|
The messaging is expected to follow little-endian format, which is native to
|
||
|
Apollo1/2.
|
||
|
This version of bootloader also supports security features -
|
||
|
Image confidentiality, Authentication, and key revocation is supported
|
||
|
using a simple CRC-CBC based encryption mechanism.
|
||
|
|
||
|
Default override pin corresponds to Button1. So, even if a valid image is
|
||
|
present in flash, bootloader can be forced to wait for new image from host.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
prime
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
This example consists of a non-optimized, brute-force routine for computing
|
||
|
the number of prime numbers between 1 and a given value, N. The routine
|
||
|
uses modulo operations to determine whether a value is prime or not. While
|
||
|
obviously not optimal, it is very useful for exercising the core.
|
||
|
|
||
|
For this example, N is 100000, for which the answer is 9592.
|
||
|
|
||
|
For Apollo3 at 48MHz, the time to compute the answer for Keil and IAR:
|
||
|
IAR v8.11.1: 1:43.
|
||
|
Keil ARMCC 4060528: 1:55.
|
||
|
|
||
|
Apollo2 at 48MHz takes less than 2 1/4 minutes to determine that answer
|
||
|
when compiled with IAR v8.11.
|
||
|
|
||
|
The goal of this example is to measure current consumption while the core
|
||
|
is working to compute the answer. Power and energy can then be derived
|
||
|
knowing the current and run time.
|
||
|
|
||
|
The example prints an initial banner to the UART port. After each prime
|
||
|
loop, it enables the UART long enough to print the answer, disables the
|
||
|
UART and starts the computation again.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
Note: For minimum power, disable the printing by setting PRINT_UART to 0.
|
||
|
|
||
|
The prime_number() routine is open source and is used here under the
|
||
|
GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007. Details,
|
||
|
documentation, and the full license for this routine can be found in
|
||
|
the third_party/prime_mpi/ directory of the SDK.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
pwm_gen
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Breathing LED example.
|
||
|
|
||
|
|
||
|
This example shows one way to vary the brightness of an LED using timers in
|
||
|
PWM mode.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
reset_states
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of various reset options in Apollo.
|
||
|
|
||
|
|
||
|
This example shows a simple configuration of the watchdog. It will print
|
||
|
a banner message, configure the watchdog for both interrupt and reset
|
||
|
generation, and immediately start the watchdog timer.
|
||
|
The watchdog ISR provided will 'pet' the watchdog four times, printing
|
||
|
a notification message from the ISR each time.
|
||
|
On the fifth interrupt, the watchdog will not be pet, so the 'reset'
|
||
|
action will eventually be allowed to occur.
|
||
|
On the sixth timeout event, the WDT should issue a system reset, and the
|
||
|
program should start over from the beginning.
|
||
|
|
||
|
The program will repeat the following sequence on the console:
|
||
|
(POI Reset) 5 Interrupts - (WDT Reset) 3 Interrupts - (POR Reset) 3 Interrupts
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
rtc_print
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using the internal RTC.
|
||
|
|
||
|
|
||
|
This example demonstrates how to interface with the RTC and prints the
|
||
|
time over SWO.
|
||
|
|
||
|
The example works by configuring a timer interrupt which will periodically
|
||
|
wake the core from deep sleep. After every interrupt, it prints the current
|
||
|
RTC time.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
spi_boot_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to drive the IO Slave on a second board.
|
||
|
|
||
|
|
||
|
This example acts as the boot host for spi_boot and multi_boot on Apollo
|
||
|
and Apollo2 MCUs. It will deliver a predefined firmware image to a boot
|
||
|
slave over a SPI protocol. The purpose of this demo is to show how a host
|
||
|
processor might store, load, and update the firmware on an Apollo or
|
||
|
Apollo2 device that is connected as a slave.
|
||
|
|
||
|
Please see the multi_boot README.txt for more details on how to run the
|
||
|
examples.
|
||
|
|
||
|
PIN fly lead connections assumed by multi_boot:
|
||
|
HOST SLAVE (multi_boot target)
|
||
|
-------- --------
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
|
||
|
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
|
||
|
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
GND GND
|
||
|
Reset and Override pin connections from Host are optional
|
||
|
Keeping Button1 pressed on target has same effect as host driving override
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
stimer
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using a stimer with interrupts.
|
||
|
|
||
|
|
||
|
This example demonstrates how to setup the stimer for counting and
|
||
|
interrupts. It toggles LED 0 every interrupt, which is set for 1 sec.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
uart_printf
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that uses the UART interface for printf.
|
||
|
|
||
|
|
||
|
This example demonstrates the use of SW Buffer for UART.
|
||
|
It listens to the UART, and loops back the received data on the Tx
|
||
|
6
|
||
|
The UART is set at 115,200 BAUD, 8 bit, no parity.
|
||
|
|
||
|
Finally, a banner, transmit, and receive status information is
|
||
|
printed to the ITM/SWO.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
uart_printf
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that uses the UART interface for printf.
|
||
|
|
||
|
|
||
|
This example walks through the ASCII table (starting at character 033('!')
|
||
|
and ending on 126('~')) and prints the character to the UART. This output
|
||
|
can be decoded by running AM Flash and configuring the console for UART at
|
||
|
115200 Baud. This example works by configuring a timer and printing a new
|
||
|
character after ever interrupt and sleeps in between timer interrupts.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
watchdog
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of a basic configuration of the watchdog.
|
||
|
|
||
|
|
||
|
This example shows a simple configuration of the watchdog. It will print
|
||
|
a banner message, configure the watchdog for both interrupt and reset
|
||
|
generation, and immediately start the watchdog timer.
|
||
|
The watchdog ISR provided will 'pet' the watchdog four times, printing
|
||
|
a notification message from the ISR each time.
|
||
|
On the fifth interrupt, the watchdog will not be pet, so the 'reset'
|
||
|
action will eventually be allowed to occur.
|
||
|
On the sixth timeout event, the WDT should issue a system reset, and the
|
||
|
program should start over from the beginning.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_lpmode0_dma
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
This example takes samples with the ADC at high-speed using DMA.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows the CTIMER-A3 triggering repeated samples of an external
|
||
|
input at 1.2Msps in LPMODE0. The example uses the CTIMER-A3 to trigger
|
||
|
ADC sampling. Each data point is 128 sample average and is transferred
|
||
|
from the ADC FIFO into an SRAM buffer using DMA.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_lpmode2
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
This example takes samples with the ADC at 1Hz in lowest power mode.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
To demonstrate the lowest possible power usage of the ADC. The
|
||
|
example powers off the ADC between samples. CTIMER-A1 is used to drive the
|
||
|
process. The CTIMER ISR reconfigures the ADC from scratch and triggers each
|
||
|
sample. The ADC ISR stores the sample and shuts down the ADC.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The ADC_EXAMPLE_DEBUG flag is used to display information in the example to
|
||
|
show that it is operating. This should be set to 0 for true low power
|
||
|
operation.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_vbatt
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of ADC sampling VBATT voltage divider, BATT load, and temperature.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example initializes the ADC, and a timer. Two times per second it
|
||
|
reads the VBATT voltage divider and temperature sensor and prints them.
|
||
|
It monitors button 0 and if pressed, it turns on the BATT LOAD resistor.
|
||
|
One should monitor MCU current to see when the load is on or off.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
binary_counter
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example increments a variable on every timer interrupt. The global
|
||
|
variable is used to set the state of the LEDs. The example sleeps otherwise.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amdtpc
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - AMDTP Client (Master) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example is the client (master) for the BLE Ambiq Micro
|
||
|
Data Transfer Protocol. This example is meant to run on an Apollo3 EVB
|
||
|
along with another Apollo3 EVB serving as the server. This example provides
|
||
|
a UART command line interface with a simple menu that allows the user to scan,
|
||
|
connect and initiate data transfers from either M->S or S->M direction.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amdtps
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - AMDTP Server (Slave) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example is the server (slave) for the BLE Ambiq Micro
|
||
|
Data Transfer Protocol. This example is meant to run on an Apollo3 EVB
|
||
|
along with another Apollo3 EVB serving as the client. This example waits
|
||
|
for connection and initiation of data transfers by the client (master).
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amota
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Ambiq Micro Over the Air (AMOTA) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements Ambiq Micro Over-the-Air (OTA) slave. This
|
||
|
example is designed to allow loading of a binary software update from either
|
||
|
and iOS or Android phone running Ambiq's application. This example works
|
||
|
with the Apollo3 Secure Bootloader (SBL) to place the image in flash and then
|
||
|
reset the Apollo3 to allow SBL to validate and install the image.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The directory \tools\apollo3_amota\scripts contains a Makefile which will
|
||
|
build the OTA binary.
|
||
|
|
||
|
The directory \docs\app_notes\amota explains how to use the Ambiq iOS and
|
||
|
Android applications.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_ancs
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Apple Notification Center Service (ANCS) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements a BLE Apple Notification Center Service
|
||
|
profile.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_fcc_test
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - FCC test example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example is used to put Bluetooth radio in Apollo3 into various
|
||
|
test mode on different channels on pressing BTN3 on the Apollo3 EVB.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_fit
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Fit Application Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To minimize power usage, this application is compiled without
|
||
|
debug printing by default (the "lp" version of this example excludes
|
||
|
them by default).
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
To enable debug printing, add the following project-level macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
When defined, debug messages will be sent over ITM/SWO at 1M Baud.
|
||
|
|
||
|
Note that when these macros are defined, the device will never achieve deep
|
||
|
sleep, only normal sleep, due to the ITM (and thus the HFRC) being enabled.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_fit_lp
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Fit Application Example at lowest possible power.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To minimize power usage, this application is compiled without
|
||
|
debug printing by default (the non-"lp" version of this example enables
|
||
|
them by default).
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
To enable debug printing, add the following project-level macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
When defined, debug messages will be sent over ITM/SWO at 1M Baud.
|
||
|
|
||
|
Note that when these macros are defined, the device will never achieve deep
|
||
|
sleep, only normal sleep, due to the ITM (and thus the HFRC) being enabled.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_power_cycle
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Power Cycling Apollo3 BLE Controller Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to properly shutdown and restart the
|
||
|
BLE Controller in an operational system. This includes the steps to restart
|
||
|
the ARM Cordio Host Stack in order to resynchronize with the BLE Controller.
|
||
|
The shutdown/restart process is driven by a 10 second WSF (Cordio) timer.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_tag
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Proximity Tag Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This is a standard BLE Proximity Profile example.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_txpower_ctrl
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Transmit Power Control Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates the control of BLE TX power level based
|
||
|
on pressing Button #0 on the Apollo3 EVB.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_watch
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Concurrent Master/Slave Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates an BLE application in the Central role.
|
||
|
That is the BLE application operates as a slave to phone master and as the
|
||
|
master of subordinate slave devices running freertos_fit example in this SDK.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
1. Printing takes place over the ITM at 1M Baud.
|
||
|
2. When the example powers up,
|
||
|
2.A. it enters advertising mode by default to wait for connection from
|
||
|
smart phone with Time profile, Alert Notification profile and Phone
|
||
|
Alert Status profile supported.
|
||
|
2.B. when BTN2 on Apollo3 EVB is short-pressed, if advertising is on, it
|
||
|
stops advertising first and then starts scanning when advertising is
|
||
|
stopped; if scanning is on, it stops scanning and re-start advertising
|
||
|
when scanning stops.
|
||
|
2.C. During scanning, the device (if discovered) running freertos_fit
|
||
|
example in this SDK will be connected and scanning will be stopped.
|
||
|
2.D. Repeat 2.B. and 2.C. above to connect to a new slave device running
|
||
|
freertos_fit example (max slaves is 3).
|
||
|
3. when phone (iPhone is used) connects to this example, the services of Time
|
||
|
profile, Alert Notification profile and Phone Alert Status profile will be
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
turbomode
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrates the usage of TurboSPOT (aka burst mode) HAL.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows how to detect if TurboSPOT Mode is available.
|
||
|
If so, it sets the Apollo3 into Normal (48MHz) mode, then times a
|
||
|
calculation of prime numbers, displaying the elapsed time. Next, it
|
||
|
switches the Apollo3 into Burst mode, performs the same calculation, then
|
||
|
displays the elapsed time, which should be roughly 50% of Normal mode.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
coremark
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
EEMBC COREMARK test.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example runs the official EEMBC COREMARK test.
|
||
|
|
||
|
The Coremark run begins by first outputing a banner (to the UART)
|
||
|
indicating that it has started. It then does a complete disable
|
||
|
and power down of the UART for accurate power measuring during the run.
|
||
|
|
||
|
The Coremkark implementation performs 2000 ITERATIONS (specified in
|
||
|
ambiq_core_config.h), which is plenty of time for correct operation
|
||
|
of the benchmark.
|
||
|
|
||
|
Once the run has completed, the UART is reenabled and the results printed.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ctimer_pwm_output
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Breathing LED example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows one way to vary the brightness of an LED using a timer
|
||
|
in PWM mode. The timer can be clocked from either the XTAL (default) or
|
||
|
the LFRC, selectable by a define, USE_XTAL.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrating how to enter deepsleep.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
sleep mode the device has no ability to wake up. This example is merely to
|
||
|
provide the opportunity to measure deepsleep current without interrupts
|
||
|
interfering with the measurement.
|
||
|
|
||
|
The example begins by printing out a banner announcement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep_wake
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that goes to deepsleep and wakes from either the RTC or GPIO.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
deep sleep the RTC peripheral will wake the device every second, check to
|
||
|
see if 5 seconds has elapsed and then toggle LED1.
|
||
|
|
||
|
Alternatively, it will awake when button 0 is pressed and toggle LED0.
|
||
|
|
||
|
The example begins by printing out a banner annoucement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
flash_selftest
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to test all onboard flash.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
This example runs a series of test patterns on all instances of the device
|
||
|
flash. It performs many of the same tests that the hardware BIST (built
|
||
|
in self test) uses at production test.
|
||
|
|
||
|
Results are saved in coded form to a defined data word (g_result) which
|
||
|
tracks any failure. Further, g_result can be given an absolute address
|
||
|
location so that an outside system will know where to find the results.
|
||
|
|
||
|
Results output is also configurable such that the simplified results
|
||
|
(pass/fail, done, etc.) can be output to GPIO bits.
|
||
|
|
||
|
The test must be loaded and executed in SRAM. Therefore a J-Link Commander
|
||
|
batch file is provided here to assist with that.
|
||
|
Alternatively the program can be loaded with a debugger and run from there.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
Using the J-Link Commander batch file on an Apollo3 Blue EVB:
|
||
|
- The Commander script file is one of either selftest_commander_gcc.jlink,
|
||
|
selftest_commander_iar.jlink, or selftest_commander_keil.jlink.
|
||
|
- Requires Segger J-Link v6.60 or later.
|
||
|
- As shipped in the SDK, the J-Link Commander scripts should be correctly
|
||
|
configured to run the given binary. If the test is modified, the commander
|
||
|
script may need an update of the SP and PC. The first two word values in
|
||
|
the vector table of your compiled binary determine the required values.
|
||
|
- Use the following command line at a DOS prompt.
|
||
|
jlink -CommanderScript selftest_commander_xxx.jlink
|
||
|
- The flash self test stores results to address 0x10030000.
|
||
|
0xFAE00000 = Pass, the flash tested good.
|
||
|
0xFAE0xxxx = Fail, where xxxx is a failure code.
|
||
|
- If USE_TIMER is enabled, the run time of the selftest is stored in two
|
||
|
words at 0x10030004 and 0x1003008. The first word is the whole number
|
||
|
of seconds, the second is the fractional part to 3 decimals. Therefore
|
||
|
the two values show the total run time in the form: ss.fff
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
flash_write
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Flash write example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows how to modify the internal Flash using HAL flash helper
|
||
|
functions.
|
||
|
|
||
|
This example works on instance 1 of the Flash, i.e. the portion of the
|
||
|
Flash above 256KB/512KB.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_lowpower
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the app running under FreeRTOS.
|
||
|
|
||
|
|
||
|
This example implements LED task within the FreeRTOS framework. It monitors
|
||
|
three On-board buttons, and toggles respective on-board LEDs in response.
|
||
|
To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_mspi_iom_display
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrating frame buffer compositing and display rendering
|
||
|
|
||
|
|
||
|
This example demonstrates frame buffer compositing and display rendering
|
||
|
using the hardware assisted MSPI to IOM transfer under FreeRTOS.
|
||
|
To demonstrate full speed frame composition and rendering, a ping-pong
|
||
|
Frame buffer is used in the PSRAM, and composition is done in parallel,
|
||
|
while rendering is ongoing from alternate frame buffer
|
||
|
|
||
|
At initialization, both the Display and PSRAM are initialized and the Src images
|
||
|
initialized
|
||
|
|
||
|
The program operates in one of the two modes - as directed by preprocessor macro SWIPE
|
||
|
If SWIPE is defined, the program demonstrates vertical and horizontal scrolling of
|
||
|
the Src Images - solely using scatter-gather of the Source images - with no CPU based
|
||
|
composition.
|
||
|
|
||
|
If SWIPE is not defined, the example demonstrates Compostion using CPU and Rendering
|
||
|
happen in parallel - using a Ping-Pong FrameBuffer.
|
||
|
|
||
|
Composition:
|
||
|
Composition uses two source images, again in PSRAM.
|
||
|
Src1 & Src2 - both containing a small vertical bar.
|
||
|
Composition creates a sliding bar effect, with the Src1 and Src2 bars moving
|
||
|
in opposite directions, overlapped with each other. In addition the background
|
||
|
color is changed for each update as well.
|
||
|
Compositing is done in internal SRAM, with small fragments
|
||
|
of Src images brought in to SRAM from PSRAM using DMA.
|
||
|
CPU computes the final image fragment using these two Src image fragments
|
||
|
brought into SRAM, which is then DMA'ed to PSRAM.
|
||
|
Compile time modes allow direct composition in PSRAM using XIPMM (or a combination
|
||
|
of XIP and XIPMM) as well.
|
||
|
The process repeats till the whole image is constructed.
|
||
|
|
||
|
Rendering:
|
||
|
This example demonstrates transferring a large buffer from a PSRAM device
|
||
|
connected on MSPI, to a Display device connected to another MSPI, using
|
||
|
hardware handshaking in Apollo3 Blue Plus - with minimal CPU involvement.
|
||
|
MSPI PSRAM imposes limits on max transaction size as well as page size
|
||
|
restrictions which need to be accounted for each MSPI transcation. Most of
|
||
|
these are handled by the Apollo3 Blue Plus hardware itself.
|
||
|
For the hardware based transaction splitting to work though, the address
|
||
|
needs to be word aligned. Hence the SW still takes care of some splitting
|
||
|
of transactions, if needed.
|
||
|
|
||
|
The program here creates a command queue for both the MSPIs, to
|
||
|
create a sequence of transactions - each reading a segment of the source
|
||
|
buffer to a temp buffer in internal SRAM, and then writing the same to the
|
||
|
Display. It uses hardware handshaking so that the Display transaction
|
||
|
is started only once the segement is read out completely from MSPI PSRAM.
|
||
|
To best utilize the buses, a ping-pong model is used using two temporary
|
||
|
buffers in SRAM. This allows the interfaces to not idle while waiting for
|
||
|
other to finish - essentially achieving close to the bandwidth achieved by
|
||
|
the slower of the two.
|
||
|
Rendering is synchronized with the TE signal from the display to ensure
|
||
|
no tearing on the display as the display buffer is being updated
|
||
|
|
||
|
XIP:
|
||
|
If enabled, a timer is started to run a prime function out of PSRAM periodically
|
||
|
|
||
|
XIPMM:
|
||
|
If enabled, a timer is started to run a demo function to exercise XIPMM out of PSRAM
|
||
|
|
||
|
Configurable parameters at compile time:
|
||
|
MSPI to use for DISPLAY (DISPLAY_MSPI_MODULE)
|
||
|
MSPI to use for PSRAM (PSRAM_MSPI_MODULE)
|
||
|
|
||
|
Operating modes:
|
||
|
CQ_RAW - Uses Preconstructed CQ (only small changes done at
|
||
|
run time) - to save on the time to program the same at run time
|
||
|
|
||
|
Memory Impacts of modes: If CQ_RAW is used - the buffer supplied to HAL for CQ could be very small,
|
||
|
as the raw CQ is supplied by the application. So overall memory usage is still about the same
|
||
|
|
||
|
Independent Controls:
|
||
|
Composition Modes:
|
||
|
How to Read Src Buffer: MODE_SRCBUF_READ (DMA/XIP/XIPMM <Apollo3-B0 Only>)
|
||
|
How to Write to Frame Buffer: MODE_DESTBUF_WRITE (DMA/XIPMM <Apollo3-B0 Only>)
|
||
|
|
||
|
Pin connections:
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_fault
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple example that causes a hard-fault.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates the extended hard fault handler which can
|
||
|
assist the user in decoding a fault condition. The handler pulls the
|
||
|
registers that the Cortex M4 automatically loads onto the stack and
|
||
|
combines them with various other fault information into a single
|
||
|
data structure saved locally. It can optionally print out the fault
|
||
|
data structure (assuming the stdio printf has previously been enabled
|
||
|
and is still enabled at the time of the fault).
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example prints a "Hello World" message with some device info.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world_uart
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example using the UART peripheral.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example prints a "Hello World" message with some device info
|
||
|
over UART at 115200 baud. To see the output of this program, run AMFlash,
|
||
|
and configure the console for UART. The example sleeps after it is done
|
||
|
printing.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example slave used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This slave component runs on one EVB and is used in conjunction with
|
||
|
the companion host example, ios_fifo_host, which runs on a second EVB.
|
||
|
|
||
|
The ios_fifo example has no print output.
|
||
|
The host example does use the ITM SWO to let the user know progress and
|
||
|
status of the demonstration.
|
||
|
|
||
|
This example implements the slave part of a protocol for data exchange with
|
||
|
an Apollo IO Master (IOM). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgment to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partially or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a host device (e.g. a second EVB) must be set
|
||
|
up to run the host example, ios_fifo_host. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example host used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This host component runs on one EVB and is used in conjunction with
|
||
|
the companion slave example, ios_fifo, which runs on a second EVB.
|
||
|
|
||
|
The host example uses the ITM SWO to let the user know progress and
|
||
|
status of the demonstration. The SWO is configured at 1M baud.
|
||
|
The ios_fifo example has no print output.
|
||
|
|
||
|
This example implements the host part of a protocol for data exchange with
|
||
|
an Apollo IO Slave (IOS). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgement to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partitally or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a slave device (e.g. a second EVB) must be set
|
||
|
up to run the companion example, ios_fifo. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_lram
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example slave used for demonstrating the use of the IOS lram.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This slave component runs on one EVB and is used in conjunction with
|
||
|
the companion host example, ios_lram_host, which runs on a second EVB.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a host device (e.g. a second EVB) must be set
|
||
|
up to run the host example, ios_lram_host. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_lram_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example host used for demonstrating the use of the IOS LRAM.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This host component runs on one EVB and is used in conjunction with
|
||
|
the companion slave example, ios_lram, which runs on a second EVB.
|
||
|
|
||
|
The host example uses the ITM SWO to let the user know progress and
|
||
|
status of the demonstration. The SWO is configured at 1M baud.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a slave device (e.g. a second EVB) must be set
|
||
|
up to run the companion example, ios_lram. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
mspi_quad_example
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the MSPI operation with Quad SPI Flash.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example configures an MSPI connected flash device in Quad mode
|
||
|
and performs various operations - verifying the correctness of the same
|
||
|
Operations include - Erase, Write, Read, Read using XIP Apperture and XIP.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
If the fireball device card is used, this example can work on:
|
||
|
Apollo3_eb + Fireball
|
||
|
Apollo3_eb + Fireball2
|
||
|
Recommend to use 1.8V power supply voltage.
|
||
|
Define FIREBALL_CARD in the config-template.ini file to select.
|
||
|
Define CYPRESS_S25FS064S or ADESTO_ATXP032 for Fireball
|
||
|
Define ADESTO_ATXP032 for Fireball2
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
pdm_fft
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to show basic PDM operation.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example enables the PDM interface to record audio signals from an
|
||
|
external microphone. The required pin connections are:
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
GPIO 11 - PDM DATA
|
||
|
GPIO 12 - PDM CLK
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
prime
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example consists of a non-optimized, brute-force routine for computing
|
||
|
the number of prime numbers between 1 and a given value, N. The routine
|
||
|
uses modulo operations to determine whether a value is prime or not. While
|
||
|
obviously not optimal, it is very useful for exercising the core.
|
||
|
|
||
|
For this example, N is 100000, for which the answer is 9592.
|
||
|
|
||
|
For Apollo3 at 48MHz, the time to compute the answer for Keil and IAR:
|
||
|
IAR v8.11.1: 1:43.
|
||
|
Keil ARMCC 4060528: 1:55.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The goal of this example is to measure current consumption while the core
|
||
|
is working to compute the answer. Power and energy can then be derived
|
||
|
knowing the current and run time.
|
||
|
|
||
|
The example prints an initial banner to the UART port. After each prime
|
||
|
loop, it enables the UART long enough to print the answer, disables the
|
||
|
UART and starts the computation again.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
Note: For minimum power, disable the printing by setting PRINT_UART to 0.
|
||
|
|
||
|
The prime_number() routine is open source and is used here under the
|
||
|
GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007. Details,
|
||
|
documentation, and the full license for this routine can be found in
|
||
|
the third_party/prime_mpi/ directory of the SDK.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
rtc_print
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using the internal RTC.
|
||
|
|
||
|
|
||
|
This example demonstrates how to interface with the RTC and prints the
|
||
|
time over SWO.
|
||
|
|
||
|
The example works by configuring a timer interrupt which will periodically
|
||
|
wake the core from deep sleep. After every interrupt, it prints the current
|
||
|
RTC time.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
stimer
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using a stimer with interrupts.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to setup the stimer for counting and
|
||
|
interrupts. It toggles LED 0 to 4 every interrupt, which is set for 1 sec.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
uart_ble_bridge
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Converts UART HCI commands to SPI.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example is primarily designed to enable DTM testing with the
|
||
|
Apollo3 EVB. The example accepts HCI commands over the UART at 115200 baud
|
||
|
and sends them using the BLEIF to the Apollo3 BLE Controller. Responses from
|
||
|
the BLE Controller are accepted over the BLEIF and sent over the UART.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
uart_boot_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Converts UART Wired transfer commands to SPI for use with SBL SPI testing.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example running on an intermediate board, along with the standard
|
||
|
uart_wired_update script running on host PC, can be used as a way to
|
||
|
communicate to Apollo3 SBL using SPI mode.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
PIN fly lead connections assumed:
|
||
|
HOST (this board) SLAVE (Apollo3 SBL target)
|
||
|
-------- --------
|
||
|
Apollo3 SPI or I2C common connections:
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[16] Override pin or n/c
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
GND GND
|
||
|
|
||
|
Apollo3 SPI additional connections:
|
||
|
GPIO[5] IOM0 SPI CLK GPIO[0] IOS SPI SCK
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
|
||
|
Apollo3 I2C additional connections:
|
||
|
GPIO[5] I2C SCL GPIO[0] I2C SCL
|
||
|
GPIO[6] I2C SDA GPIO[1] I2C SDA
|
||
|
|
||
|
Reset and Override pin connections from Host are optional, but using them
|
||
|
automates the entire process.
|
||
|
|
||
|
SPI or I2C mode can be handled in a couple of ways:
|
||
|
- SPI mode is the default (i.e. don't press buttons or tie pins low).
|
||
|
- For I2C, press button2 during reset and hold it until the program begins,
|
||
|
i.e. you see the "I2C clock = " msg.
|
||
|
Alternatively the button2 pin can be tied low.
|
||
|
- Note that on the Apollo3 EVB, button2 is labelled as 'BTN4', which is
|
||
|
the button located nearest the end of the board.
|
||
|
Also on the Apollo3 EVB, BTN4 uses pin 19. It happens that the header
|
||
|
pin for pin 19 on the EVB is adjacent to a ground pin, so a jumper can
|
||
|
be used to assert I2C mode.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
watchdog
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of a basic configuration of the watchdog.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows a simple configuration of the watchdog. It will print
|
||
|
a banner message, configure the watchdog for both interrupt and reset
|
||
|
generation, and immediately start the watchdog timer.
|
||
|
The watchdog ISR provided will 'pet' the watchdog four times, printing
|
||
|
a notification message from the ISR each time.
|
||
|
On the fifth interrupt, the watchdog will not be pet, so the 'reset'
|
||
|
action will eventually be allowed to occur.
|
||
|
On the sixth timeout event, the WDT should issue a system reset, and the
|
||
|
program should start over from the beginning.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
while
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example to emulate a polling loop.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example provides a demonstration of the power required while
|
||
|
executing in a tight loop on the Apollo3 MCU.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_lpmode0_dma
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
This example takes samples with the ADC at high-speed using DMA.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows the CTIMER-A3 triggering repeated samples of an external
|
||
|
input at 1.2Msps in LPMODE0. The example uses the CTIMER-A3 to trigger
|
||
|
ADC sampling. Each data point is 128 sample average and is transferred
|
||
|
from the ADC FIFO into an SRAM buffer using DMA.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_lpmode2
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
This example takes samples with the ADC at 1Hz in lowest power mode.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
To demonstrate the lowest possible power usage of the ADC. The
|
||
|
example powers off the ADC between samples. CTIMER-A1 is used to drive the
|
||
|
process. The CTIMER ISR reconfigures the ADC from scratch and triggers each
|
||
|
sample. The ADC ISR stores the sample and shuts down the ADC.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The ADC_EXAMPLE_DEBUG flag is used to display information in the example to
|
||
|
show that it is operating. This should be set to 0 for true low power
|
||
|
operation.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
adc_vbatt
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of ADC sampling VBATT voltage divider, BATT load, and temperature.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example initializes the ADC, and a timer. Two times per second it
|
||
|
reads the VBATT voltage divider and temperature sensor and prints them.
|
||
|
It monitors button 0 and if pressed, it turns on the BATT LOAD resistor.
|
||
|
One should monitor MCU current to see when the load is on or off.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
apollo3_secbl
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple secondary bootloader program example for Apollo3
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This program is an example template for a secondary bootloader program for Apollo3.
|
||
|
It demonstrates how to access info0 key area. It demonstrates how to use the Ambiq SBL OTA
|
||
|
framework for customer specific OTAs, e.g. to support external flash, or to support more
|
||
|
advanced auth/enc schemes. It demonstrates how to validate & transfer control to the real
|
||
|
main program image (assumed to be at address specified by MAIN_PROGRAM_ADDR_IN_FLASH in flash)
|
||
|
after locking the info0 area before exiting
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
To exercise this program:
|
||
|
Flash the main program at 0x10000 (MAIN_PROGRAM_ADDR_IN_FLASH)
|
||
|
Link this program at the address suitable for SBL nonsecure (0xC000) or secure (0xC100)
|
||
|
configuration
|
||
|
To test OTA - construct images using magic numbers in the range matching
|
||
|
AM_IMAGE_MAGIC_CUST
|
||
|
To test INFO0 key area access - need to keep INFO0->Security->PLONEXIT as 0
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
b0_hfadj
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
B0 HFADJ (ERR00x) SW Workaround Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to update a customer application to
|
||
|
workaround ERR00x.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
binary_counter
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example increments a variable on every timer interrupt. The global
|
||
|
variable is used to set the state of the LEDs. The example sleeps otherwise.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amdtpc
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - AMDTP Client (Master) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example is the client (master) for the BLE Ambiq Micro
|
||
|
Data Transfer Protocol. This example is meant to run on an Apollo3 EVB
|
||
|
along with another Apollo3 EVB serving as the server. This example provides
|
||
|
a UART command line interface with a simple menu that allows the user to scan,
|
||
|
connect and initiate data transfers from either M->S or S->M direction.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amdtps
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - AMDTP Server (Slave) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example is the server (slave) for the BLE Ambiq Micro
|
||
|
Data Transfer Protocol. This example is meant to run on an Apollo3 EVB
|
||
|
along with another Apollo3 EVB serving as the client. This example waits
|
||
|
for connection and initiation of data transfers by the client (master).
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_amota
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Ambiq Micro Over the Air (AMOTA) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements Ambiq Micro Over-the-Air (OTA) slave. This
|
||
|
example is designed to allow loading of a binary software update from either
|
||
|
and iOS or Android phone running Ambiq's application. This example works
|
||
|
with the Apollo3 Secure Bootloader (SBL) to place the image in flash and then
|
||
|
reset the Apollo3 to allow SBL to validate and install the image.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The directory \tools\apollo3_amota\scripts contains a Makefile which will
|
||
|
build the OTA binary.
|
||
|
|
||
|
The directory \docs\app_notes\amota explains how to use the Ambiq iOS and
|
||
|
Android applications.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_ancs
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Apple Notification Center Service (ANCS) Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements a BLE Apple Notification Center Service
|
||
|
profile.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_fit
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Fit Application Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To minimize power usage, this application is compiled without
|
||
|
debug printing by default (the "lp" version of this example excludes
|
||
|
them by default).
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
To enable debug printing, add the following project-level macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
When defined, debug messages will be sent over ITM/SWO at 1M Baud.
|
||
|
|
||
|
Note that when these macros are defined, the device will never achieve deep
|
||
|
sleep, only normal sleep, due to the ITM (and thus the HFRC) being enabled.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_fit_lp
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Fit Application Example at lowest possible power.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example implements a BLE heart rate sensor within the FreeRTOS
|
||
|
framework. To minimize power usage, this application is compiled without
|
||
|
debug printing by default (the non-"lp" version of this example enables
|
||
|
them by default).
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
To enable debug printing, add the following project-level macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
WSF_TRACE_ENABLED=1
|
||
|
|
||
|
When defined, debug messages will be sent over ITM/SWO at 1M Baud.
|
||
|
|
||
|
Note that when these macros are defined, the device will never achieve deep
|
||
|
sleep, only normal sleep, due to the ITM (and thus the HFRC) being enabled.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_power_cycle
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Power Cycling Apollo3 BLE Controller Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to properly shutdown and restart the
|
||
|
BLE Controller in an operational system. This includes the steps to restart
|
||
|
the ARM Cordio Host Stack in order to resynchronize with the BLE Controller.
|
||
|
The shutdown/restart process is driven by a 10 second WSF (Cordio) timer.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_tag
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Proximity Tag Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This is a standard BLE Proximity Profile example.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_txpower_ctrl
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Transmit Power Control Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates the control of BLE TX power level based
|
||
|
on pressing Button #0 on the Apollo3 EVB.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ble_freertos_watch
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
ARM Cordio BLE - Concurrent Master/Slave Example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates an BLE application in the Central role.
|
||
|
That is the BLE application operates as a slave to phone master and as the
|
||
|
master of subordinate slave devices running freertos_fit example in this SDK.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
1. Printing takes place over the ITM at 1M Baud.
|
||
|
2. When the example powers up,
|
||
|
2.A. it enters advertising mode by default to wait for connection from
|
||
|
smart phone with Time profile, Alert Notification profile and Phone
|
||
|
Alert Status profile supported.
|
||
|
2.B. when BTN2 on Apollo3 EVB is short-pressed, if advertising is on, it
|
||
|
stops advertising first and then starts scanning when advertising is
|
||
|
stopped; if scanning is on, it stops scanning and re-start advertising
|
||
|
when scanning stops.
|
||
|
2.C. During scanning, the device (if discovered) running freertos_fit
|
||
|
example in this SDK will be connected and scanning will be stopped.
|
||
|
2.D. Repeat 2.B. and 2.C. above to connect to a new slave device running
|
||
|
freertos_fit example (max slaves is 3).
|
||
|
3. when phone (iPhone is used) connects to this example, the services of Time
|
||
|
profile, Alert Notification profile and Phone Alert Status profile will be
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
turbomode
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrates the usage of TurboSPOT (aka burst mode) HAL.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows how to detect if TurboSPOT Mode is available.
|
||
|
If so, it sets the Apollo3 into Normal (48MHz) mode, then times a
|
||
|
calculation of prime numbers, displaying the elapsed time. Next, it
|
||
|
switches the Apollo3 into Burst mode, performs the same calculation, then
|
||
|
displays the elapsed time, which should be roughly 50% of Normal mode.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
cache_monitor
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example to show the performance of cache.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example provides a demonstration of the cache monitor to check
|
||
|
the cache hit rate and cache miss number.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
If the fireball device card is used, this example can work on:
|
||
|
Apollo3_eb + Fireball2
|
||
|
Recommend to use 3.3V power supply voltage.
|
||
|
Define FIREBALL_CARD and APS6404L in the config-template.ini file to select.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
coremark
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
EEMBC COREMARK test.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example runs the official EEMBC COREMARK test.
|
||
|
|
||
|
The Coremark run begins by first outputing a banner (to the UART)
|
||
|
indicating that it has started. It then does a complete disable
|
||
|
and power down of the UART for accurate power measuring during the run.
|
||
|
|
||
|
The Coremkark implementation performs 2000 ITERATIONS (specified in
|
||
|
ambiq_core_config.h), which is plenty of time for correct operation
|
||
|
of the benchmark.
|
||
|
|
||
|
Once the run has completed, the UART is reenabled and the results printed.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ctimer_multi_bidirectional_stepper
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
CTimer multiple bidirectional stepper motors Example,
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to create arbitrary patterns on multiple
|
||
|
CTimers. TMR6 A is used to create base timing for the patterns. TMR0 B
|
||
|
TMR1 A and TMR1 B are configured to dual edge trigger on TMR6 with separate
|
||
|
counting patterns. All timers are configured to run and then synchronized
|
||
|
off of the global timer enable.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The patterns are output as follows:
|
||
|
Pin12 - TMR6 A dual edge trigger pulse
|
||
|
Pin13 - TMR0 B positive pattern
|
||
|
Pin18 TMR1 A negative pattern
|
||
|
Pin19 TMR1 B inactive pattern
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ctimer_pwm_output
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Breathing LED example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows one way to vary the brightness of an LED using a timer
|
||
|
in PWM mode. The timer can be clocked from either the XTAL (default) or
|
||
|
the LFRC, selectable by a define, USE_XTAL.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ctimer_repeated_pattern
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
CTimer Repeated Pattern Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to create arbitrary repeated pattern on
|
||
|
CTimer. TMR0 A is used to create base timing for the pattern. TMR0 B
|
||
|
is configured to terminated on TMR0. All timers are configured to run and
|
||
|
then synchronized off of the global timer enable.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The patterns are output as follows:
|
||
|
Pin12 - TMR0 A terminate pulse
|
||
|
Pin13 - TMR0 B pattern
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ctimer_stepper_synch_32bit_pattern
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
CTimer Stepper Motor Synchronized 32 bit Pattern Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to create arbitrary patterns on multiple
|
||
|
CTimers. TMR0 A is used to create base timing for the patterns. TMR0 B
|
||
|
and TMR1 A/B are configured to trigger on TMR0 with separate counting
|
||
|
patterns. All timers are configured to run and then synchronized off of
|
||
|
the global timer enable.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The patterns are output as follows:
|
||
|
Pin12 - TMR0 A trigger pulse
|
||
|
Pin13 - TMR0 B pattern1
|
||
|
Pin18 - TMR1 A pattern2
|
||
|
Pin19 - TMR1 B pattern3
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ctimer_stepper_synch_64bit_pattern
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
CTimer Stepper Motor Synchronized 64 bit Pattern Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to create arbitrary patterns on
|
||
|
CTimer. TMR0 A is used to create base timing for the pattern.
|
||
|
and TMR1 A is configured to trigger on TMR0.
|
||
|
All timers are configured to run and then synchronized off of
|
||
|
the global timer enable.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The patterns are output as follows:
|
||
|
Pin12 - TMR0 A trigger pulse
|
||
|
Pin18 - TMR1 A pattern
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrating how to enter deepsleep.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
sleep mode the device has no ability to wake up. This example is merely to
|
||
|
provide the opportunity to measure deepsleep current without interrupts
|
||
|
interfering with the measurement.
|
||
|
|
||
|
The example begins by printing out a banner announcement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
deepsleep_wake
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that goes to deepsleep and wakes from either the RTC or GPIO.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example configures the device to go into a deep sleep mode. Once in
|
||
|
deep sleep the RTC peripheral will wake the device every second, check to
|
||
|
see if 5 seconds has elapsed and then toggle LED1.
|
||
|
|
||
|
Alternatively, it will awake when button 0 is pressed and toggle LED0.
|
||
|
|
||
|
The example begins by printing out a banner annoucement message through
|
||
|
the UART, which is then completely disabled for the remainder of execution.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
fast_gpio
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that demonstrates how to use the Fast GPIO feature of Apollo3.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to use Fast GPIO on Apollo3. The example
|
||
|
updates the LEDs with waveforms that can be observed with a logic analyzer.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
flash_selftest
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to test all onboard flash.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
This example runs a series of test patterns on all instances of the device
|
||
|
flash. It performs many of the same tests that the hardware BIST (built
|
||
|
in self test) uses at production test.
|
||
|
|
||
|
Results are saved in coded form to a defined data word (g_result) which
|
||
|
tracks any failure. Further, g_result can be given an absolute address
|
||
|
location so that an outside system will know where to find the results.
|
||
|
|
||
|
Results output is also configurable such that the simplified results
|
||
|
(pass/fail, done, etc.) can be output to GPIO bits.
|
||
|
|
||
|
The test must be loaded and executed in SRAM. Therefore a J-Link Commander
|
||
|
batch file is provided here to assist with that.
|
||
|
Alternatively the program can be loaded with a debugger and run from there.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
Using the J-Link Commander batch file on an Apollo3 Blue EVB:
|
||
|
- The Commander script file is one of either selftest_commander_gcc.jlink,
|
||
|
selftest_commander_iar.jlink, or selftest_commander_keil.jlink.
|
||
|
- Requires Segger J-Link v6.60 or later.
|
||
|
- As shipped in the SDK, the J-Link Commander scripts should be correctly
|
||
|
configured to run the given binary. If the test is modified, the commander
|
||
|
script may need an update of the SP and PC. The first two word values in
|
||
|
the vector table of your compiled binary determine the required values.
|
||
|
- Use the following command line at a DOS prompt.
|
||
|
jlink -CommanderScript selftest_commander_xxx.jlink
|
||
|
- The flash self test stores results to address 0x10030000.
|
||
|
0xFAE00000 = Pass, the flash tested good.
|
||
|
0xFAE0xxxx = Fail, where xxxx is a failure code.
|
||
|
- If USE_TIMER is enabled, the run time of the selftest is stored in two
|
||
|
words at 0x10030004 and 0x1003008. The first word is the whole number
|
||
|
of seconds, the second is the fractional part to 3 decimals. Therefore
|
||
|
the two values show the total run time in the form: ss.fff
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
flash_write
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Flash write example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows how to modify the internal Flash using HAL flash helper
|
||
|
functions.
|
||
|
|
||
|
This example works on instance 1 of the Flash, i.e. the portion of the
|
||
|
Flash above 256KB/512KB.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
freertos_lowpower
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the app running under FreeRTOS.
|
||
|
|
||
|
|
||
|
This example implements LED task within the FreeRTOS framework. It monitors
|
||
|
three On-board buttons, and toggles respective on-board LEDs in response.
|
||
|
To save power, this application is compiled without print
|
||
|
statements by default. To enable them, add the following project-level
|
||
|
macro definitions.
|
||
|
|
||
|
AM_DEBUG_PRINTF
|
||
|
|
||
|
If enabled, debug messages will be sent over ITM.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_fault
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple example that causes a hard-fault.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates the extended hard fault handler which can
|
||
|
assist the user in decoding a fault condition. The handler pulls the
|
||
|
registers that the Cortex M4 automatically loads onto the stack and
|
||
|
combines them with various other fault information into a single
|
||
|
data structure saved locally. It can optionally print out the fault
|
||
|
data structure (assuming the stdio printf has previously been enabled
|
||
|
and is still enabled at the time of the fault).
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example prints a "Hello World" message with some device info.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
hello_world_uart
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
A simple "Hello World" example using the UART peripheral.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example prints a "Hello World" message with some device info
|
||
|
over UART at 115200 baud. To see the output of this program, run AMFlash,
|
||
|
and configure the console for UART. The example sleeps after it is done
|
||
|
printing.
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
iom_fram
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that demonstrates IOM, connecting to a SPI or I2C FRAM
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
FRAM is initialized with a known pattern data using Blocking IOM Write.
|
||
|
This example starts a 1 second timer. At each 1 second period, it initiates
|
||
|
reading a fixed size block from the FRAM device using Non-Blocking IOM
|
||
|
Read, and comparing against the predefined pattern
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
Define USE_SPI to select SPI or I2C
|
||
|
Define one of FRAM_DEVICE_ macros to select the FRAM device
|
||
|
And if the fireball device card is used, this example can work on:
|
||
|
Apollo3_eb + Fireball
|
||
|
Apollo3_eb + Fireball2
|
||
|
Recommend to use 1.8V power supply voltage.
|
||
|
Define FIREBALL_CARD or FIREBALL2_CARD in the config-template.ini file to select.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example slave used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This slave component runs on one EVB and is used in conjunction with
|
||
|
the companion host example, ios_fifo_host, which runs on a second EVB.
|
||
|
|
||
|
The ios_fifo example has no print output.
|
||
|
The host example does use the ITM SWO to let the user know progress and
|
||
|
status of the demonstration.
|
||
|
|
||
|
This example implements the slave part of a protocol for data exchange with
|
||
|
an Apollo IO Master (IOM). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgment to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partially or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a host device (e.g. a second EVB) must be set
|
||
|
up to run the host example, ios_fifo_host. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_fifo_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example host used for demonstrating the use of the IOS FIFO.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This host component runs on one EVB and is used in conjunction with
|
||
|
the companion slave example, ios_fifo, which runs on a second EVB.
|
||
|
|
||
|
The host example uses the ITM SWO to let the user know progress and
|
||
|
status of the demonstration. The SWO is configured at 1M baud.
|
||
|
The ios_fifo example has no print output.
|
||
|
|
||
|
This example implements the host part of a protocol for data exchange with
|
||
|
an Apollo IO Slave (IOS). The host sends one byte commands on SPI/I2C by
|
||
|
writing to offset 0x80.
|
||
|
|
||
|
The command is issued by the host to Start/Stop Data accumulation, and also
|
||
|
to acknowledge read-complete of a block of data.
|
||
|
|
||
|
On the IOS side, once it is asked to start accumulating data (using START
|
||
|
command), two CTimer based events emulate sensors sending data to IOS.
|
||
|
When IOS has some data for host, it implements a state machine,
|
||
|
synchronizing with the host.
|
||
|
|
||
|
The IOS interrupts the host to indicate data availability. The host then
|
||
|
reads the available data (as indicated by FIFOCTR) by READing using IOS FIFO
|
||
|
(at address 0x7F). The IOS keeps accumulating any new data coming in the
|
||
|
background.
|
||
|
|
||
|
Host sends an acknowledgement to IOS once it has finished reading a block
|
||
|
of data initiated by IOS (partitally or complete). IOS interrupts the host
|
||
|
again if and when it has more data for the host to read, and the cycle
|
||
|
repeats - till host indicates that it is no longer interested in receiving
|
||
|
data by sending STOP command.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a slave device (e.g. a second EVB) must be set
|
||
|
up to run the companion example, ios_fifo. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_fifo_host) SLAVE (ios_fifo)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_lram
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example slave used for demonstrating the use of the IOS lram.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This slave component runs on one EVB and is used in conjunction with
|
||
|
the companion host example, ios_lram_host, which runs on a second EVB.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a host device (e.g. a second EVB) must be set
|
||
|
up to run the host example, ios_lram_host. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
ios_lram_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example host used for demonstrating the use of the IOS LRAM.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This host component runs on one EVB and is used in conjunction with
|
||
|
the companion slave example, ios_lram, which runs on a second EVB.
|
||
|
|
||
|
The host example uses the ITM SWO to let the user know progress and
|
||
|
status of the demonstration. The SWO is configured at 1M baud.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
In order to run this example, a slave device (e.g. a second EVB) must be set
|
||
|
up to run the companion example, ios_lram. The two boards can be connected
|
||
|
using fly leads between the two boards as follows.
|
||
|
|
||
|
Pin connections for the I/O Master board to the I/O Slave board.
|
||
|
SPI:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 SPI SCK GPIO[0] IOS SPI SCK
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
GND GND
|
||
|
|
||
|
I2C:
|
||
|
HOST (ios_lram_host) SLAVE (ios_lram)
|
||
|
-------------------- ----------------
|
||
|
GPIO[10] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[5] IOM0 I2C SCL GPIO[0] IOS I2C SCL
|
||
|
GPIO[6] IOM0 I2C SDA GPIO[1] IOS I2C SDA
|
||
|
GND GND
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
mspi_flash_loader
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
MSPI External Flash Loading and Execution Example
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates loading a binary image from internal
|
||
|
flash to MSPI external quad flash, then executing the program using
|
||
|
XIP from the external flash.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The binary must be linked to run from MSPI flash address range
|
||
|
(as specified by BIN_INSTALL_ADDR). The location and size of the binary
|
||
|
in internal flash are specified using BIN_ADDR_FLASH & BIN_SIZE
|
||
|
|
||
|
This example has been enhanced to use the new 'binary patching' feature
|
||
|
This example will not build if proper startup/linker files are not used.
|
||
|
|
||
|
Prepare the example as follows:
|
||
|
1. Generate hello_world example to load and execute at MSPI Flash XIP location 0x04000000.
|
||
|
i. In the /examples/hello_world/iar directory modify the FLASH region as follows:
|
||
|
change "define region ROMEM = mem:[from 0x0000C000 to 0x000FC000];"
|
||
|
to "define region ROMEM = mem:[from 0x04000000 to 0x040F0000];"
|
||
|
ii. Execute "make" in the /examples/hello_world/iar directory to rebuild the project.
|
||
|
2. Copy /examples/hello_world/iar/bin/hello_world.bin into /boards/common3/examples/mspi_flash_loader/
|
||
|
3. Create the binary with mspi_flash_loader + external executable from Step #1.
|
||
|
./mspi_loader_binary_combiner.py --loaderbin iar/bin/mspi_flash_loader.bin --appbin hello_world.bin --install-address 0x04000000 --flags 0x2 --outbin loader_hello_world --loader-address 0x0000C000
|
||
|
4. Open the J-Link SWO Viewer to the target board.
|
||
|
5. Open the J-Flash Lite program. Select the /examples/mspi_flash_loader/loader_hello_world.bin file and program at 0x0000C000 offset.
|
||
|
|
||
|
And if the fireball device card is used, this example can work on:
|
||
|
Apollo3_eb + Fireball
|
||
|
Apollo3_eb + Fireball2
|
||
|
Recommend to use 1.8V power supply voltage.
|
||
|
Define FIREBALL_CARD or FIREBALL2_CARD in the config-template.ini file to select.
|
||
|
Define CYPRESS_S25FS064S or ADESTO_ATXP032 for Fireball
|
||
|
Define ADESTO_ATXP032 for Fireball2
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
mspi_iom_xfer
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example demonstrating the hardware assisted MSPI to IOM transfer
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates transferring a large buffer from a flash device
|
||
|
connected on MSPI, to a FRAM device connected to IOM, using hardware
|
||
|
handshaking in Apollo3 - with minimal CPU involvement.
|
||
|
|
||
|
At initialization, both the FRAM and Flash are initialized and a set pattern
|
||
|
data is written to the flash for transfer to FRAM.
|
||
|
|
||
|
The FRAM is connected to IOM using SPI interface, and hence the transactions
|
||
|
are limited in size to 4095 Bytes.
|
||
|
The program here creates a command queue for both the MSPI and IOM, to
|
||
|
create a sequence of transactions - each reading a segment of the source
|
||
|
buffer to a temp buffer in internal SRAM, and then writing the same to the
|
||
|
FRAM using the IOM. It uses hardware handshaking so that the IOM transaction
|
||
|
is started only once the segement is read out completely from MSPI Flash.
|
||
|
|
||
|
To best utilize the buses, a ping-pong model is used using two temporary
|
||
|
buffers in SRAM. This allows the interfaces to not idle while waiting for
|
||
|
other to finish - essentially achieving close to the bandwidth achieved by
|
||
|
the slower of the two.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
Configurable parameters at compile time:
|
||
|
IOM to use (FRAM_IOM_MODULE)
|
||
|
FRAM device to use (define one of FRAM_DEVICE_* to 1)
|
||
|
MSPI Flash to use - uses compile time definitions from am_device_mspi_flash.h
|
||
|
BLOCK_SIZE - total size of transaction
|
||
|
SPI_TXN_SIZE - size of temporary ping-pong buffer
|
||
|
CPU_SLEEP_GPIO - tracks CPU sleeping on analyzer
|
||
|
VERIFY_DATA - Enables reading back of the data from IOM to check & verify the accuracy
|
||
|
This can only be enabled if SEQLOOP is not being used
|
||
|
|
||
|
Operating modes:
|
||
|
SEQLOOP not defined - The CQ is programmed each iteration
|
||
|
SEQLOOP - Advanced mode, to create sequence once, which repeats when triggered by callback at the end of each iteration
|
||
|
SEQLOOP - RUN_AUTONOMOUS - Sequence created once, and it repeats indefintely till paused (as a result of timer)
|
||
|
CQ_RAW - Uses Preconstructed CQ for IOM and MSPI - to save on the time to program the same at run time
|
||
|
|
||
|
Best way to see the example in action is to connect logic analyzer and monitor the signals
|
||
|
Apart from the IO signals below, one can also monitor CPU_SLEEP_GPIO to monitor CPU in deep sleep
|
||
|
Pin connections:
|
||
|
IOM:
|
||
|
Particular IOM to use for this example is controlled by macro FRAM_IOM_MODULE
|
||
|
This example use apollo3_eb board connected to a fireball
|
||
|
Fireball is populated with MB85RS1MT SPI FRAM devices on each of the IOM's
|
||
|
with respective pin definitions in the BSP
|
||
|
Default pin settings for this example using IOM1 are:
|
||
|
#define AM_BSP_GPIO_IOM1_CS 14
|
||
|
#define AM_BSP_IOM1_CS_CHNL 2
|
||
|
#define AM_BSP_GPIO_IOM1_MISO 9
|
||
|
#define AM_BSP_GPIO_IOM1_MOSI 10
|
||
|
#define AM_BSP_GPIO_IOM1_SCK 8
|
||
|
|
||
|
MSPI:
|
||
|
The MSPI flash device uses is controlled by macro FRAM_DEVICE_* (set one of them to 1)
|
||
|
This example uses apollo3_eb board connected to a fireball
|
||
|
Fireball is populated with CYPRESS_S25FS064S flash on CE0
|
||
|
#define AM_BSP_GPIO_MSPI_CE0 19
|
||
|
#define AM_BSP_MSPI_CE0_CHNL 0
|
||
|
#define AM_BSP_GPIO_MSPI_D0 22
|
||
|
#define AM_BSP_GPIO_MSPI_D1 26
|
||
|
#define AM_BSP_GPIO_MSPI_D2 4
|
||
|
#define AM_BSP_GPIO_MSPI_D3 23
|
||
|
#define AM_BSP_GPIO_MSPI_SCK 24
|
||
|
|
||
|
And if the fireball device card is used, this example can work on:
|
||
|
Apollo3_eb + Fireball
|
||
|
Apollo3_eb + Fireball2
|
||
|
Recommend to use 1.8V power supply voltage.
|
||
|
Define FIREBALL_CARD or FIREBALL2_CARD in the config-template.ini file to select.
|
||
|
Define CYPRESS_S25FS064S or ADESTO_ATXP032 for Fireball
|
||
|
Define ADESTO_ATXP032 for Fireball2
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
mspi_octal_example
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the MSPI operation with Octal SPI Flash.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example configures an MSPI connected flash device in Octal mode
|
||
|
and performs various operations - verifying the correctness of the same
|
||
|
Operations include - Erase, Write, Read, and XIP
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
If the fireball device card is used, this example can work on:
|
||
|
Apollo3_eb + Fireball
|
||
|
Apollo3_eb + Fireball2
|
||
|
Recommend to use 1.8V power supply voltage.
|
||
|
Define FIREBALL_CARD or FIREBALL2_CARD in the config-template.ini file to select.
|
||
|
Define ADESTO_ATXP032
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
mspi_quad_example
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of the MSPI operation with Quad SPI Flash.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example configures an MSPI connected flash device in Quad mode
|
||
|
and performs various operations - verifying the correctness of the same
|
||
|
Operations include - Erase, Write, Read, Read using XIP Apperture and XIP.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
If the fireball device card is used, this example can work on:
|
||
|
Apollo3_eb + Fireball
|
||
|
Apollo3_eb + Fireball2
|
||
|
Recommend to use 1.8V power supply voltage.
|
||
|
Define FIREBALL_CARD in the config-template.ini file to select.
|
||
|
Define CYPRESS_S25FS064S or ADESTO_ATXP032 for Fireball
|
||
|
Define ADESTO_ATXP032 for Fireball2
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
pdm_fft
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
An example to show basic PDM operation.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example enables the PDM interface to record audio signals from an
|
||
|
external microphone. The required pin connections are:
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
GPIO 11 - PDM DATA
|
||
|
GPIO 12 - PDM CLK
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
prime
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example that displays the timer count on the LEDs.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example consists of a non-optimized, brute-force routine for computing
|
||
|
the number of prime numbers between 1 and a given value, N. The routine
|
||
|
uses modulo operations to determine whether a value is prime or not. While
|
||
|
obviously not optimal, it is very useful for exercising the core.
|
||
|
|
||
|
For this example, N is 100000, for which the answer is 9592.
|
||
|
|
||
|
For Apollo3 at 48MHz, the time to compute the answer for Keil and IAR:
|
||
|
IAR v8.11.1: 1:43.
|
||
|
Keil ARMCC 4060528: 1:55.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
The goal of this example is to measure current consumption while the core
|
||
|
is working to compute the answer. Power and energy can then be derived
|
||
|
knowing the current and run time.
|
||
|
|
||
|
The example prints an initial banner to the UART port. After each prime
|
||
|
loop, it enables the UART long enough to print the answer, disables the
|
||
|
UART and starts the computation again.
|
||
|
|
||
|
Text is output to the UART at 115,200 BAUD, 8 bit, no parity.
|
||
|
Please note that text end-of-line is a newline (LF) character only.
|
||
|
Therefore, the UART terminal must be set to simulate a CR/LF.
|
||
|
|
||
|
Note: For minimum power, disable the printing by setting PRINT_UART to 0.
|
||
|
|
||
|
The prime_number() routine is open source and is used here under the
|
||
|
GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007. Details,
|
||
|
documentation, and the full license for this routine can be found in
|
||
|
the third_party/prime_mpi/ directory of the SDK.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
reset_states
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of various reset options in Apollo.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows a simple configuration of the watchdog. It will print
|
||
|
a banner message, configure the watchdog for both interrupt and reset
|
||
|
generation, and immediately start the watchdog timer.
|
||
|
The watchdog ISR provided will 'pet' the watchdog four times, printing
|
||
|
a notification message from the ISR each time.
|
||
|
On the fifth interrupt, the watchdog will not be pet, so the 'reset'
|
||
|
action will eventually be allowed to occur.
|
||
|
On the sixth timeout event, the WDT should issue a system reset, and the
|
||
|
program should start over from the beginning.
|
||
|
|
||
|
The program will repeat the following sequence on the console:
|
||
|
(POI Reset) 5 Interrupts - (WDT Reset) 3 Interrupts - (POR Reset) 3 Interrupts
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
rtc_print
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using the internal RTC.
|
||
|
|
||
|
|
||
|
This example demonstrates how to interface with the RTC and prints the
|
||
|
time over SWO.
|
||
|
|
||
|
The example works by configuring a timer interrupt which will periodically
|
||
|
wake the core from deep sleep. After every interrupt, it prints the current
|
||
|
RTC time.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
stimer
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example using a stimer with interrupts.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example demonstrates how to setup the stimer for counting and
|
||
|
interrupts. It toggles LED 0 to 4 every interrupt, which is set for 1 sec.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
uart_ble_bridge
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Converts UART HCI commands to SPI.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example is primarily designed to enable DTM testing with the
|
||
|
Apollo3 EVB. The example accepts HCI commands over the UART at 115200 baud
|
||
|
and sends them using the BLEIF to the Apollo3 BLE Controller. Responses from
|
||
|
the BLE Controller are accepted over the BLEIF and sent over the UART.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
uart_boot_host
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Converts UART Wired transfer commands to SPI for use with SBL SPI testing.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example running on an intermediate board, along with the standard
|
||
|
uart_wired_update script running on host PC, can be used as a way to
|
||
|
communicate to Apollo3 SBL using SPI mode.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
Additional Information:
|
||
|
=======================
|
||
|
PIN fly lead connections assumed:
|
||
|
HOST (this board) SLAVE (Apollo3 SBL target)
|
||
|
-------- --------
|
||
|
Apollo3 SPI or I2C common connections:
|
||
|
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
|
||
|
GPIO[4] OVERRIDE pin (host to slave) GPIO[16] Override pin or n/c
|
||
|
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
|
||
|
GND GND
|
||
|
|
||
|
Apollo3 SPI additional connections:
|
||
|
GPIO[5] IOM0 SPI CLK GPIO[0] IOS SPI SCK
|
||
|
GPIO[6] IOM0 SPI MISO GPIO[2] IOS SPI MISO
|
||
|
GPIO[7] IOM0 SPI MOSI GPIO[1] IOS SPI MOSI
|
||
|
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
|
||
|
|
||
|
Apollo3 I2C additional connections:
|
||
|
GPIO[5] I2C SCL GPIO[0] I2C SCL
|
||
|
GPIO[6] I2C SDA GPIO[1] I2C SDA
|
||
|
|
||
|
Reset and Override pin connections from Host are optional, but using them
|
||
|
automates the entire process.
|
||
|
|
||
|
SPI or I2C mode can be handled in a couple of ways:
|
||
|
- SPI mode is the default (i.e. don't press buttons or tie pins low).
|
||
|
- For I2C, press button2 during reset and hold it until the program begins,
|
||
|
i.e. you see the "I2C clock = " msg.
|
||
|
Alternatively the button2 pin can be tied low.
|
||
|
- Note that on the Apollo3 EVB, button2 is labelled as 'BTN4', which is
|
||
|
the button located nearest the end of the board.
|
||
|
Also on the Apollo3 EVB, BTN4 uses pin 19. It happens that the header
|
||
|
pin for pin 19 on the EVB is adjacent to a ground pin, so a jumper can
|
||
|
be used to assert I2C mode.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
watchdog
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example of a basic configuration of the watchdog.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example shows a simple configuration of the watchdog. It will print
|
||
|
a banner message, configure the watchdog for both interrupt and reset
|
||
|
generation, and immediately start the watchdog timer.
|
||
|
The watchdog ISR provided will 'pet' the watchdog four times, printing
|
||
|
a notification message from the ISR each time.
|
||
|
On the fifth interrupt, the watchdog will not be pet, so the 'reset'
|
||
|
action will eventually be allowed to occur.
|
||
|
On the sixth timeout event, the WDT should issue a system reset, and the
|
||
|
program should start over from the beginning.
|
||
|
|
||
|
Printing takes place over the ITM at 1M Baud.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
Name:
|
||
|
=====
|
||
|
while
|
||
|
|
||
|
|
||
|
Description:
|
||
|
============
|
||
|
Example to emulate a polling loop.
|
||
|
|
||
|
|
||
|
Purpose:
|
||
|
========
|
||
|
This example provides a demonstration of the power required while
|
||
|
executing in a tight loop on the Apollo3 MCU.
|
||
|
|
||
|
|
||
|
|
||
|
******************************************************************************
|
||
|
|
||
|
|
||
|
micro-ecc
|
||
|
==========
|
||
|
|
||
|
A small and fast ECDH and ECDSA implementation for 8-bit, 32-bit, and 64-bit processors.
|
||
|
|
||
|
The old version of micro-ecc can be found in the "old" branch.
|
||
|
|
||
|
Features
|
||
|
--------
|
||
|
|
||
|
* Resistant to known side-channel attacks.
|
||
|
* Written in C, with optional GCC inline assembly for AVR, ARM and Thumb platforms.
|
||
|
* Supports 8, 32, and 64-bit architectures.
|
||
|
* Small code size.
|
||
|
* No dynamic memory allocation.
|
||
|
* Support for 4 standard curves: secp160r1, secp192r1, secp256r1, and secp256k1.
|
||
|
* BSD 2-clause license.
|
||
|
|
||
|
Usage Notes
|
||
|
-----------
|
||
|
### Point Representation ###
|
||
|
Compressed points are represented in the standard format as defined in http://www.secg.org/collateral/sec1_final.pdf; uncompressed points are represented in standard format, but without the `0x04` prefix. `uECC_make_key()`, `uECC_shared_secret()`, `uECC_sign()`, and `uECC_verify()` only handle uncompressed points; you can use `uECC_compress()` and `uECC_decompress()` to convert between compressed and uncompressed point representations.
|
||
|
|
||
|
Private keys are represented in the standard format.
|
||
|
|
||
|
### Using the Code ###
|
||
|
|
||
|
I recommend just copying (or symlink) uECC.h, uECC.c, and the appropriate asm\_<arch>\_.inc (if any) into your project. Then just `#include "uECC.h"` to use the micro-ecc functions.
|
||
|
|
||
|
For use with Arduino, you can just create a symlink to the `uECC` directory in your Arduino `libraries` directory. You can then use uECC just like any other Arduino library (uECC should show up in the **Sketch**=>**Import Library** submenu).
|
||
|
|
||
|
See uECC.h for documentation for each function.
|
||
|
|
||
|
### Compilation Notes ###
|
||
|
|
||
|
* Should compile with any C/C++ compiler that supports stdint.h (this includes Visual Studio 2013).
|
||
|
* If you want to change the defaults for `uECC_CURVE` and `uECC_ASM`, you must change them in your Makefile or similar so that uECC.c is compiled with the desired values (ie, compile uECC.c with `-DuECC_CURVE=uECC_secp256r1` or whatever).
|
||
|
* When compiling for a Thumb-1 platform with inline assembly enabled (ie, `uECC_ASM` is defined to `uECC_asm_small` or `uECC_asm_fast`), you must use the `-fomit-frame-pointer` GCC option (this is enabled by default when compiling with `-O1` or higher).
|
||
|
* When compiling for an ARM/Thumb-2 platform with fast inline assembly enabled (ie, `uECC_ASM` is defined to `uECC_asm_fast`), you must use the `-fomit-frame-pointer` GCC option (this is enabled by default when compiling with `-O1` or higher).
|
||
|
* When compiling for AVR with inline assembly enabled, you must have optimizations enabled (compile with `-O1` or higher).
|
||
|
* When building for Windows, you will need to link in the `advapi32.lib` system library.
|
||
|
|
||
|
ARM Performance
|
||
|
---------------
|
||
|
|
||
|
All tests were built using gcc 4.8.2 with `-O3`, and were run on a Raspberry Pi B+. `uECC_ASM` was defined to `uECC_asm_fast` and `ECC_SQUARE_FUNC` was defined to `1` in all cases. All times are in milliseconds.
|
||
|
|
||
|
<table>
|
||
|
<tr>
|
||
|
<th></th>
|
||
|
<th>secp160r1</th>
|
||
|
<th>secp192r1</th>
|
||
|
<th>secp256r1</th>
|
||
|
<th>secp256k1</th>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDH:</em></td>
|
||
|
<td>2.3</td>
|
||
|
<td>2.7</td>
|
||
|
<td>7.9</td>
|
||
|
<td>6.5</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDSA sign:</em></td>
|
||
|
<td>2.8</td>
|
||
|
<td>3.1</td>
|
||
|
<td>8.6</td>
|
||
|
<td>7.2</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDSA verify:</em></td>
|
||
|
<td>2.7</td>
|
||
|
<td>3.2</td>
|
||
|
<td>9.2</td>
|
||
|
<td>7.0</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
AVR Performance
|
||
|
---------------
|
||
|
|
||
|
All tests were built using avr-gcc 4.8.1 with `-Os`, and were run on a 16 MHz ATmega256RFR2. Code size refers to the space used by micro-ecc code and data.
|
||
|
|
||
|
#### ECDH (fast) ####
|
||
|
|
||
|
In these tests, `uECC_ASM` was defined to `uECC_asm_fast` and `ECC_SQUARE_FUNC` was defined to `1` in all cases.
|
||
|
|
||
|
<table>
|
||
|
<tr>
|
||
|
<th></th>
|
||
|
<th>secp160r1</th>
|
||
|
<th>secp192r1</th>
|
||
|
<th>secp256r1</th>
|
||
|
<th>secp256k1</th>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDH time (ms):</em></td>
|
||
|
<td>470</td>
|
||
|
<td>810</td>
|
||
|
<td>2220</td>
|
||
|
<td>1615</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>Code size (bytes):</em></td>
|
||
|
<td>10768</td>
|
||
|
<td>13112</td>
|
||
|
<td>20886</td>
|
||
|
<td>21126</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
#### ECDH (small) ####
|
||
|
|
||
|
In these tests, `uECC_ASM` was defined to `uECC_asm_small` and `ECC_SQUARE_FUNC` was defined to `0` in all cases.
|
||
|
|
||
|
<table>
|
||
|
<tr>
|
||
|
<th></th>
|
||
|
<th>secp160r1</th>
|
||
|
<th>secp192r1</th>
|
||
|
<th>secp256r1</th>
|
||
|
<th>secp256k1</th>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDH time (ms):</em></td>
|
||
|
<td>1250</td>
|
||
|
<td>1810</td>
|
||
|
<td>4790</td>
|
||
|
<td>4700</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>Code size (bytes):</em></td>
|
||
|
<td>3244</td>
|
||
|
<td>3400</td>
|
||
|
<td>5274</td>
|
||
|
<td>3426</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
#### ECDSA (fast) ####
|
||
|
|
||
|
In these tests, `uECC_ASM` was defined to `uECC_asm_fast` and `ECC_SQUARE_FUNC` was defined to `1` in all cases.
|
||
|
|
||
|
<table>
|
||
|
<tr>
|
||
|
<th></th>
|
||
|
<th>secp160r1</th>
|
||
|
<th>secp192r1</th>
|
||
|
<th>secp256r1</th>
|
||
|
<th>secp256k1</th>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDSA sign time (ms):</em></td>
|
||
|
<td>555</td>
|
||
|
<td>902</td>
|
||
|
<td>2386</td>
|
||
|
<td>1773</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDSA verify time (ms):</em></td>
|
||
|
<td>590</td>
|
||
|
<td>990</td>
|
||
|
<td>2650</td>
|
||
|
<td>1800</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>Code size (bytes):</em></td>
|
||
|
<td>13246</td>
|
||
|
<td>14798</td>
|
||
|
<td>22594</td>
|
||
|
<td>22826</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
#### ECDSA (small) ####
|
||
|
|
||
|
In these tests, `uECC_ASM` was defined to `uECC_asm_small` and `ECC_SQUARE_FUNC` was defined to `0` in all cases.
|
||
|
|
||
|
<table>
|
||
|
<tr>
|
||
|
<th></th>
|
||
|
<th>secp160r1</th>
|
||
|
<th>secp192r1</th>
|
||
|
<th>secp256r1</th>
|
||
|
<th>secp256k1</th>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDSA sign time (ms):</em></td>
|
||
|
<td>1359</td>
|
||
|
<td>1931</td>
|
||
|
<td>4998</td>
|
||
|
<td>4904</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>ECDSA verify time (ms):</em></td>
|
||
|
<td>1515</td>
|
||
|
<td>2160</td>
|
||
|
<td>5700</td>
|
||
|
<td>5220</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><em>Code size (bytes):</em></td>
|
||
|
<td>5690</td>
|
||
|
<td>5054</td>
|
||
|
<td>6980</td>
|
||
|
<td>5080</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
This directory holds the *.emp files generated by the EM Micro tools (e.g. EM9304 Configuration Editor) or EM Micro developers (code patches).
|
||
|
|
||
|
All *.emp files contained in this directory will result in the generation of a patch or patches to be
|
||
|
applied to the EM9304.
|
||
|
|
||
|
The script emp2include.py has the following usage:
|
||
|
|
||
|
$ ./emp2include.py --help
|
||
|
usage: emp2include.py [-h] [-o MEMORY]
|
||
|
|
||
|
Convert multiple EM9304 *.emp files to the em9304_patches.* files.
|
||
|
|
||
|
optional arguments:
|
||
|
-h, --help show this help message and exit
|
||
|
-o MEMORY Destination memory (IRAM or OTP)
|
||
|
|
||
|
Patches can be applied temporarily to IRAM and then permanently applied to OTP (one-time programable) memory
|
||
|
as needed. The default is IRAM.
|
||
|
|
||
|
The files em9304_patches.h and em9304_patches.c will be generated in the following directory:
|
||
|
|
||
|
/third_party/exactle/sw/hci/ambiq/em9304
|
||
|
|
||
|
Patches are uniquely identified by the following meta-data embedded in *.emp files:
|
||
|
* Format Version - Container format version (increments as container is updated)
|
||
|
* Patch ID - Unique identifier for the container/patch (assigned by patch creator)
|
||
|
* Build number - EM9304 ROM minor revision supported by patch
|
||
|
* User Build - User defined number (assigned by patch creator)
|
||
|
=> 0, 1: Reserved by EM
|
||
|
=> 2, 3: Reserved by Ambiq Micro
|
||
|
=> 4+ : Available for customer
|
||
|
|
||
|
|
||
|
Note: 0001642_PROD_boot_overhead.emp is built into 0000000_META_hci_patches_v7.emp, there's only a single emp from EM in the future.
|