176 lines
8.5 KiB
C
176 lines
8.5 KiB
C
/*********************************************************************************************************************
|
||
* @file XMC1000_RomFunctionTable.h
|
||
* @brief ROM functions prototypes for the XMC1400-Series
|
||
* @version V1.0
|
||
* @date 03 Sep 2015
|
||
*
|
||
* @cond
|
||
*********************************************************************************************************************
|
||
* Copyright (c) 2015-2016, Infineon Technologies AG
|
||
* All rights reserved.
|
||
*
|
||
* Redistribution and use in source and binary forms, with or without modification,are permitted provided that the
|
||
* following conditions are met:
|
||
*
|
||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
||
* disclaimer.
|
||
*
|
||
* 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.
|
||
*
|
||
* Neither the name of the copyright holders 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.
|
||
*
|
||
* To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with
|
||
* Infineon Technologies AG dave@infineon.com).
|
||
*********************************************************************************************************************
|
||
*
|
||
**************************** Change history *********************************
|
||
* V1.0, 03 Sep 2015, JFT : Initial version
|
||
*****************************************************************************
|
||
* @endcond
|
||
*/
|
||
|
||
#ifndef ROM_FUNCTION_TABLE_H
|
||
#define ROM_FUNCTION_TABLE_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/* ***************************************************************************
|
||
******************************* Constants *******************************
|
||
*************************************************************************** */
|
||
/* Start address of the ROM function table */
|
||
#define ROM_FUNCTION_TABLE_START (0x00000100U)
|
||
|
||
/* Pointer to Erase Flash Page routine */
|
||
#define _NvmErase (ROM_FUNCTION_TABLE_START + 0x00U)
|
||
|
||
/* Pointer to Erase, Program & Verify Flash Page routine */
|
||
#define _NvmProgVerify (ROM_FUNCTION_TABLE_START + 0x04U)
|
||
|
||
/* Pointer to Request BMI installation routine */
|
||
#define _BmiInstallationReq (ROM_FUNCTION_TABLE_START + 0x08U)
|
||
|
||
|
||
/* ***************************************************************************
|
||
******************************** Enumerations ********************************
|
||
*************************************************************************** */
|
||
typedef enum TagNVMStatus
|
||
{
|
||
|
||
/* The function succeeded */
|
||
NVM_PASS = (int32_t)0x00010000U,
|
||
|
||
/* Generic error code */
|
||
NVM_E_FAIL = (int32_t)0x80010001U,
|
||
|
||
/* Source data not in RAM */
|
||
NVM_E_SRC_AREA_EXCCEED = (int32_t)0x80010003U,
|
||
|
||
/* Source data is not 4 byte aligned */
|
||
NVM_E_SRC_ALIGNMENT = (int32_t)0x80010004U,
|
||
|
||
/* NVM module cannot be physically accessed */
|
||
NVM_E_NVM_FAIL = (int32_t)0x80010005U,
|
||
|
||
/* Verification of written page not successful */
|
||
NVM_E_VERIFY = (int32_t)0x80010006U,
|
||
|
||
/* Destination data is not (completely) located in NVM */
|
||
NVM_E_DST_AREA_EXCEED = (int32_t)0x80010009U,
|
||
|
||
/* Destination data is not properly aligned */
|
||
NVM_E_DST_ALIGNMENT = (int32_t)0x80010010U,
|
||
|
||
} NVM_STATUS;
|
||
|
||
|
||
/* ***************************************************************************
|
||
*********************************** Macros ***********************************
|
||
*************************************************************************** */
|
||
|
||
/* ***************************************************************************
|
||
Description: Erase granularity = 1 Page of 16 blocks of 16 Bytes
|
||
= Equivalent to 256 Bytes using this routine.
|
||
|
||
Input parameters:
|
||
<EFBFBD> Logical address of the Flash Page to be erased which must be page aligned
|
||
and in NVM address range
|
||
|
||
Return status:
|
||
<EFBFBD> OK (NVM_PASS)
|
||
<EFBFBD> Invalid address (NVM_E_DST_ALIGNMENT or NVM_E_DST_AREA_EXCEED)
|
||
<EFBFBD> Operation failed (Error during low level NVM programming driver):
|
||
NVM_E_FAIL
|
||
NVM_E_VERIFY
|
||
NVM_E_NVM_FAIL
|
||
|
||
Prototype:
|
||
NVM_STATUS XMC1000_NvmErasePage(uint32_t *pageAddr)
|
||
*************************************************************************** */
|
||
#define XMC1000_NvmErasePage (*((NVM_STATUS (**) (uint32_t * )) \
|
||
_NvmErase))
|
||
|
||
/* ***************************************************************************
|
||
Description: This procedure performs erase (skipped if not necessary), program
|
||
and verify of selected Flash page.
|
||
|
||
Input parameter:
|
||
<EFBFBD> Logical address of the target Flash Page, must be page aligned and in NVM
|
||
address range
|
||
|
||
<EFBFBD> Address in SRAM where the data starts, must be 4-byte aligned
|
||
|
||
Return status:
|
||
<EFBFBD> OK (NVM_PASS)
|
||
<EFBFBD> Invalid addresses
|
||
NVM_E_DST_ALIGNMENT
|
||
NVM_E_SRC_ALIGNMENT
|
||
NVM_E_DST_AREA_EXCEED
|
||
NVM_E_SRC_AREA_EXCCEED
|
||
<EFBFBD> Operation failed (Error during low level NVM programming driver):
|
||
NVM_E_FAIL
|
||
NVM_E_VERIFY
|
||
NVM_E_NVM_FAIL
|
||
|
||
Prototype:
|
||
NVM_STATUS XMC1000_NvmProgVerify(const uint32_t *srcAddr, uint32_t *dstAddr)
|
||
*************************************************************************** */
|
||
#define XMC1000_NvmProgVerify (*((NVM_STATUS (**) (const uint32_t * ,\
|
||
uint32_t * ))\
|
||
_NvmProgVerify))
|
||
|
||
|
||
/* ***************************************************************************
|
||
Description: This procedure initiates installation of a new BMI value. In
|
||
particular, it can be used as well as to restore the state upon delivery for a
|
||
device already in User Productive mode.
|
||
|
||
Input parameter:
|
||
<EFBFBD> BMI value to be installed
|
||
|
||
Return status:
|
||
<EFBFBD> wrong input BMI value (0x01) - only upon error, if OK the procedure triggers
|
||
a reset respectively does not return to calling routine !
|
||
|
||
Prototype:
|
||
unsigned long XMC1000_BmiInstallationReq(unsigned short requestedBmiValue)
|
||
**************************************************************************** */
|
||
#define XMC1000_BmiInstallationReq (*((uint32_t (**) (uint16_t)) \
|
||
_BmiInstallationReq))
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* ROM_FUNCTION_TABLE_H */
|