You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
9.4 KiB
C
273 lines
9.4 KiB
C
4 weeks ago
|
// TI File $Revision: /main/3 $
|
||
|
// Checkin $Date: February 5, 2008 11:10:02 $
|
||
|
//###########################################################################
|
||
|
//
|
||
|
// FILE: Flash2833x_API_Library.h
|
||
|
//
|
||
|
// TITLE: F2833x Flash Algo's main include file
|
||
|
//
|
||
|
// DESCRIPTION:
|
||
|
//
|
||
|
// This file should be included in any project that uses any of the
|
||
|
// the F2833x flash APIs.
|
||
|
//
|
||
|
//###########################################################################
|
||
|
// $TI Release:$
|
||
|
// $Release Date:$
|
||
|
//###########################################################################
|
||
|
|
||
|
#ifndef FLASH2833X_API_LIBRARY_H
|
||
|
#define FLASH2833X_API_LIBRARY_H
|
||
|
|
||
|
#include "F28335/Flash2833x_API_Config.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
28x Datatypes
|
||
|
|
||
|
For Portability, User Is Recommended To Use Following Data Type Size
|
||
|
Definitions For 16/32/64-Bit Signed/Unsigned Integers and floating point
|
||
|
variables:
|
||
|
---------------------------------------------------------------------------*/
|
||
|
|
||
|
#ifndef DSP28_DATA_TYPES
|
||
|
#define DSP28_DATA_TYPES
|
||
|
typedef int int16;
|
||
|
typedef long int32;
|
||
|
typedef long long int64;
|
||
|
typedef unsigned int Uint16;
|
||
|
typedef unsigned long Uint32;
|
||
|
typedef unsigned long long Uint64;
|
||
|
typedef float float32;
|
||
|
typedef long double float64;
|
||
|
#endif
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
API Status Messages
|
||
|
|
||
|
The following status values are returned from the API to the calling
|
||
|
program. These can be used to determine if the API function passed
|
||
|
or failed.
|
||
|
---------------------------------------------------------------------------*/
|
||
|
// Operation passed, no errors were flagged
|
||
|
#define STATUS_SUCCESS 0
|
||
|
|
||
|
// The CSM is preventing the function from performing its operation
|
||
|
#define STATUS_FAIL_CSM_LOCKED 10
|
||
|
|
||
|
// Device REVID does not match that required by the API
|
||
|
#define STATUS_FAIL_REVID_INVALID 11
|
||
|
|
||
|
// Invalid address passed to the API
|
||
|
#define STATUS_FAIL_ADDR_INVALID 12
|
||
|
|
||
|
// Incorrect PARTID
|
||
|
// For example the F2806 API was used on a F2808 device.
|
||
|
#define STATUS_FAIL_INCORRECT_PARTID 13
|
||
|
|
||
|
// API/Silicon missmatch. An old version of the
|
||
|
// API is being used on silicon it is not valid for
|
||
|
// Please update to the latest API.
|
||
|
#define STATUS_FAIL_API_SILICON_MISMATCH 14
|
||
|
|
||
|
// ---- Erase Specific errors ----
|
||
|
#define STATUS_FAIL_NO_SECTOR_SPECIFIED 20
|
||
|
#define STATUS_FAIL_PRECONDITION 21
|
||
|
#define STATUS_FAIL_ERASE 22
|
||
|
#define STATUS_FAIL_COMPACT 23
|
||
|
#define STATUS_FAIL_PRECOMPACT 24
|
||
|
|
||
|
// ---- Program Specific errors ----
|
||
|
#define STATUS_FAIL_PROGRAM 30
|
||
|
#define STATUS_FAIL_ZERO_BIT_ERROR 31
|
||
|
|
||
|
// ---- Verify Specific errors ----
|
||
|
#define STATUS_FAIL_VERIFY 40
|
||
|
|
||
|
// Busy is set by each API function before it determines
|
||
|
// a pass or fail condition for that operation.
|
||
|
// The calling function will will not receive this
|
||
|
// status condition back from the API
|
||
|
#define STATUS_BUSY 999
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
Flash sector mask definitions
|
||
|
|
||
|
The following macros can be used to form a mask specifying which sectors
|
||
|
will be erased by the erase API function.
|
||
|
|
||
|
Bit0 = Sector A
|
||
|
Bit1 = Sector B
|
||
|
Bit2 = Sector C
|
||
|
Bit3 = Sector D
|
||
|
Bit4 = Sector E
|
||
|
Bit5 = Sector F
|
||
|
Bit6 = Sector G
|
||
|
Bit7 = Sector H
|
||
|
---------------------------------------------------------------------------*/
|
||
|
|
||
|
#define SECTORA (Uint16)0x0001
|
||
|
#define SECTORB (Uint16)0x0002
|
||
|
#define SECTORC (Uint16)0x0004
|
||
|
#define SECTORD (Uint16)0x0008
|
||
|
#define SECTORE (Uint16)0x0010
|
||
|
#define SECTORF (Uint16)0x0020
|
||
|
#define SECTORG (Uint16)0x0040
|
||
|
#define SECTORH (Uint16)0x0080
|
||
|
|
||
|
|
||
|
#if FLASH_F28335
|
||
|
// All sectors on an F28335 - Sectors A - H
|
||
|
#define SECTOR_F28335 (SECTORA|SECTORB|SECTORC|\
|
||
|
SECTORD|SECTORE|SECTORF|\
|
||
|
SECTORG|SECTORH)
|
||
|
#endif // -- end FLASH_F28335
|
||
|
|
||
|
#if FLASH_F28334
|
||
|
// All sectors on an F28334 - Sectors A - H
|
||
|
#define SECTOR_F28334 (SECTORA|SECTORB|SECTORC|\
|
||
|
SECTORD|SECTORE|SECTORF|\
|
||
|
SECTORG|SECTORH)
|
||
|
#endif // -- end FLASH_F28334
|
||
|
|
||
|
#if FLASH_F28332
|
||
|
// All sectors on an F28332 - Sectors A - D
|
||
|
#define SECTOR_F28332 (SECTORA|SECTORB|SECTORC|\
|
||
|
SECTORD)
|
||
|
#endif // -- end FLASH_F28332
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
API Status Structure
|
||
|
|
||
|
This structure is used to pass debug data back to the calling routine.
|
||
|
Note that the Erase API function has 3 parts: precondition, erase and
|
||
|
and compaction. Erase and compaction failures will not populate
|
||
|
the expected and actual data fields.
|
||
|
---------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct {
|
||
|
Uint32 FirstFailAddr;
|
||
|
Uint16 ExpectedData;
|
||
|
Uint16 ActualData;
|
||
|
}FLASH_ST;
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
Interface Function prototypes
|
||
|
|
||
|
For each 28x Flash API library, the function names are of the form:
|
||
|
Flash<DeviceNum>_<Operation>()
|
||
|
|
||
|
Where <DeviceNum> is the device: ie 2808, 2806, 2801
|
||
|
<Operation> is the operation such as Erase, Program...
|
||
|
|
||
|
For portability for users who may move between the F2808, F2806 and
|
||
|
F2801, the following macro definitions are supplied.
|
||
|
|
||
|
Using these macro definitions, the user can use instead make a generic
|
||
|
call: Flash_<Operation> and the macro will map the call to the proper
|
||
|
device function
|
||
|
|
||
|
Note except for the toggle test function, all of the function prototypes
|
||
|
are compatible with F281x devices as well.
|
||
|
---------------------------------------------------------------------------*/
|
||
|
|
||
|
#if FLASH_F28335
|
||
|
#define Flash_Erase(a,b) Flash28335_Erase(a,b)
|
||
|
#define Flash_Program(a,b,c,d) Flash28335_Program(a,b,c,d)
|
||
|
#define Flash_Verify(a,b,c,d) Flash28335_Verify(a,b,c,d)
|
||
|
#define Flash_ToggleTest(a,b) Flash28335_ToggleTest(a,b)
|
||
|
#define Flash_DepRecover() Flash28335_DepRecover()
|
||
|
#define Flash_APIVersionHex() Flash28335_APIVersionHex()
|
||
|
#define Flash_APIVersion() Flash28335_APIVersion()
|
||
|
#endif
|
||
|
|
||
|
#if FLASH_F28334
|
||
|
#define Flash_Erase(a,b) Flash28334_Erase(a,b)
|
||
|
#define Flash_Program(a,b,c,d) Flash28334_Program(a,b,c,d)
|
||
|
#define Flash_Verify(a,b,c,d) Flash28334_Verify(a,b,c,d)
|
||
|
#define Flash_ToggleTest(a,b) Flash28334_ToggleTest(a,b)
|
||
|
#define Flash_DepRecover() Flash28334_DepRecover()
|
||
|
#define Flash_APIVersionHex() Flash28334_APIVersionHex()
|
||
|
#define Flash_APIVersion() Flash28334_APIVersion()
|
||
|
#endif
|
||
|
|
||
|
#if FLASH_F28332
|
||
|
#define Flash_Erase(a,b) Flash28332_Erase(a,b)
|
||
|
#define Flash_Program(a,b,c,d) Flash28332_Program(a,b,c,d)
|
||
|
#define Flash_Verify(a,b,c,d) Flash28332_Verify(a,b,c,d)
|
||
|
#define Flash_ToggleTest(a,b) Flash28332_ToggleTest(a,b)
|
||
|
#define Flash_DepRecover() Flash28332_DepRecover()
|
||
|
#define Flash_APIVersionHex() Flash28332_APIVersionHex()
|
||
|
#define Flash_APIVersion() Flash28332_APIVersion()
|
||
|
#endif
|
||
|
|
||
|
extern Uint16 Flash_Erase(Uint16 SectorMask, FLASH_ST *FEraseStat);
|
||
|
extern Uint16 Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);
|
||
|
extern Uint16 Flash_Verify(Uint16 *StartAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FVerifyStat);
|
||
|
extern void Flash_ToggleTest(volatile Uint32 *ToggleReg, Uint32 Mask);
|
||
|
extern Uint16 Flash_DepRecover();
|
||
|
extern float32 Flash_APIVersion();
|
||
|
extern Uint16 Flash_APIVersionHex();
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
Frequency Scale factor:
|
||
|
The calling program must provide this global parameter used
|
||
|
for frequency scaling the algo's.
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
extern Uint32 Flash_CPUScaleFactor;
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
Callback Function Pointer:
|
||
|
A callback function can be specified. This function will be called
|
||
|
at safe times during erase, program and verify. This function can
|
||
|
then be used to service an external watchdog or send a communications
|
||
|
packet.
|
||
|
|
||
|
Note:
|
||
|
THE FLASH AND OTP ARE NOT AVAILABLE DURING THIS FUNCTION CALL.
|
||
|
THE FLASH/OTP CANNOT BE READ NOR CAN CODE EXECUTE FROM IT DURING THIS CALL
|
||
|
DO NOT CALL ANY OF THE THE FLASH API FUNCTIONS DURING THIS CALL
|
||
|
----------------------------------------------------------------------------*/
|
||
|
extern void (*Flash_CallbackPtr) (void);
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
API load/run symbols:
|
||
|
These symbols are defined by the linker during the link. Refer to the
|
||
|
Flash28_API section in the example .cmd file:
|
||
|
|
||
|
Flash28_API:
|
||
|
{
|
||
|
Flash28335_API_Library.lib(.econst)
|
||
|
Flash28335_API_Library.lib(.text)
|
||
|
} LOAD = FLASH,
|
||
|
RUN = SARAM,
|
||
|
LOAD_START(_Flash28_API_LoadStart),
|
||
|
LOAD_END(_Flash28_API_LoadEnd),
|
||
|
RUN_START(_Flash28_API_RunStart),
|
||
|
PAGE = 0
|
||
|
|
||
|
These are used to copy the flash API from flash to SARAM
|
||
|
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
extern Uint16 Flash28_API_LoadStart;
|
||
|
extern Uint16 Flash28_API_LoadEnd;
|
||
|
extern Uint16 Flash28_API_RunStart;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif /* extern "C" */
|
||
|
|
||
|
|
||
|
#endif // -- end FLASH2833x_API_LIBRARY_H
|
||
|
|
||
|
// --------- END OF FILE ----------------------------------
|
||
|
|