/********************************************************************************************************* * ------------------------------------------------------------------------------------------------------ * file description * ------------------------------------------------------------------------------------------------------ * \file ramt.h * \unit ramt * \brief This is a simple ram test module for C language * \author Lamdonn * \version v0.1.0 * \license GPL-2.0 * \copyright Copyright (C) 2023 Lamdonn. ********************************************************************************************************/ #ifndef __ramt_H #define __ramt_H #include #include #include #include #include /* Version infomation */ #define RAMT_V_MAJOR 0 #define RAMT_V_MINOR 1 #define RAMT_V_PATCH 0 // Define different RAM test modes #define RAMT_MODE_NORMAL ((uint32_t)0x00000001) // Normal read/write test #define RAMT_MODE_BOUNDARY ((uint32_t)0x00000002) // Boundary test #define RAMT_MODE_PATTERN ((uint32_t)0x00000004) // Data pattern test #define RAMT_MODE_RANDOM ((uint32_t)0x00000008) // Random access test #define RAMT_MODE_INVERSION ((uint32_t)0x00000010) // Inversion test #define RAMT_MODE_CLEARING ((uint32_t)0x00000020) // Clearing test #define RAMT_MODE_SPECIFIC ((uint32_t)0x00000040) // Specific data test // RAM structure definition typedef struct { void *base; // Pointer to the simulated RAM uint32_t size; // Size of the RAM uint32_t private[4]; // Private data, modification not allowed } RAMT; /** * \brief Initialize RAMT structure * \param[in] ramt: Pointer to the RAMT structure to be initialized * \return 1 if initialization is successful, 0 if it fails */ int ramt_init(RAMT *ramt); /** * \brief Start the RAM testing with specified mode and duration * \param[in] ramt: Pointer to the RAMT structure * \param[in] mode: The mode of the RAM test, see RAMT_MODE_XXX define * \param[in] duration: The duration for which the RAM test should run, 0xFFFFFFFF continuous running * \return 1 if the operation is successful, 0 if it fails */ int ramt_start(RAMT *ramt, uint32_t mode, uint32_t duration); /** * \brief Stop the RAM testing * \param[in] ramt: Pointer to the RAMT structure * \return 1 if the operation is successful, 0 if it fails */ int ramt_stop(RAMT *ramt); /** * \brief Retrieve the historical result of the RAM test * \param[in] ramt: Pointer to the RAMT structure * \return The result history if successful, 0xFFFFFFFF if it invalid, fail mask see RAMT_MODE_XXX define */ uint32_t ramt_result(RAMT *ramt); /** * \brief Retrieve the latest result of the RAM test * \param[in] ramt: Pointer to the RAMT structure * \return The latest result if successful, 0xFFFFFFFF if it invalid, fail mask see RAMT_MODE_XXX define */ uint32_t ramt_result_latest(RAMT *ramt); /** * \brief Periodically execute RAM testing tasks based on the mode and duration * \param[in] ramt: Pointer to the RAMT structure */ void ramt_task(RAMT *ramt); #endif