MKM34Z256VLx7 Bare Metal Software Drivers  R4.1.6
Reference Manual
MMAU Register Save/Restore

This example shows typical use of the MMAU module instructions in both the main software loop and interrupt functions. The var_main and var_isr 64-bit signed integer variables are updated using MMAU instructions in the main software loop and pit_callback function, respectively. Note that MMAU_StoreState() function must be called at the entry of the pit_callback function and MMAU_RestoreState() function at its exit to store and restore MMAU internal registers states.

The following FreeMASTER screenshot demonstrates var_main and var_isr variables changes. The FreeMASTER communicates via UART2 that is configured for 38400/8-N-1 and serviced by the application software in a polling mode. When using TWR-KM34Z75M board, connect USB port of your PC to the on-board OpenSDA's USB to serial bridge (J27).

mmauisr.jpg
Source code:
/******************************************************************************
* (c) Copyright 2010-2015, Freescale Semiconductor Inc.
* ALL RIGHTS RESERVED.
******************************************************************************
* mmauisr_test.c
******************************************************************************/
#include "drivers.h"
/* callback prototypes */
static void pit_callback (PIT_CALLBACK_TYPE type);
/* static variables */
static int64 volatile var_main = 0ll;
static int64 volatile var_isr = 0ll;
void main (void)
{
/* initialize sim module */
/* initialize pit module */
PIT_InstallCallback (PRI_LVL0,pit_callback);
/* initialize UART and FreeMASTER */
FMSTR_Init();
/* enable interrupts */
while(1)
{
/* mmau calculation */
var_main = d_smac_ll (100l,200l); /* A10=A10+100*200; var_main = A10 */
FMSTR_Poll ();
}
}
/* pit callback definition */
static void pit_callback (PIT_CALLBACK_TYPE type)
{
/* store registers state to stack */
/* mmau calculation */
lda_d (var_isr); /* A10 = var_isr */
var_isr = d_smac_ll (200l,500l); /* A10=A10+200*500; var_isr = A10 */
/* restore registers state from stack */
}
Freemaster_cfg.h:
/***************************************************************************/
#ifndef __FREEMASTER_CFG_H
#define __FREEMASTER_CFG_H
/******************************************************************************
* Select interrupt or poll-driven serial communication
*******************************************************************************/
#define FMSTR_LONG_INTR 0 /* complete msg processing in interrupt */
#define FMSTR_SHORT_INTR 0 /* SCI FIFO-queuing done in interrupt */
#define FMSTR_POLL_DRIVEN 1 /* no interrupt needed, polling only */
/******************************************************************************
* Select SCI communication interface
*******************************************************************************/
#define FMSTR_USE_SCI 1 /* To select SCI communication interface */
#define FMSTR_USE_PDBDM 0 /* To select Packet Driven BDM interface */
//#define FMSTR_SCI_BASE 0x4006A000 /* UART0 base on MKM34Z7 */
//#define FMSTR_SCI_BASE 0x4006B000 /* UART1 base on MKM34Z7 */
#define FMSTR_SCI_BASE 0x4006C000 /* UART2 base on MKM34Z7 */
//#define FMSTR_SCI_BASE 0x4006D000 /* UART3 base on MKM34Z7 */
/******************************************************************************
* Input/output communication buffer size
*******************************************************************************/
#define FMSTR_COMM_BUFFER_SIZE 200 /* set to 0 for "automatic" */
/******************************************************************************
* Receive FIFO queue size (use with FMSTR_SHORT_INTR only)
*******************************************************************************/
#define FMSTR_COMM_RQUEUE_SIZE 32 /* set to 0 for "default" */
/******************************************************************************
* Support for Application Commands
*******************************************************************************/
#define FMSTR_USE_APPCMD 0 /* enable/disable App.Commands support */
#define FMSTR_APPCMD_BUFF_SIZE 32 /* App.Command data buffer size */
#define FMSTR_MAX_APPCMD_CALLS 4 /* num. of app.cmd callbacks? (0=disable) */
/******************************************************************************
* Oscilloscope support
*******************************************************************************/
#define FMSTR_USE_SCOPE 1 /* enable/disable scope support */
#define FMSTR_MAX_SCOPE_VARS 8 /* max. number of scope variables (2..8) */
/******************************************************************************
* Recorder support
*******************************************************************************/
#define FMSTR_USE_RECORDER 1 /* enable/disable recorder support */
#define FMSTR_MAX_REC_VARS 8 /* max. num. of recorder variables (2..8) */
/* built-in recorder buffer (use when FMSTR_REC_OWNBUFF is 0) */
#define FMSTR_REC_BUFF_SIZE 8192 /* built-in buffer size */
/* recorder time base, specifies how often the recorder is called */
#define FMSTR_REC_TIMEBASE FMSTR_REC_BASE_MILLISEC(0) /* 0 = "unknown" */
#define FMSTR_REC_FLOAT_TRIG 0 /* enable/disable floating point trigger */
/******************************************************************************
* Target-side address translation (TSA)
*******************************************************************************/
#define FMSTR_USE_TSA 0 /* enable TSA functionality */
#define FMSTR_USE_TSA_SAFETY 0 /* enable access to TSA variables only */
#define FMSTR_USE_TSA_INROM 0 /* TSA tables as const (put to ROM) */
/******************************************************************************
* Enable the byte access to communication buffer. All Cortex M0-based devices
* require this option to be set in order to avoid misaligned access to integer
* parameters which is unsupported on this platform.
*******************************************************************************/
#define FMSTR_BYTE_BUFFER_ACCESS 1
#endif /* __FREEMASTER_CFG_H */
Toolchain support:
IAR EWARM 7.40.7KEIL uVision 5.15CrossWorks 3.6ATOLLIC TrueStudio 5.3.0Kinetis Design Studio 3.0.0