// ---------------------------------------------------------
//   ATMEL Microcontroller Software Support  -  ROUSSET  -
// ---------------------------------------------------------
// The software is delivered "AS IS" without warranty or
// condition of any  kind, either express, implied or
// statutory. This includes without limitation any warranty
// or condition with respect to merchantability or fitness
// for any particular purpose, or against the infringements of
// intellectual property rights of others.
// ---------------------------------------------------------
//  User setup file for CSPY debugger.
// ---------------------------------------------------------



__var __mac_i;

/*********************************************************************
*
*       execUserReset()
*/
execUserReset()
{
    __message "------------------------------ execUserReset ---------------------------------";
    __message "-------------------------------Set PC Reset ----------------------------------";

     __hwReset(0);

    // peripheral reset RSTC_CR
    __writeMemory32(0xA5000004,0x400e1400,"Memory");

}

execGPNVMBit()
{
	__writeMemory32(0x400E0C04,((0x5Au << 24) | (((0xffffu << 8) & ((0x1) << 8))) | (((0xffu << 0) & ((0x0B) << 0))) ),"Memory");
}
/*********************************************************************
*
*       execUserPreload()
*/
execUserPreload()
{
    __message "------------------------------ execUserPreload ---------------------------------";

    __hwReset(0);                          //* Hardware Reset: CPU is automatically halted after the reset

    // peripheral reset RSTC_CR
    __writeMemory32(0xA5000004,0x400e1400,"Memory");
    //*  Get the Chip ID
    __mac_i=__readMemory32(0x400E0940,"Memory");
    __message " ---------------------------------------- Chip ID   0x",__mac_i:%X;
}
