blob: 08f49aeee0d45ab88970cbc7cbd20565e6d5168a [file] [log] [blame]
//*****************************************************************************
//
//! @file am_util_regdump.c
//!
//! @brief Dump specified registers for debug purposes.
//!
//! This module contains functions for real time (debug) printing of registers
//! from peripherals specified in a given bitmask.
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2017, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
#include <stdint.h>
#include <stdbool.h>
#include "am_util_regdump.h"
#include "am_util_stdio.h"
//*****************************************************************************
//
// Register dump structure.
//
//*****************************************************************************
typedef struct
{
//
//! Set to 1 to operate this timer as a 32-bit timer instead of two 16-bit
//! timers.
//
uint32_t ui32Offset;
//
//! Configuration options for TIMERA
//
char *pi8RegName;
//uint8_t *puiRegName;
}
am_util_regdump_t;
//*****************************************************************************
//
// Globals.
//
//*****************************************************************************
static uint8_t g_ui8Fmt[64];
am_util_regdump_t g_sRegdumpADC[] =
{
{0x000, "CFG"},
{0x004, "STAT"},
{0x008, "SWT"},
{0x00C, "SL0CFG"},
{0x010, "SL1CFG"},
{0x014, "SL2CFG"},
{0x018, "SL3CFG"},
{0x01C, "SL4CFG"},
{0x020, "SL5CFG"},
{0x024, "SL6CFG"},
{0x028, "SL7CFG"},
{0x02C, "WULIM"},
{0x030, "WLLIM"},
#if INCLUDE_REGS_WITH_SIDE_EFFECT
{0x038, "FIFO"},
#endif // INCLUDE_REGS_WITH_SIDE_EFFECT
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpCACHECTRL[] =
{
{0x000, "CACHECFG"},
{0x004, "FLASHCFG"},
{0x008, "CACHECTRL"},
{0x010, "NCR0START"},
{0x014, "NCR0END"},
{0x018, "NCR1START"},
{0x01C, "NCR1END"},
{0x030, "CACHEMODE"},
{0x040, "DMON0"},
{0x044, "DMON1"},
{0x048, "DMON2"},
{0x04C, "DMON3"},
{0x050, "IMON0"},
{0x054, "IMON1"},
{0x058, "IMON2"},
{0x05C, "IMON3"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpCLKGEN[] =
{
{0x000, "CALXT"},
{0x004, "CALRC"},
{0x008, "ACALCTR"},
{0x00C, "OCTRL"},
{0x010, "CLKOUT"},
{0x014, "CLKKEY"},
{0x018, "CCTRL"},
{0x01C, "STATUS"},
{0x020, "HFADJ"},
{0x024, "HFVAL"},
{0x028, "CLOCKEN"},
{0x02C, "CLOCKEN2"},
{0x030, "CLOCKEN3"},
{0x034, "UARTEN"},
{0x100, "INTEN"},
{0x104, "INTSTAT"},
{0x108, "INTCLR"},
{0x10C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpCTIMER[] =
{
{0x000, "TMR0"},
{0x004, "CMPRA0"},
{0x008, "CMPRB0"},
{0x00C, "CTRL0"},
{0x010, "TMR1"},
{0x014, "CMPRA1"},
{0x018, "CMPRB1"},
{0x01C, "CTRL1"},
{0x020, "TMR2"},
{0x024, "CMPRA2"},
{0x028, "CMPRB2"},
{0x02C, "CTRL2"},
{0x030, "TMR3"},
{0x034, "CMPRA3"},
{0x038, "CMPRB3"},
{0x03C, "CTRL3"},
{0x100, "STCFG"},
{0x104, "STTMR"},
{0x108, "CAPTURE_CONTROL"},
{0x110, "SCMPR0"},
{0x114, "SCMPR1"},
{0x118, "SCMPR2"},
{0x11C, "SCMPR3"},
{0x120, "SCMPR4"},
{0x124, "SCMPR5"},
{0x128, "SCMPR6"},
{0x12C, "SCMPR7"},
{0x1E0, "SCAPT0"},
{0x1E4, "SCAPT1"},
{0x1E8, "SCAPT2"},
{0x1EC, "SCAPT3"},
{0x1F0, "SNVR0"},
{0x1F4, "SNVR1"},
{0x1F8, "SNVR2"},
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0x300, "STMINTEN"},
{0x304, "STMINTSTAT"},
{0x308, "STMINTCLR"},
{0x30C, "STMINTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpGPIO[] =
{
{0x000, "PADREGA"},
{0x004, "PADREGB"},
{0x008, "PADREGC"},
{0x00C, "PADREGD"},
{0x010, "PADREGE"},
{0x014, "PADREGF"},
{0x018, "PADREGG"},
{0x01C, "PADREGH"},
{0x020, "PADREGI"},
{0x024, "PADREGJ"},
{0x028, "PADREGK"},
{0x02C, "PADREGL"},
{0x030, "PADREGM"},
{0x040, "CFGA"},
{0x044, "CFGB"},
{0x048, "CFGC"},
{0x04C, "CFGD"},
{0x050, "CFGE"},
{0x054, "CFGF"},
{0x058, "CFGG"},
{0x060, "PADKEY"},
{0x080, "RDA"},
{0x084, "RDB"},
{0x088, "WTA"},
{0x08C, "WTB"},
{0x090, "WTSA"},
{0x094, "WTSB"},
{0x098, "WTCA"},
{0x09C, "WTCB"},
{0x0A0, "ENA"},
{0x0A4, "ENB"},
{0x0A8, "ENSA"},
{0x0Ac, "ENSB"},
{0x0B4, "ENCA"},
{0x0B8, "ENCB"},
{0x0BC, "STMRCAP"},
{0x0C0, "IOM0IRQ"},
{0x0C4, "IOM1IRQ"},
{0x0C8, "IOM2IRQ"},
{0x0CC, "IOM3IRQ"},
{0x0D0, "IOM4IRQ"},
{0x0D4, "IOM5IRQ"},
{0x0D8, "LOOPBACK"},
{0x0DC, "OBS"},
{0x0E0, "ALTPADCFGA"},
{0x0E4, "ALTPADCFGB"},
{0x0E8, "ALTPADCFGC"},
{0x0EC, "ALTPADCFGD"},
{0x0F0, "ALTPADCFGE"},
{0x0F4, "ALTPADCFGF"},
{0x0F8, "ALTPADCFGG"},
{0x0FC, "ALTPADCFGH"},
{0x100, "ALTPADCFGI"},
{0x104, "ALTPADCFGJ"},
{0x108, "ALTPADCFGK"},
{0x10C, "ALTPADCFGL"},
{0x110, "ALTPADCFGM"},
{0x200, "INT0EN"},
{0x204, "INT0STAT"},
{0x208, "INT0CLR"},
{0x20C, "INT0SET"},
{0x210, "INT1EN"},
{0x214, "INT1STAT"},
{0x218, "INT1CLR"},
{0x21C, "INT1SET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpIOM[] =
{
#if INCLUDE_REGS_WITH_SIDE_EFFECT
{0x000, "FIFO"},
#endif // INCLUDE_REGS_WITH_SIDE_EFFECT
{0x100, "FIFOPTR"},
{0x104, "TLNGTH"},
{0x108, "FIFOTHR"},
{0x10C, "CLKCFG"},
{0x110, "CMD"},
{0x114, "CMDRPT"},
{0x118, "STATUS"},
{0x11C, "CFG"},
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpIOS[] =
{
#if INCLUDE_REGS_WITH_SIDE_EFFECT
{0x000, "FIFO"},
#endif // INCLUDE_REGS_WITH_SIDE_EFFECT
{0x100, "FIFOPTR"},
{0x104, "FIFOCFG"},
{0x108, "FIFOTHR"},
{0x10C, "FUPD"},
{0x110, "FIFOCTR"},
{0x114, "FIFOINC"},
{0x118, "CFG"},
{0x11C, "PRENC"},
{0x120, "INTCTLC"},
{0x124, "GENADD"},
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0x210, "REGACCINTEN"},
{0x214, "REGACCINTSTAT"},
{0x218, "REGACCINTCLR"},
{0x21C, "REGACCINTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpPDM[] =
{
{0x000, "PCFG"},
{0x004, "VCFG"},
{0x008, "FR"},
#if INCLUDE_REGS_WITH_SIDE_EFFECT
{0x00C, "FRD"},
#endif // INCLUDE_REGS_WITH_SIDE_EFFECT
{0x010, "FLUSH"},
{0x014, "FTHR"},
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpPWRCTRL[] =
{
{0x000, "SUPPLYSRC"},
{0x004, "POWERSTATUS"},
{0x008, "DEVICEEN"},
{0x00C, "SRAMPWDINSLEEP"},
{0x010, "MEMEN"},
{0x014, "PWRONSTATUS"},
{0x018, "SRAMCTRL"},
{0x01C, "ADCSTATUS"},
{0x020, "MISCOPT"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpRSTGEN[] =
{
{0x000, "CFG"},
{0x004, "SWPOI"},
{0x008, "SWPOR"},
{0x00C, "STAT"},
{0x010, "CLRSTAT"},
{0x014, "TPIURST"},
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpRTC[] =
{
{0x040, "CTRLOW"},
{0x044, "CTRUP"},
{0x048, "ALMLOW"},
{0x04C, "ALMUP"},
{0x050, "RTCCTL"},
//
// The interrupt regs are actually duplicates of CLKGEN
//
{0x100, "INTEN"},
{0x104, "INTSTAT"},
{0x108, "INTCLR"},
{0x10C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpUART[] =
{
#if INCLUDE_REGS_WITH_SIDE_EFFECT
{0x000, "DR (data)"},
#endif // INCLUDE_REGS_WITH_SIDE_EFFECT
{0x004, "RSR (status)"},
{0x018, "FR (flag)"},
{0x020, "ILPR (IrDA Counter)"},
{0x024, "IBRD (Baud Div)"},
{0x028, "FBRD (Frac Baud Div)"},
{0x02C, "LCRH (Line Ctrl)"},
{0x030, "CR (Ctrl)"},
{0x034, "IFLS"},
{0x038, "IER"},
{0x03C, "IES"},
{0x040, "MIS"},
{0x044, "IEC"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpVCOMP[] =
{
{0x000, "CFG"},
{0x004, "STAT"},
{0x008, "PWDKEY"},
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpWDT[] =
{
{0x000, "CFG"},
{0x004, "RSTRT"},
{0x008, "LOCK"},
{0x00C, "COUNT"},
{0x200, "INTEN"},
{0x204, "INTSTAT"},
{0x208, "INTCLR"},
{0x20C, "INTSET"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpITM[] =
{
{0xE0000000, "STIM0"},
{0xE0000004, "STIM1"},
{0xE0000008, "STIM2"},
{0xE000000C, "STIM3"},
{0xE0000010, "STIM4"},
{0xE0000014, "STIM5"},
{0xE0000018, "STIM6"},
{0xE000001C, "STIM7"},
{0xE0000020, "STIM8"},
{0xE0000024, "STIM9"},
{0xE0000028, "STIM10"},
{0xE000002C, "STIM11"},
{0xE0000030, "STIM12"},
{0xE0000034, "STIM13"},
{0xE0000038, "STIM14"},
{0xE000003C, "STIM15"},
{0xE0000040, "STIM16"},
{0xE0000044, "STIM17"},
{0xE0000048, "STIM18"},
{0xE000004C, "STIM19"},
{0xE0000050, "STIM20"},
{0xE0000054, "STIM21"},
{0xE0000058, "STIM22"},
{0xE000005C, "STIM23"},
{0xE0000060, "STIM24"},
{0xE0000064, "STIM25"},
{0xE0000068, "STIM26"},
{0xE000006C, "STIM27"},
{0xE0000070, "STIM28"},
{0xE0000074, "STIM29"},
{0xE0000078, "STIM30"},
{0xE000007C, "STIM31"},
{0xE0000E00, "TER"},
{0xE0000E40, "TPR"},
{0xE0000E80, "TCR"},
{0xE0000FB4, "LOCKSREG"},
{0xE0000FD0, "PID4"},
{0xE0000FD4, "PID5"},
{0xE0000FD8, "PID6"},
{0xE0000FDC, "PID7"},
{0xE0000FE0, "PID0"},
{0xE0000FE4, "PID1"},
{0xE0000FE8, "PID2"},
{0xE0000FEC, "PID3"},
{0xE0000FF0, "CID0"},
{0xE0000FF4, "CID1"},
{0xE0000FF8, "CID2"},
{0xE0000FFC, "CID3"},
{0xE0000FB0, "LOCKAREG"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpNVIC[] =
{
{0xE000E100, "ISER0"},
{0xE000E180, "ICER0"},
{0xE000E200, "ISPR0"},
{0xE000E280, "ICPR0"},
{0xE000E300, "IABR0"},
{0xE000E400, "IPR0"},
{0xE000E404, "IPR1"},
{0xE000E408, "IPR2"},
{0xE000E40C, "IPR3"},
{0xE000E410, "IPR4"},
{0xE000E414, "IPR5"},
{0xE000E418, "IPR6"},
{0xE000E41C, "IPR7"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpSYSCTRL[] =
{
{0xE000ED04, "ICSR"},
{0xE000ED08, "VTOR"},
{0xE000ED0C, "AIRCR"},
{0xE000ED10, "SCR"},
{0xE000ED14, "CCR"},
{0xE000ED18, "SHPR1"},
{0xE000ED1C, "SHPR2"},
{0xE000ED20, "SHPR3"},
{0xE000ED24, "SHCSR"},
{0xE000ED28, "CFSR"},
{0xE000ED2C, "HFSR"},
{0xE000ED34, "MMFAR"},
{0xE000ED38, "BFAR"},
{0xE000ED88, "CPACR"},
{0xE000EDFC, "DEMCR"},
{0xE000EF00, "STIR"},
{0xE000EF34, "FPCCR"},
{0xE000EF38, "FPCAR"},
{0xE000EF3C, "FPDSCR"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpSYSTICK[] =
{
{0xE000E010, "SYSTCSR"},
{0xE000E014, "SYSTRVR"},
{0xE000E018, "SYSTCVR"},
{0xE000E01C, "SYSTCALIB"},
{0xFFFFFFFF, NULL}
};
am_util_regdump_t g_sRegdumpTPIU[] =
{
{0xE0040000, "SSPSR"},
{0xE0040004, "CSPSR"},
{0xE0040010, "ACPR"},
{0xE00400F0, "SPPR"},
{0xE0040304, "FFCR"},
{0xE0040F00, "ITCTRL"},
{0xE0040FC8, "TYPE"},
{0xFFFFFFFF, NULL}
};
//*****************************************************************************
//
// Support functions.
//
//*****************************************************************************
static void
regdump_newline_print(uint32_t ui32Num)
{
while ( ui32Num-- )
{
am_util_stdio_printf("\n");
}
}
static uint32_t
regdump_strlen(char *pcStr)
{
char *pcS;
//
// Loop through the string.
//
for ( pcS = pcStr; *pcS; ++pcS );
//
// Return the length.
//
return (pcS - pcStr);
}
static void
block_print(am_util_regdump_t *psDump, uint32_t ui32BaseAddr)
{
uint32_t ui32RegAddr;
uint32_t ux, ui32Len, ui32MaxLen;
//
// First, get the maximum register name length.
//
ui32MaxLen = ux = 0;
while ( psDump[ux].ui32Offset != 0xFFFFFFFF )
{
ui32Len = regdump_strlen(psDump[ux].pi8RegName);
if ( ui32Len > ui32MaxLen )
{
ui32MaxLen = ui32Len;
}
ux++;
}
//
// Create the format string
//
am_util_stdio_sprintf((char*)g_ui8Fmt, " %%-%ds (0x%%08X) = 0x%%08X\n", ui32MaxLen + 1);
// am_util_stdio_printf("g_ui8Fmt: '%s'\n\n", (char*)g_ui8Fmt);
//
// Now, get the value of each register and print it.
//
ux = 0;
while ( psDump[ux].ui32Offset != 0xFFFFFFFF )
{
//
// Format string is of the form: " %8s (0x%08X) = 0x%08X\n"
//
ui32RegAddr = ui32BaseAddr + psDump[ux].ui32Offset;
am_util_stdio_printf((char*)g_ui8Fmt, psDump[ux].pi8RegName, ui32RegAddr, AM_REGVAL(ui32RegAddr));
ux++;
}
}
//*****************************************************************************
//
// printDump() - Print the registers for a given block.
//
// ui32NumModules = Number of modules in this block
// e.g. AM_REG_xxx_NUM_MODULES.
// ui32BlockBaseAddr = Base address of this block.
// ui32ModuleOffset = Offset, in bytes, between modules in the block
// e.g. AM_REG_IOMSTRn(1) - AM_REG_IOMSTRn(0).
// ui32ModuleMask = Mask of the desired block modules to be printed.
// Each lower bit indicates a module.
// pui8BlockName = Name of the block (e.g "IOM").
// psDump = ptr to regdump structure for this block.
//
//*****************************************************************************
static void
dump_reg(uint32_t ui32NumModules,
uint32_t ui32BlockBaseAddr,
uint32_t ui32ModuleOffset,
uint32_t ui32ModuleMask,
char *pui8BlockName,
am_util_regdump_t *psDump)
{
uint32_t ui32Module;
am_util_stdio_printf("%s registers:\n", pui8BlockName);
ui32Module = 0;
while ( ui32Module < ui32NumModules )
{
if ( (ui32NumModules > 1) &&
!(ui32ModuleMask & (1 << ui32Module)) )
{
ui32Module++;
continue;
}
else
{
if ( ui32NumModules > 1 )
{
am_util_stdio_printf(" %s Module %d\n", pui8BlockName, ui32Module);
}
}
block_print(psDump, ui32BlockBaseAddr + (ui32ModuleOffset * ui32Module));
ui32Module++;
regdump_newline_print(1);
}
regdump_newline_print(1);
}
//*****************************************************************************
//
//! @brief Register dumping for debug purposes.
//!
//! This function dumps register values to the print port for debug purposes.
//!
//! @param ui32PeriphMask = an OR of the mask values to be printed. e.g.
//! AM_UTIL_REGDUMP_IOM | AM_UTIL_REGDUMP_GPIO
//!
//! @param ui32ModuleMask = A mask representing the modules (for a multi-module
//! block such as IOM) to be dumped. Bit0 represents module 0, etc.
//! This parameter is ignored for single-module blocks such as GPIO.
//! Pre-defined macros can be used to generate this mask, e.g.
//! REGDUMP_MOD0 | REGDUMP_MOD1 | REGDUMP_MOD2
//! or equivalently
//! REGDUMP_MOD_MAS(0,2)
//!
//*****************************************************************************
void
am_util_regdump_print(uint32_t ui32PeriphMask, uint32_t ui32ModuleMask)
{
if ( ui32PeriphMask & AM_UTIL_REGDUMP_ADC )
{
dump_reg(AM_REG_ADC_NUM_MODULES, AM_REG_ADCn(0),
AM_REG_ADCn(1) - AM_REG_ADCn(0),
ui32ModuleMask, "ADC", &g_sRegdumpADC[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_CLKGEN )
{
dump_reg(AM_REG_CLKGEN_NUM_MODULES, AM_REG_CLKGENn(0),
AM_REG_CLKGENn(1) - AM_REG_CLKGENn(0),
ui32ModuleMask, "CLKGEN", &g_sRegdumpCLKGEN[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_CTIMER )
{
dump_reg(AM_REG_CTIMER_NUM_MODULES, AM_REG_CTIMERn(0),
AM_REG_CTIMERn(1) - AM_REG_CTIMERn(0),
ui32ModuleMask, "CTIMER", &g_sRegdumpCTIMER[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_GPIO )
{
dump_reg(AM_REG_GPIO_NUM_MODULES, AM_REG_GPIOn(0),
AM_REG_GPIOn(1) - AM_REG_GPIOn(0),
ui32ModuleMask, "GPIO", &g_sRegdumpGPIO[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_IOM )
{
dump_reg(AM_REG_IOMSTR_NUM_MODULES, AM_REG_IOMSTRn(0),
AM_REG_IOMSTRn(1) - AM_REG_IOMSTRn(0),
ui32ModuleMask, "IOM", &g_sRegdumpIOM[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_IOS )
{
dump_reg(AM_REG_IOSLAVE_NUM_MODULES, AM_REG_IOSLAVEn(0),
AM_REG_IOSLAVEn(1) - AM_REG_IOSLAVEn(0),
ui32ModuleMask, "IOS", &g_sRegdumpIOS[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_RSTGEN )
{
dump_reg(AM_REG_RSTGEN_NUM_MODULES, AM_REG_RSTGENn(0),
AM_REG_RSTGENn(1) - AM_REG_RSTGENn(0),
ui32ModuleMask, "RSTGEN", &g_sRegdumpRSTGEN[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_RTC )
{
dump_reg(AM_REG_RTC_NUM_MODULES, AM_REG_RTCn(0),
AM_REG_RTCn(1) - AM_REG_RTCn(0),
ui32ModuleMask, "RTC", &g_sRegdumpRTC[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_UART )
{
dump_reg(AM_REG_UART_NUM_MODULES, AM_REG_UARTn(0),
AM_REG_UARTn(1) - AM_REG_UARTn(0),
ui32ModuleMask, "UART", &g_sRegdumpUART[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_VCOMP )
{
dump_reg(AM_REG_VCOMP_NUM_MODULES, AM_REG_VCOMPn(0),
AM_REG_VCOMPn(1) - AM_REG_VCOMPn(0),
ui32ModuleMask, "VCOMP", &g_sRegdumpVCOMP[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_WDT )
{
dump_reg(AM_REG_WDT_NUM_MODULES, AM_REG_WDTn(0),
AM_REG_WDTn(1) - AM_REG_WDTn(0),
ui32ModuleMask, "WDT", &g_sRegdumpWDT[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_ITM )
{
dump_reg(AM_REG_ITM_NUM_MODULES, AM_REG_ITMn(0),
AM_REG_ITMn(1) - AM_REG_ITMn(0),
ui32ModuleMask, "ITM", &g_sRegdumpITM[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_NVIC )
{
dump_reg(AM_REG_NVIC_NUM_MODULES, AM_REG_NVICn(0),
AM_REG_NVICn(1) - AM_REG_NVICn(0),
ui32ModuleMask, "NVIC", &g_sRegdumpNVIC[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_SYSCTRL )
{
dump_reg(AM_REG_SYSCTRL_NUM_MODULES, AM_REG_SYSCTRLn(0),
AM_REG_SYSCTRLn(1) - AM_REG_SYSCTRLn(0),
ui32ModuleMask, "SYSCTRL", &g_sRegdumpSYSCTRL[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_SYSTICK )
{
dump_reg(AM_REG_SYSTICK_NUM_MODULES, AM_REG_SYSTICKn(0),
AM_REG_SYSTICKn(1) - AM_REG_SYSTICKn(0),
ui32ModuleMask, "SYSTICK", &g_sRegdumpSYSTICK[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_TPIU )
{
dump_reg(AM_REG_TPIU_NUM_MODULES, AM_REG_TPIUn(0),
AM_REG_TPIUn(1) - AM_REG_TPIUn(0),
ui32ModuleMask, "TPIU", &g_sRegdumpTPIU[0]);
}
#if AM_PART_APOLLO2
am_util_stdio_printf("Apollo2 specific registers:\n\n");
if ( ui32PeriphMask & AM_UTIL_REGDUMP_CACHE )
{
dump_reg(AM_REG_CACHECTRL_NUM_MODULES, AM_REG_CACHECTRLn(0),
AM_REG_CACHECTRLn(1) - AM_REG_CACHECTRLn(0),
ui32ModuleMask, "CACHE", &g_sRegdumpCACHECTRL[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_PDM )
{
dump_reg(AM_REG_PDM_NUM_MODULES, AM_REG_PDMn(0),
AM_REG_PDMn(1) - AM_REG_PDMn(0),
ui32ModuleMask, "PDM", &g_sRegdumpPDM[0]);
}
if ( ui32PeriphMask & AM_UTIL_REGDUMP_PWRCTRL )
{
dump_reg(AM_REG_PWRCTRL_NUM_MODULES, AM_REG_PWRCTRLn(0),
AM_REG_PWRCTRLn(1) - AM_REG_PWRCTRLn(0),
ui32ModuleMask, "PWRCTRL", &g_sRegdumpPWRCTRL[0]);
}
#endif // AM_PART_APOLLO2
} // am_util_regdump_print()