#include "r_typedefs.h"

#pragma ghs startnomisra
#include "v800_ghs.h"
#pragma ghs endnomisra

#include "r_dev_api.h"
#include "rh850_macros.h"



/* Software reset control register */
#define   SYS_REG_SWRESA                    (0xFFF80A04UL)
#define   SYS_REG_PROTCMD0                  (0xFFF80000UL)
#define   SYS_REG_PROTS0                    (0xFFF80004UL)

/* Module reset control register */
#define   SYS_REG_MRSTC                     (0xFFF8F400UL)
#define   SYS_REG_PROTSMRST                 (0xFFF8F484UL)
#define   SYS_REG_PROTCMDMRST               (0xFFF8F480UL)

/* Preload buffer control register */
#define   SYS_REG_PRL0REG                   (0xF200A000UL)
#define   SYS_REG_PRL1REG                   (0xF200A004UL)
#define   SYS_REG_PRL2REG                   (0xF200A008UL)
#define   SYS_REG_PRL3REG                   (0xF200A00CUL)

void nop(void)
{
    __NOP();
}

void enable_interrupt(void)
{
    __EI();
}

void disable_interrupt(void)
{
    __DI();
}

void software_reset(void)
{

}

void hardware_reset(void)
{
    R_DEV_WRITE_PROT_REG(SYS_REG_PROTCMD0, SYS_REG_SWRESA, 0x00000001UL);
    while ( 0UL != R_DEV_READ_REG(32, SYS_REG_PROTS0))  /* Read PROTSMRST */
    {
    }
}

void Sys_Peripheral_Reset(uint32_t u32Peri)
{
    u32Peri &= SYS_PERI_RESETTABLE;
    u32Peri |= R_DEV_READ_REG(32, SYS_REG_MRSTC);
    R_DEV_WRITE_PROT_REG(SYS_REG_PROTCMDMRST, SYS_REG_MRSTC, u32Peri);
    while ( 0UL != R_DEV_READ_REG(32, SYS_REG_PROTSMRST))  /* Read PROTSMRST */
    {
    }
}

void Sys_Enable_Preload_Buffer(void)
{
    R_DEV_WRITE_REG(32, SYS_REG_PRL0REG, 0x0002F101UL);
    R_DEV_WRITE_REG(32, SYS_REG_PRL1REG, 0x00022101UL);
    R_DEV_WRITE_REG(32, SYS_REG_PRL2REG, 0x0002F101UL);
    R_DEV_WRITE_REG(32, SYS_REG_PRL3REG, 0x0002F101UL);
}