/********************************************************************************************************************* * File Name : $Source: fdl_user.c $ * Mod. Revision : $Revision: 1.17 $ * Mod. Date : $Date: 2016/05/31 16:15:27JST $ * Device(s) : RV40 Flash based RH850 microcontroller * Description : library related functions, which may be edited by the user *********************************************************************************************************************/ /********************************************************************************************************************* * DISCLAIMER * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. * No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all * applicable laws, including copyright laws. * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED * OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS * AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY * REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGES. * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of * this software. By using this software, you agree to the additional terms and conditions found by accessing the * following link: * http://www.renesas.com/disclaimer * * Copyright (C) 2015-2016 Renesas Electronics Corporation. All rights reserved. *********************************************************************************************************************/ /********************************************************************************************************************* * FDL header files include *********************************************************************************************************************/ #include "r_typedefs.h" #include "app.h" #include "target.h" /********************************************************************************************************************* * Compiler specific defines *********************************************************************************************************************/ #if APP_COMPILER == APP_COMP_GHS #elif APP_COMPILER == APP_COMP_IAR #define asm __asm #elif APP_COMPILER == APP_COMP_REC #endif /********************************************************************************************************************* * module global variable *********************************************************************************************************************/ uint32_t PSWSafe; /* Variable to backup the PSW value before disabling ID/NP */ /********************************************************************************************************************* * Function name: FDL_User_CriticalSetionBegin *********************************************************************************************************************/ /** * Function to disable Maskable / non maskable exceptions and NMI when critical code shall be * executed that allows no access to the code Flash or might have problems with synchronization * * @param --- * @return --- */ /*********************************************************************************************************************/ #if APP_COMPILER == APP_COMP_GHS void FDL_User_CriticalSetionBegin (void) { asm( "ldsr r0, 31" ); /* select system register bank 0 (contains PSW)*/ asm( "stsr 0x05, r7" ); /* load PSW (register 5) */ asm( "mov _PSWSafe, r6" ); /* backup PSW */ asm( "st.w r7, 0[r6]" ); /* " */ asm( "movea 0x00A0, r0, r6" ); /* NMI Flag=1, ID=1 */ asm( "or r7, r6 "); /* " */ asm( "ldsr r6, 5" ); /* write PSW */ } #elif APP_COMPILER == APP_COMP_REC #pragma inline_asm FDL_User_CriticalSetionBegin void FDL_User_CriticalSetionBegin (void) { ldsr r0, 31 /* select system register bank 0 */ /* (contains PSW) */ stsr 0x05, r7 /* load PSW (register 5) */ mov #_PSWSafe, r6 /* backup PSW */ st.w r7, 0[r6] /* " */ movea 0x00A0, r0, r6 /* NMI Flag=1, ID=1 */ or r7, r6 /* " */ ldsr r6, 5 /* write PSW */ } #else /* IAR */ void FDL_User_CriticalSetionBegin (void) { __asm(" ldsr r0, 31 \n" " stsr 0x05, r7 \n" " mov _PSWSafe, r6 \n" " st.w r7, 0[r6] \n" " movea 0x00A0, r0, r6 \n" " or r7, r6 \n" " ldsr r6, 5 \n" ); } #endif /********************************************************************************************************************* * Function name: FDL_User_CriticalSetionEnd *********************************************************************************************************************/ /** * Function to enable Maskable / non maskable exceptions and NMI after critical code has been * executed * * @param --- * @return --- */ /*********************************************************************************************************************/ #if APP_COMPILER == APP_COMP_GHS void FDL_User_CriticalSetionEnd (void) { asm( "ldsr r0, 31" ); /* select system register bank 0 (contains PSW)*/ asm( "mov _PSWSafe, r6" ); /* Restore PSW value */ asm( "ld.w 0[r6], r7" ); /* " */ asm( "ldsr r7, 5" ); /* write PSW */ } #elif APP_COMPILER == APP_COMP_REC #pragma inline_asm FDL_User_CriticalSetionEnd void FDL_User_CriticalSetionEnd (void) { ldsr r0, 31 /* select system register bank 0 (contains PSW) */ mov #_PSWSafe, r6 /* Restore PSW value */ ld.w 0[r6], r7 /* " */ ldsr r7, 5 /* write PSW */ } #else /* IAR */ void FDL_User_CriticalSetionEnd (void) { __asm(" ldsr r0, 31 \n" " mov _PSWSafe, r6 \n" " ld.w 0[r6], r7 \n" " ldsr r7, 5 \n" ); } #endif /********************************************************************************************************************* * Function name: FDL_Open *********************************************************************************************************************/ /** * Function to open the FDL operation. * The user modifiable function e.g. Initializes/Configures the Data Flash access * * @param --- * @return --- */ /*********************************************************************************************************************/ void FDL_Open (void) { //INIT_FLASHACCESS //keith } /********************************************************************************************************************* * Function name: FDL_Close *********************************************************************************************************************/ /** * Function to close the FDL operation. * The user modifyable function might disable Flash access, ... currently, it is empty * * @param --- * @return --- */ /*********************************************************************************************************************/ void FDL_Close (void) { // DISABLE_FLASHACCESS //keith }