1694 lines
62 KiB
C++
1694 lines
62 KiB
C++
/******************************************************************************
|
|
TMS320C66xx KeyStone Multicore DSP Software Development Kit (SDK). Rev 2A.
|
|
(C) MicroLAB Systems, 2014-2015
|
|
|
|
File: C66xx DSP SDK API functions declarations
|
|
-----
|
|
|
|
Notes:
|
|
------
|
|
1. This C-header file contains C66xx DSP SDK API functions declarations
|
|
and is used with C66XX.h C-header file.
|
|
|
|
2. This file is best viewed with the TAB setting set to '4'.
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
/**
|
|
* @file C66XX_FUNCTIONS.hxx
|
|
*
|
|
* @brief SDK API functions declarations
|
|
*
|
|
* This file contains C66xx DSP SDK API functions declarations
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef __C66XX_FUNCTIONS_HXX__ // check for this file has been already included
|
|
#define __C66XX_FUNCTIONS_HXX__ 1
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ Returned error codes ===========================================
|
|
//=============================================================================
|
|
/** @addtogroup C66XX_ERRORS DSP SDK API returned error codes
|
|
* @{
|
|
*/
|
|
#define C66XX_OK 0 /**< No errors */
|
|
#define C66XX_PARAM_ERR -1 /**< Invalid function parameter */
|
|
#define C66XX_INVALID_HW_ERR -2 /**< Invalid H/W error (invalid board, etc.) */
|
|
#define C66XX_HW_ERR -3 /**< H/W error (error writing to the DSP control registers, etc) */
|
|
#define C66XX_I2C_ERR -10 /**< I2C module is not correctly operated */
|
|
#define C66XX_I2C_AL_ERR -11 /**< I2C module arbitration lost error */
|
|
#define C66XX_I2C_RSFULL_ERR -12 /**< I2C module overrun error */
|
|
#define C66XX_I2C_XSMT_ERR -13 /**< I2C module underflow error */
|
|
#define C66XX_I2C_NACK_ERR -14 /**< I2C module no-acknowledgement error */
|
|
#define C66XX_I2C_ARDY_ERR -15 /**< I2C module register-access-ready error */
|
|
#define C66XX_I2C_READ_ERR -16 /**< I2C module read error */
|
|
#define C66XX_I2C_WRITE_ERR -17 /**< I2C module write error */
|
|
#define C66XX_I2C_TIMEOUT_ERR -18 /**< I2C bus timeout error */
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ SDK API functions ID defs ======================================
|
|
//=============================================================================
|
|
/** @addtogroup C66XX_FUNCTIONS_ID SDK API functions ID defs
|
|
* @{
|
|
*/
|
|
|
|
enum
|
|
{
|
|
C66XX_GET_ERROR_MESSAGE_FUNCTION_ID = 0,
|
|
C66XX_GET_FUNCTION_NAME_FUNCTION_ID,
|
|
C66XX_SYS_SET_CORE_RESET_STATE_FUNCTION_ID,
|
|
C66XX_SYS_GET_CORE_RESET_STATE_FUNCTION_ID,
|
|
C66XX_SYS_GET_CORE_RESET_SOURCE_FUNCTION_ID,
|
|
C66XX_SYS_SET_CORE_BOOT_ADDRESS_FUNCTION_ID,
|
|
C66XX_SYS_INIT_MAIN_PLL_FUNCTION_ID,
|
|
C66XX_SYS_GET_MAIN_PLL_SETTINGS_FUNCTION_ID,
|
|
C66XX_SYS_INIT_DDR3_PLL_FUNCTION_ID,
|
|
C66XX_SYS_GET_DDR3_PLL_SETTINGS_FUNCTION_ID,
|
|
C66XX_SYS_INIT_PASS_PLL_FUNCTION_ID,
|
|
C66XX_SYS_GET_PASS_PLL_SETTINGS_FUNCTION_ID,
|
|
C66XX_SYS_ENABLE_POWER_DOMAIN_FUNCTION_ID,
|
|
C66XX_MEM_INIT_XMC_MPAX_SEGMENT_FUNCTION_ID,
|
|
C66XX_MEM_INIT_DDR3_FUNCTION_ID,
|
|
C66XX_INT_INIT_CORE_FUNCTION_ID,
|
|
C66XX_INT_MAP_CORE_EVENT_HANDLER_FUNCTION_ID,
|
|
C66XX_INT_UNMAP_CORE_EVENT_HANDLER_FUNCTION_ID,
|
|
C66XX_INT_INIT_CHIP_FUNCTION_ID,
|
|
C66XX_GPIO_INIT_FUNCTION_ID,
|
|
C66XX_TIMER_INIT_FUNCTION_ID,
|
|
C66XX_TIMER_START_FUNCTION_ID,
|
|
C66XX_TIMER_STOP_FUNCTION_ID,
|
|
C66XX_TIMER_RESET_FUNCTION_ID,
|
|
C66XX_TIMER_ENABLE_INTERRUPTS_FUNCTION_ID,
|
|
C66XX_TIMER_DISABLE_INTERRUPTS_FUNCTION_ID,
|
|
C66XX_UART_INIT_FUNCTION_ID,
|
|
C66XX_I2C_INIT_FUNCTION_ID,
|
|
C66XX_I2C_WRITE_DATA_FUNCTION_ID,
|
|
C66XX_I2C_READ_DATA_FUNCTION_ID,
|
|
C66XX_GBE_INIT_SERDES_FUNCTION_ID,
|
|
C66XX_GBE_INIT_SGMII_FUNCTION_ID,
|
|
C66XX_SRIO_INIT_FUNCTION_ID,
|
|
C66XX_SRIO_MAP_TX_QUEUE_FUNCTION_ID,
|
|
C66XX_SRIO_ROUTE_DOORBELL_INTERRUPT_FUNCTION_ID,
|
|
C66XX_NUMBER_OF_FUNCTIONS
|
|
};
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
//=============================================================================
|
|
//============ General SDK API functions declarations =========================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_GENERAL_FUNCTIONS General DSP SDK API functions
|
|
* @{
|
|
*/
|
|
|
|
/*------------ C66XX_get_last_error() function ---------------------------*//**
|
|
* @brief Function returns error code of last executed API function
|
|
*
|
|
* @return Error code of last executed API function
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_get_last_error(void);
|
|
|
|
|
|
/*------------ C66XX_get_error_flag() function ---------------------------*//**
|
|
* @brief Function returns status of ERROR_FLAG for API functions
|
|
*
|
|
* ERROR_FLAG is set by each API function in case error has been detected.
|
|
* ERROR_FLAG can be reset by C66XX_clear_error_flag() API function
|
|
*
|
|
* @param[out] error_code - pointer to a variable to receive the error code in
|
|
* case error has been detected. In case pointer is NULL, then
|
|
* no error code is returned;
|
|
* @param[out] error_function_id - pointer to a variable to receive ID of the
|
|
* first API function, which has returned with error. In case
|
|
* pointer is NULL, then no function ID is returned;
|
|
*
|
|
* @return Status of ERROR_FLAG: ON or OFF
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_get_error_flag(int32_t *error_code, int32_t *error_function_id);
|
|
|
|
|
|
/*------------ C66XX_clear_error_flag() function -------------------------*//**
|
|
* @brief Function clear ERROR_FLAG for API functions
|
|
*
|
|
* @return Always OK
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_clear_error_flag(void);
|
|
|
|
|
|
/*------------ C66XX_get_error_message() function ------------------------*//**
|
|
* @brief Function returns the text interpretation of the error code.
|
|
*
|
|
* @param[in] error - error code to be interpreted;
|
|
* @param[out] error_message - pointer to the returned string. In case pointer
|
|
* is NULL, then no text is filled in;
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_get_error_message(int32_t error, char *error_message);
|
|
|
|
|
|
/*------------ C66XX_get_function_name() function ------------------------*//**
|
|
* @brief Function returns the text interpretation of API function.
|
|
*
|
|
* @param[in] function_id - ID of the API function to be interpreted;
|
|
* @param[out] function_name - pointer to the returned string. In case pointer
|
|
* is NULL, then no text is filled in;
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_get_function_name(int32_t function_id, char *function_name);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ System functions ===============================================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_SYS System functions
|
|
* @{
|
|
*/
|
|
|
|
|
|
/** DSP core reset source is global reset */
|
|
#define C66XX_DSP_CORE_RESET_SRC_IS_GLOBAL_RESET 1
|
|
/** DSP core reset source is local reset */
|
|
#define C66XX_DSP_CORE_RESET_SRC_IS_LOCAL_RESET 2
|
|
|
|
|
|
/** Main PLL Multiplier bitmask */
|
|
#define C66XX_MAIN_PLL_PLLM_BITMASK 0x1fff
|
|
/** Main PLL Divider bitmask */
|
|
#define C66XX_MAIN_PLL_PLLD_BITMASK 0x3f
|
|
/** Number of PLL dividers */
|
|
#define C66XX_MAIN_PLL_PLLDIV_COUNT 16
|
|
|
|
/** Main PLL divider data descriptor */
|
|
typedef struct
|
|
{
|
|
uint32_t enable; /**< PLL divider enable flag */
|
|
uint32_t ratio; /**< PLL divider value (8-bit) */
|
|
} C66XX_MAIN_PLL_PLLDIV_DD;
|
|
|
|
// Main PLL divider data descriptor length in bytes
|
|
#define C66XX_MAIN_PLL_PLLDIV_DD_LEN sizeof(C66XX_MAIN_PLL_PLLDIV_DD)
|
|
|
|
|
|
/** Main PLL data descriptor (contains parameters which are used to init PLL) */
|
|
typedef struct
|
|
{
|
|
uint32_t bypass; /**< PLL mode: bypass or not */
|
|
uint32_t pllm; /**< PLL multiplier value (13-bit) */
|
|
uint32_t plld; /**< PLL divider value (6-bit) */
|
|
uint32_t output_divide; /**< PLL output divider value (4-bit) */
|
|
C66XX_MAIN_PLL_PLLDIV_DD plldiv[C66XX_MAIN_PLL_PLLDIV_COUNT]; /**< PLL dividers */
|
|
} C66XX_MAIN_PLL_DD;
|
|
|
|
// Main PLL data descriptor length in bytes
|
|
#define C66XX_MAIN_PLL_DD_LEN sizeof(C66XX_MAIN_PLL_DD)
|
|
|
|
|
|
/** DDR3 PLL data descriptor (contains parameters which are used to init DDR3 PLL) */
|
|
typedef struct
|
|
{
|
|
uint32_t pllm; /**< PLL multiplier value (13-bit) */
|
|
uint32_t plld; /**< PLL divider value (6-bit) */
|
|
} C66XX_DDR3_PLL_DD;
|
|
|
|
// DDR3 PLL data descriptor length in bytes
|
|
#define C66XX_DDR3_PLL_DD_LEN sizeof(C66XX_DDR3_PLL_DD)
|
|
|
|
|
|
/** PASS PLL data descriptor (contains parameters which are used to init PASS PLL) */
|
|
typedef struct
|
|
{
|
|
uint32_t pllm; /**< PLL multiplier value (13-bit) */
|
|
uint32_t plld; /**< PLL divider value (6-bit) */
|
|
} C66XX_PASS_PLL_DD;
|
|
|
|
// PASS PLL data descriptor length in bytes
|
|
#define C66XX_PASS_PLL_DD_LEN sizeof(C66XX_PASS_PLL_DD)
|
|
|
|
|
|
/*------------ C66XX_SYS_get_core_number() function ----------------------*//**
|
|
* @brief Function returns DSP core number at which the program is running
|
|
*
|
|
* @return DSP core number
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_SYS_get_core_number(void);
|
|
|
|
|
|
/*------------ C66XX_SYS_get_max_core_freq() function --------------------*//**
|
|
* @brief Function returns DSP core max speed in MHz
|
|
*
|
|
* @return DSP core max speed in MHz
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_SYS_get_max_core_freq(void);
|
|
|
|
|
|
/*------------ C66XX_SYS_set_core_reset_state() function -----------------*//**
|
|
* @brief Function sets or releases DSP core local reset
|
|
*
|
|
* @param[in] core - DSP core number to set or release from local reset
|
|
* @param[in] state - DSP core local reset state: ON or OFF
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_set_core_reset_state(uint32_t core, uint32_t state);
|
|
|
|
|
|
/*------------ C66XX_SYS_get_core_reset_state() function -----------------*//**
|
|
* @brief Function returns DSP core local reset state
|
|
*
|
|
* @param[in] core - DSP core number to return local reset state
|
|
* @param[out] state - pointer to a variable to receive DSP core local reset
|
|
* state: ON or OFF
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_get_core_reset_state(uint32_t core, uint32_t *state);
|
|
|
|
|
|
/*------------ C66XX_SYS_get_core_reset_source() function ----------------*//**
|
|
* @brief Function returns DSP core reset source: global or local
|
|
*
|
|
* @param[in] core - DSP core number to return reset source
|
|
* @param[out] state - pointer to a variable to receive DSP core reset source:
|
|
* global or local
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_get_core_reset_source(uint32_t core, uint32_t *source);
|
|
|
|
|
|
/*------------ C66XX_SYS_set_core_boot_address() function ----------------*//**
|
|
* @brief Function sets DSP core boot address. After releasing DSP core from
|
|
* reset it will start execution from this memory address.
|
|
* Note that DSP core boot address should be 1024 bytes aligned
|
|
*
|
|
* @param[in] core - DSP core number to set boot address
|
|
* @param[in] addr - DSP core boot address: should be 1024 bytes aligned
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_set_core_boot_address(uint32_t core, uint32_t addr);
|
|
|
|
|
|
/*------------ C66XX_SYS_init_main_pll() function ------------------------*//**
|
|
* @brief Function inits DSP Main PLL according to supplied parameters
|
|
*
|
|
* @param[in] pll_dd - Main PLL data descriptor
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_init_main_pll(C66XX_MAIN_PLL_DD *pll_dd);
|
|
|
|
|
|
/*------------ C66XX_SYS_get_main_pll_settings() function ----------------*//**
|
|
* @brief Function returns DSP Main PLL settings
|
|
*
|
|
* @param[out] pll_dd - Pointer to a main PLL data descriptor to receive data
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_get_main_pll_settings(C66XX_MAIN_PLL_DD *pll_dd);
|
|
|
|
|
|
/*------------ C66XX_SYS_init_ddr3_pll() function ------------------------*//**
|
|
* @brief Function inits DSP DDR3 PLL according to supplied parameters
|
|
*
|
|
* @param[in] ddr3_pll_dd - DDR3 PLL data descriptor
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_init_ddr3_pll(C66XX_DDR3_PLL_DD *ddr3_pll_dd);
|
|
|
|
|
|
/*------------ C66XX_SYS_get_ddr3_pll_settings() function ----------------*//**
|
|
* @brief Function returns DSP DDR3 PLL settings
|
|
*
|
|
* @param[out] ddr3_pll_dd - Pointer to DDR3 PLL data descriptor to receive
|
|
* data
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_get_ddr3_pll_settings(C66XX_DDR3_PLL_DD *ddr3_pll_dd);
|
|
|
|
|
|
/*------------ C66XX_SYS_init_pass_pll() function ------------------------*//**
|
|
* @brief Function inits DSP PASS PLL according to supplied parameters
|
|
*
|
|
* @param[in] pass_pll_dd - PASS PLL data descriptor
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_init_pass_pll(C66XX_PASS_PLL_DD *pass_pll_dd);
|
|
|
|
|
|
/*------------ C66XX_SYS_get_pass_pll_settings() function ----------------*//**
|
|
* @brief Function returns DSP PASS PLL settings
|
|
*
|
|
* @param[out] pass_pll_dd - Pointer to PASS PLL data descriptor to receive
|
|
* data
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_get_pass_pll_settings(C66XX_PASS_PLL_DD *pass_pll_dd);
|
|
|
|
|
|
/*------------ C66XX_SYS_enable_power_domain() function ------------------*//**
|
|
* @brief Function powers up selected power domain
|
|
*
|
|
* @param[in] domain - power domain number to enable
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SYS_enable_power_domain(uint32_t domain);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
//=============================================================================
|
|
//============ DSP memory controller functions ================================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_MEM DSP memory controller functions
|
|
* @{
|
|
*/
|
|
|
|
|
|
/** DSP L1 (P or D) cache sizes */
|
|
#define C66XX_CACHE_L1_0KB CACHE_L1_0KCACHE
|
|
#define C66XX_CACHE_L1_4KB CACHE_L1_4KCACHE
|
|
#define C66XX_CACHE_L1_8KB CACHE_L1_8KCACHE
|
|
#define C66XX_CACHE_L1_16KB CACHE_L1_16KCACHE
|
|
#define C66XX_CACHE_L1_32KB CACHE_L1_32KCACHE
|
|
#define C66XX_CACHE_L1_MAX_SIZE CACHE_L1_MAXIM3
|
|
|
|
|
|
/** DSP L2 cache sizes */
|
|
#define C66XX_CACHE_L2_0KB CACHE_0KCACHE
|
|
#define C66XX_CACHE_L2_32KB CACHE_32KCACHE
|
|
#define C66XX_CACHE_L2_64KB CACHE_64KCACHE
|
|
#define C66XX_CACHE_L2_128KB CACHE_128KCACHE
|
|
#define C66XX_CACHE_L2_256KB CACHE_256KCACHE
|
|
#define C66XX_CACHE_L2_512KB CACHE_512KCACHE
|
|
#define C66XX_CACHE_L2_MAX_SIZE C66XX_CACHE_L2_512KB
|
|
|
|
|
|
/** DDR3 controller initialization data descriptor (contains parameters which are used to init DDR3 controller) */
|
|
typedef struct
|
|
{
|
|
EMIF4F_TIMING1_CONFIG timing1_config; /**< DDR3 controller Timing 1 configuration */
|
|
EMIF4F_TIMING2_CONFIG timing2_config; /**< DDR3 controller Timing 2 configuration */
|
|
EMIF4F_TIMING3_CONFIG timing3_config; /**< DDR3 controller Timing 3 configuration */
|
|
EMIF4F_SDRAM_CONFIG sdram_config; /**< DDR3 controller SDRAM configuration */
|
|
} C66XX_DDR3_EMIF_DD;
|
|
|
|
// DDR3 controller initialization data descriptor length in bytes
|
|
#define C66XX_DDR3_EMIF_DD_LEN sizeof(C66XX_DDR3_EMIF_DD)
|
|
|
|
|
|
/** DDR3 controller physical interface (PHY) data descriptor (contains parameters which are used to perform leveling) */
|
|
// All these values should be obtained from DDR3 PHY Calc spreadsheet (sprabl2) provided by TI
|
|
typedef struct
|
|
{
|
|
uint32_t data0_wrlvl_init_ratio; /**< DDR3 byte lane 7 write leveling initialization ratio */
|
|
uint32_t data1_wrlvl_init_ratio; /**< DDR3 byte lane 6 write leveling initialization ratio */
|
|
uint32_t data2_wrlvl_init_ratio; /**< DDR3 byte lane 5 write leveling initialization ratio */
|
|
uint32_t data3_wrlvl_init_ratio; /**< DDR3 byte lane 4 write leveling initialization ratio */
|
|
uint32_t data4_wrlvl_init_ratio; /**< DDR3 byte lane 3 write leveling initialization ratio */
|
|
uint32_t data5_wrlvl_init_ratio; /**< DDR3 byte lane 2 write leveling initialization ratio */
|
|
uint32_t data6_wrlvl_init_ratio; /**< DDR3 byte lane 1 write leveling initialization ratio */
|
|
uint32_t data7_wrlvl_init_ratio; /**< DDR3 byte lane 0 write leveling initialization ratio */
|
|
uint32_t data8_wrlvl_init_ratio; /**< DDR3 ECC byte lane write leveling initialization ratio */
|
|
uint32_t data0_gatelvl_init_ratio; /**< DDR3 byte lane 7 gate leveling initialization ratio */
|
|
uint32_t data1_gatelvl_init_ratio; /**< DDR3 byte lane 6 gate leveling initialization ratio */
|
|
uint32_t data2_gatelvl_init_ratio; /**< DDR3 byte lane 5 gate leveling initialization ratio */
|
|
uint32_t data3_gatelvl_init_ratio; /**< DDR3 byte lane 4 gate leveling initialization ratio */
|
|
uint32_t data4_gatelvl_init_ratio; /**< DDR3 byte lane 3 gate leveling initialization ratio */
|
|
uint32_t data5_gatelvl_init_ratio; /**< DDR3 byte lane 2 gate leveling initialization ratio */
|
|
uint32_t data6_gatelvl_init_ratio; /**< DDR3 byte lane 1 gate leveling initialization ratio */
|
|
uint32_t data7_gatelvl_init_ratio; /**< DDR3 byte lane 0 gate leveling initialization ratio */
|
|
uint32_t data8_gatelvl_init_ratio; /**< DDR3 ECC byte lane gate leveling initialization ratio */
|
|
uint32_t ddr3_config_reg_12_bitmask; /**< DDR3 configuration 12 register bitmask for INVERT_CLK_OUT field */
|
|
} C66XX_DDR3_PHY_DD;
|
|
|
|
// DDR3 controller initialization data descriptor length in bytes
|
|
#define C66XX_DDR3_PHY_DD_LEN sizeof(C66XX_DDR3_PHY_DD)
|
|
|
|
|
|
/*------------ C66XX_MEM_set_L1P_cache_size() function -------------------*//**
|
|
* @brief Function sets DSP L1P cache to the new size
|
|
*
|
|
* @param[in] new_size - new size of DSP L1P cache
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_MEM_set_L1P_cache_size(uint32_t new_size);
|
|
|
|
|
|
/*------------ C66XX_MEM_get_L1P_cache_size() function -------------------*//**
|
|
* @brief Function returns DSP L1P cache size
|
|
*
|
|
* @return DSP L1P cache size
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_MEM_get_L1P_cache_size() CACHE_getL1PSize()
|
|
|
|
|
|
/*------------ C66XX_MEM_set_L1D_cache_size() function -------------------*//**
|
|
* @brief Function sets DSP L1D cache to the new size
|
|
*
|
|
* @param[in] new_size - new size of DSP L1D cache
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_MEM_set_L1D_cache_size(uint32_t new_size);
|
|
|
|
|
|
/*------------ C66XX_MEM_get_L1D_cache_size() function -------------------*//**
|
|
* @brief Function returns DSP L1D cache size
|
|
*
|
|
* @return DSP L1D cache size
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_MEM_get_L1D_cache_size() CACHE_getL1DSize()
|
|
|
|
|
|
/*------------ C66XX_MEM_set_L2_cache_size() function --------------------*//**
|
|
* @brief Function sets DSP L2 cache to the new size
|
|
*
|
|
* @param[in] new_size - new size of DSP L2 cache
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_MEM_set_L2_cache_size(uint32_t new_size);
|
|
|
|
|
|
/*------------ C66XX_MEM_get_L2_cache_size() function --------------------*//**
|
|
* @brief Function returns DSP L2 cache size
|
|
*
|
|
* @return DSP L2 cache size
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_MEM_get_L2_cache_size() CACHE_getL2Size()
|
|
|
|
|
|
/*------------ C66XX_MEM_set_memory_region_cache_config() function -------*//**
|
|
* @brief Function enables or disables DSP caching for specified memory region
|
|
*
|
|
* @param[in] mar - MAR register number from 0 to 255 (note that the first 12
|
|
* memory regions are read-only)
|
|
* @param[in] cacheable - cache mode to set: ON - enable caching,
|
|
* OFF - disable caching
|
|
* @param[in] prefetchable - DSP XMC controller prefetch mode to set:
|
|
* ON - enable prefetch support, OFF - disable prefetch support
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_MEM_set_memory_region_cache_config(mar, cacheable, prefetchable) CACHE_setMemRegionInfo(mar, cacheable, prefetchable)
|
|
|
|
|
|
/*------------ C66XX_MEM_get_memory_region_cache_config() function -------*//**
|
|
* @brief Function returns DSP cache configuration for specified memory region
|
|
*
|
|
* @param[in] mar - MAR register number from 0 to 255 (note that the first 12
|
|
* memory regions are read-only)
|
|
* @param[in] cacheable - pointer to a variable to receive current cache mode:
|
|
* ON - caching is enabled, OFF - caching is disabled
|
|
* @param[in] prefetchable - pointer to a variable to receive current DSP XMC
|
|
* controller prefetch mode: ON - prefetch support is enabled,
|
|
* OFF - prefetch support is disabled
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_MEM_get_memory_region_cache_config(mar, cacheable, prefetchable) CACHE_getMemRegionInfo(mar, cacheable, prefetchable)
|
|
|
|
|
|
/*------------ C66XX_MEM_init_xmc_mpax_segment() function ----------------*//**
|
|
* @brief Function configures XMC MPAX segment according to supplied
|
|
* parameters
|
|
*
|
|
* @param[in] index - MPAX segment index from 0 to 15 (note that the first 2
|
|
* segments are already configured by default)
|
|
* @param[in] baddr - upper 20 bit of base 32-bit address to remap
|
|
* @param[in] size - encoded segment size
|
|
* @param[in] raddr - upper 24 bit of replacement 36-bit address
|
|
* @param[in] perm - access types allowed in this segment
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_MEM_init_xmc_mpax_segment(uint32_t index, uint32_t baddr, uint32_t size, uint32_t raddr, uint32_t perm);
|
|
|
|
|
|
/*------------ C66XX_MEM_convert_local_to_global_address() function ------*//**
|
|
* @brief Function converts local DSP core address to global address
|
|
*
|
|
* @param[in] addr - local DSP core address to be converted
|
|
*
|
|
* @return Global address
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_MEM_convert_local_to_global_address(uint32_t addr);
|
|
|
|
|
|
/*------------ C66XX_MEM_init_ddr3() function --------------------------------*//**
|
|
* @brief Function inits DDR3 controller according to supplied parameters
|
|
*
|
|
* @param[in] ddr3_emif_dd - DDR3 controller initialization data descriptor
|
|
* @param[in] ddr3_phy_dd - DDR3 PHY controller initialization data descriptor
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_MEM_init_ddr3(C66XX_DDR3_EMIF_DD *ddr3_emif_dd, C66XX_DDR3_PHY_DD *ddr3_phy_dd);
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ Timer TSC functions ============================================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_TSC DSP 64-bit Time Stamp Counter (TSC) functions
|
|
* @{
|
|
*/
|
|
|
|
/*------------ C66XX_TSC_get_current_value() function --------------------*//**
|
|
* @brief Function returns DSP TSC current value
|
|
*
|
|
* @return 64-bit Time Stamp Counter value
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint64_t C66XX_TSC_get_current_value(void);
|
|
|
|
|
|
/*------------ C66XX_TSC_get_duration_s() function -----------------------*//**
|
|
* @brief Function returns time duration in seconds from Time Stamp Counter
|
|
* start value
|
|
*
|
|
* @param[in] start - 64-bit Time Stamp Counter value
|
|
*
|
|
* @return Time duration in seconds
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
double C66XX_TSC_get_duration_s(uint64_t start);
|
|
|
|
|
|
/*------------ C66XX_TSC_set_delay_us() function -------------------------*//**
|
|
* @brief Function is used to delay the execution for selected number of
|
|
* microseconds
|
|
*
|
|
* @param[in] us - Number of microseconds to delay
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_TSC_set_delay_us(uint32_t us);
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ C66xx interrupt controller functions ===========================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_INT C66xx interrupt controller functions
|
|
* @{
|
|
*/
|
|
|
|
|
|
/** DSP interrupt vector IDs */
|
|
#define C66XX_DSP_VECTID_NMI CSL_INTC_VECTID_NMI
|
|
#define C66XX_DSP_VECTID_4 CSL_INTC_VECTID_4
|
|
#define C66XX_DSP_VECTID_5 CSL_INTC_VECTID_5
|
|
#define C66XX_DSP_VECTID_6 CSL_INTC_VECTID_6
|
|
#define C66XX_DSP_VECTID_7 CSL_INTC_VECTID_7
|
|
#define C66XX_DSP_VECTID_8 CSL_INTC_VECTID_8
|
|
#define C66XX_DSP_VECTID_9 CSL_INTC_VECTID_9
|
|
#define C66XX_DSP_VECTID_10 CSL_INTC_VECTID_10
|
|
#define C66XX_DSP_VECTID_11 CSL_INTC_VECTID_11
|
|
#define C66XX_DSP_VECTID_12 CSL_INTC_VECTID_12
|
|
#define C66XX_DSP_VECTID_13 CSL_INTC_VECTID_13
|
|
#define C66XX_DSP_VECTID_14 CSL_INTC_VECTID_14
|
|
#define C66XX_DSP_VECTID_15 CSL_INTC_VECTID_15
|
|
#define C66XX_DSP_VECTID_COMBINE CSL_INTC_VECTID_COMBINE
|
|
#define C66XX_DSP_VECTID_EXCEP CSL_INTC_VECTID_EXCEP
|
|
|
|
|
|
/*------------ C66XX_INT_init_core() function ----------------------------*//**
|
|
* @brief Function initializes C66x CorePac interrupt controller (INTC) using
|
|
* CSL library.
|
|
*
|
|
* If SYS/BIOS RTOS is used, then it's recommended to use the relevant
|
|
* SYS/BIOS interrupt API (HWI, EventCombiner and CpIntc), as there will be
|
|
* conflicts since both CSL and SYS/BIOS will use their own Interrupt Service
|
|
* Table Pointer (ISTP).
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_INT_init_core(void);
|
|
|
|
|
|
/*------------ C66XX_INT_map_core_event_handler() function ---------------*//**
|
|
* @brief Function maps DSP interrupt vector to INTC input event ID, plugs
|
|
* the specified function as DSP interrupt handler function, and enables DSP
|
|
* interrupt
|
|
*
|
|
* @param[in] dsp_vector_id - DSP interrupt vector
|
|
* @param[in] input_event_id - INTC input event ID
|
|
* @param[in] handler - pointer to DSP interrupt handler function
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_INT_map_core_event_handler(uint32_t dsp_vector_id, uint32_t input_event_id, CSL_IntcEventHandler handler);
|
|
|
|
|
|
/*------------ C66XX_INT_unmap_core_event_handler() function -------------*//**
|
|
* @brief Function unmaps DSP interrupt vector and disables the corresponding
|
|
* DSP interrupt.
|
|
*
|
|
* @param[in] dsp_vector_id - DSP interrupt vector
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_INT_unmap_core_event_handler(uint32_t dsp_vector_id);
|
|
|
|
|
|
/*------------ C66XX_INT_set_core_dsp_interrupt_handler() function -------*//**
|
|
* @brief Function sets the specified function as a direct handler for DSP
|
|
* interrupt vector ID.
|
|
*
|
|
* This handler function will be branched to from DSP interrupt vector table
|
|
* for specified DSP interrupt vector ID, so either it should be declared in C
|
|
* with "interrupt" keyword or manually save and restore interrupt context and
|
|
* return with "B IRP" assembler instruction.
|
|
* The specified DSP interrupt will be enabled too.
|
|
*
|
|
* @param[in] dsp_vector_id - DSP interrupt vector
|
|
* @param[in] isr_handler - direct handler function for DSP interrupt vector
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_INT_set_core_dsp_interrupt_handler(uint32_t dsp_vector_id, void *isr_handler);
|
|
|
|
|
|
/** Chip interrupt controllers defs */
|
|
#define C66XX_CPINTC_ID_0 0
|
|
#define C66XX_CPINTC_ID_1 1
|
|
#define C66XX_CPINTC_ID_2 2
|
|
#define C66XX_CPINTC_ID_3 3
|
|
|
|
|
|
/*------------ C66XX_INT_init_chip() function ----------------------------*//**
|
|
* @brief Function initializes the specified chip interrupt controller
|
|
* (CPINTC or CIC) and returns a handle which should be used in all subsequent
|
|
* CPINTC function calls.
|
|
*
|
|
* @param[in] cpintc_id - chip interrupt controller number to initialize (0-3)
|
|
*
|
|
* @return Handle to the CPINTC instance: >0 - OK,
|
|
* 0 - error is occurred
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_INT_init_chip(uint32_t cpintc_id);
|
|
|
|
|
|
/*------------ C66XX_INT_map_chip_system_to_host_event() function --------*//**
|
|
* @brief Function maps chip-level event (system event) to CPINTC output event
|
|
* (host event) end enables it.
|
|
*
|
|
* System events are those events generated by a hardware module in the system.
|
|
* These events are inputs into CPINTC.
|
|
* Host events are the output events of CPINTC, which act as event inputs to
|
|
* C66x CorePac interrupt controllers (INTC).
|
|
*
|
|
* @param[in] cpintc_handle - chip interrupt controller handle returned by
|
|
* C66XX_init_cpintc() function call;
|
|
* @param[in] system_event_id - chip-level (system) event from a hardware
|
|
* module in the system.
|
|
* @param[in] host_event_id - CPINTC output event ID
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_INT_map_chip_system_to_host_event(uint32_t cpintc_handle, uint32_t system_event_id, uint32_t host_event_id);
|
|
|
|
|
|
/*------------ C66XX_INT_enable_chip_host_event() function ---------------*//**
|
|
* @brief Function enables CPINTC output event (host event).
|
|
*
|
|
* @param[in] cpintc_handle - chip interrupt controller handle returned by
|
|
* C66XX_init_cpintc() function call;
|
|
* @param[in] host_event_id - CPINTC output event ID to enable
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_INT_enable_chip_host_event(cpintc_handle, host_event_id) CSL_CPINTC_enableHostInterrupt(cpintc_handle, host_event_id)
|
|
|
|
|
|
/*------------ C66XX_INT_disable_chip_host_event() function --------------*//**
|
|
* @brief Function disables CPINTC output event (host event).
|
|
*
|
|
* @param[in] cpintc_handle - chip interrupt controller handle returned by
|
|
* C66XX_init_cpintc() function call;
|
|
* @param[in] host_event_id - CPINTC output event ID to disable
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_INT_disable_chip_host_event(cpintc_handle, host_event_id) CSL_CPINTC_disableHostInterrupt(cpintc_handle, host_event_id)
|
|
|
|
|
|
/*------------ C66XX_INT_clear_chip_system_event() function --------------*//**
|
|
* @brief Function clears CPINTC input event (system event).
|
|
*
|
|
* @param[in] cpintc_handle - chip interrupt controller handle returned by
|
|
* C66XX_init_cpintc() function call;
|
|
* @param[in] sys_event_id - CPINTC input event ID to clear
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
#define C66XX_INT_clear_chip_system_event(cpintc_handle, sys_event_id) CSL_CPINTC_clearSysInterrupt(cpintc_handle, sys_event_id)
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ General purpose I/O (GPIO) functions ===========================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_GPIO DSP GPIO functions
|
|
* @{
|
|
*/
|
|
|
|
/** GPIO pins number defs */
|
|
enum C66XX_GPIO_PINS
|
|
{
|
|
C66XX_GPIO_PIN_0 = 0,
|
|
C66XX_GPIO_PIN_1,
|
|
C66XX_GPIO_PIN_2,
|
|
C66XX_GPIO_PIN_3,
|
|
C66XX_GPIO_PIN_4,
|
|
C66XX_GPIO_PIN_5,
|
|
C66XX_GPIO_PIN_6,
|
|
C66XX_GPIO_PIN_7,
|
|
C66XX_GPIO_PIN_8,
|
|
C66XX_GPIO_PIN_9,
|
|
C66XX_GPIO_PIN_10,
|
|
C66XX_GPIO_PIN_11,
|
|
C66XX_GPIO_PIN_12,
|
|
C66XX_GPIO_PIN_13,
|
|
C66XX_GPIO_PIN_14,
|
|
C66XX_GPIO_PIN_15
|
|
};
|
|
|
|
/** GPIO pins bitmask defs */
|
|
enum C66XX_GPIO_PIN_BITMASKS
|
|
{
|
|
C66XX_GPIO_PIN_0_BITMASK = 0x0001,
|
|
C66XX_GPIO_PIN_1_BITMASK = 0x0002,
|
|
C66XX_GPIO_PIN_2_BITMASK = 0x0004,
|
|
C66XX_GPIO_PIN_3_BITMASK = 0x0008,
|
|
C66XX_GPIO_PIN_4_BITMASK = 0x0010,
|
|
C66XX_GPIO_PIN_5_BITMASK = 0x0020,
|
|
C66XX_GPIO_PIN_6_BITMASK = 0x0040,
|
|
C66XX_GPIO_PIN_7_BITMASK = 0x0080,
|
|
C66XX_GPIO_PIN_8_BITMASK = 0x0100,
|
|
C66XX_GPIO_PIN_9_BITMASK = 0x0200,
|
|
C66XX_GPIO_PIN_10_BITMASK = 0x0400,
|
|
C66XX_GPIO_PIN_11_BITMASK = 0x0800,
|
|
C66XX_GPIO_PIN_12_BITMASK = 0x1000,
|
|
C66XX_GPIO_PIN_13_BITMASK = 0x2000,
|
|
C66XX_GPIO_PIN_14_BITMASK = 0x4000,
|
|
C66XX_GPIO_PIN_15_BITMASK = 0x8000
|
|
};
|
|
|
|
|
|
/** GPIO bank number for CSL utilities */
|
|
#define C66XX_GPIO_BANK_NUMBER 0
|
|
/** GPIO data definitions */
|
|
#define C66XX_GPIO_DATA_OFF 0
|
|
#define C66XX_GPIO_DATA_ON 1
|
|
/** GPIO direction definitions */
|
|
#define C66XX_GPIO_DIR_OUT 0
|
|
#define C66XX_GPIO_DIR_IN 1
|
|
/** GPIO pin edge defs */
|
|
#define C66XX_GPIO_PIN_EDGE_RISING 0
|
|
#define C66XX_GPIO_PIN_EDGE_FALLING 1
|
|
#define C66XX_GPIO_PIN_EDGE_ANY 2
|
|
/** GPIO pins bitmask definitions */
|
|
#define C66XX_GPIO_DATA_BITMASK 0x0000ffff
|
|
|
|
|
|
/*------------ C66XX_GPIO_init() function --------------------------------*//**
|
|
* @brief Function inits the GPIO peripheral: all pins are configured as
|
|
* inputs, interrupts are disabled
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_GPIO_init(void);
|
|
|
|
|
|
/*------------ C66XX_GPIO_set_pin_direction() function -------------------*//**
|
|
* @brief Function configures the specified GPIO pin direction
|
|
*
|
|
* @param[in] pin_number - GPIO pin number to configure
|
|
* @param[in] direction - GPIO direction definition
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_set_pin_direction(uint32_t pin_number, uint32_t direction);
|
|
|
|
|
|
/*------------ C66XX_GPIO_get_pin_direction() function -------------------*//**
|
|
* @brief Function returns the specified GPIO pin direction
|
|
*
|
|
* @param[in] pin_number - GPIO pin number to get direction
|
|
*
|
|
* @return GPIO direction definition
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_GPIO_get_pin_direction(uint32_t pin_number);
|
|
|
|
|
|
/*------------ C66XX_GPIO_set_pin_data() function ------------------------*//**
|
|
* @brief Function sets the specified GPIO pin state to data
|
|
*
|
|
* @param[in] pin_number - GPIO pin number to configure
|
|
* @param[in] data - GPIO pin state: ON or OFF
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_set_pin_data(uint32_t pin_number, uint32_t data);
|
|
|
|
|
|
/*------------ C66XX_GPIO_get_pin_data() function ------------------------*//**
|
|
* @brief Function returns the specified GPIO pin state
|
|
*
|
|
* @param[in] pin_number - GPIO pin number to get pin state
|
|
*
|
|
* @return GPIO pin state: ON or OFF
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_GPIO_get_pin_data(uint32_t pin_number);
|
|
|
|
|
|
/*------------ C66XX_GPIO_set_direction() function -----------------------*//**
|
|
* @brief Function configures the specified GPIO pins direction
|
|
*
|
|
* @param[in] pin_bitmask - GPIO pins (ORed) bitmask to configure
|
|
* @param[in] direction - GPIO direction definition
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_set_direction(uint32_t pin_bitmask, uint32_t direction);
|
|
|
|
|
|
/*------------ C66XX_GPIO_get_direction() function -----------------------*//**
|
|
* @brief Function returns the specified GPIO pins direction
|
|
*
|
|
* @param[in] pin_bitmask - GPIO pins (ORed) bitmask to get pins direction
|
|
*
|
|
* @return Specified GPIO pins direction
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_GPIO_get_direction(uint32_t pin_bitmask);
|
|
|
|
|
|
/*------------ C66XX_GPIO_set_data() function ----------------------------*//**
|
|
* @brief Function sets the specified GPIO pins state to data
|
|
*
|
|
* @param[in] pin_bitmask - GPIO pins (ORed) bitmask to configure
|
|
* @param[in] data - GPIO pins state: ON or OFF
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_set_data(uint32_t pin_bitmask, uint32_t data);
|
|
|
|
|
|
/*------------ C66XX_GPIO_get_data() function ----------------------------*//**
|
|
* @brief Function returns the specified GPIO pins state
|
|
*
|
|
* @param[in] pin_bitmask - GPIO pins (ORed) bitmask to get pins state
|
|
*
|
|
* @return Specified GPIO pins state
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_GPIO_get_data(uint32_t pin_bitmask);
|
|
|
|
|
|
/*------------ C66XX_GPIO_enable_interrupts() function -------------------*//**
|
|
* @brief Function enables GPIO peripheral interrupts
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_enable_interrupts(void);
|
|
|
|
|
|
/*------------ C66XX_GPIO_disable_interrupts() function ------------------*//**
|
|
* @brief Function disables GPIO peripheral interrupts
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_disable_interrupts(void);
|
|
|
|
|
|
/*------------ C66XX_GPIO_enable_edge_interrupt() function ---------------*//**
|
|
* @brief Function enables the specified GPIO pin edge interrupt
|
|
*
|
|
* @param[in] pin - GPIO pin number to configure
|
|
* @param[in] edge - GPIO pin edge which triggers GPIO interrupt
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_enable_edge_interrupt(uint32_t pin, uint32_t edge);
|
|
|
|
|
|
/*------------ C66XX_GPIO_disable_edge_interrupt() function --------------*//**
|
|
* @brief Function disables the specified GPIO pin edge interrupt
|
|
*
|
|
* @param[in] pin - GPIO pin number to configure
|
|
* @param[in] edge - GPIO pin edge which shouldn't trigger GPIO interrupt
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_GPIO_disable_edge_interrupt(uint32_t pin, uint32_t edge);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ Timer module functions =========================================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_TIMER DSP 64-bit Timer module functions
|
|
* @{
|
|
*/
|
|
|
|
|
|
/** DSP 64-bit Timer module number defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_0 = 0,
|
|
C66XX_TIMER_1,
|
|
C66XX_TIMER_2,
|
|
C66XX_TIMER_3,
|
|
C66XX_TIMER_4,
|
|
C66XX_TIMER_5,
|
|
C66XX_TIMER_6,
|
|
C66XX_TIMER_7,
|
|
C66XX_TIMER_8,
|
|
C66XX_TIMER_9,
|
|
C66XX_TIMER_10,
|
|
C66XX_TIMER_11,
|
|
C66XX_TIMER_12,
|
|
C66XX_TIMER_13,
|
|
C66XX_TIMER_14,
|
|
C66XX_TIMER_15
|
|
} C66XX_TIMER;
|
|
|
|
|
|
/** DSP 64-bit Timer mode defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_MODE_64BIT_GPT = 0,
|
|
C66XX_TIMER_MODE_32BIT_UNCHAINED,
|
|
C66XX_TIMER_MODE_64BIT_WDT,
|
|
C66XX_TIMER_MODE_32BIT_CHAINED
|
|
} C66XX_TIMER_MODE;
|
|
|
|
|
|
/** DSP 64-bit Timer hardware configuration defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_HW_CFG_64BIT = 0,
|
|
C66XX_TIMER_HW_CFG_32BIT_LOW,
|
|
C66XX_TIMER_HW_CFG_32BIT_HIGH
|
|
} C66XX_TIMER_HW_CFG;
|
|
|
|
|
|
/** DSP 64-bit Timer count mode defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_COUNT_MODE_DISABLED = 0,
|
|
C66XX_TIMER_COUNT_MODE_ONE_SHOT,
|
|
C66XX_TIMER_COUNT_MODE_CONTINUOUSLY,
|
|
C66XX_TIMER_COUNT_MODE_CONTINUOUSLY_RELOAD
|
|
} C66XX_TIMER_COUNT_MODE;
|
|
|
|
|
|
/** DSP timer input enable defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_CLK_INPUT_DISABLED = 0,
|
|
C66XX_TIMER_CLK_INPUT_ENABLED
|
|
} C66XX_TIMER_CLK_INPUT;
|
|
|
|
|
|
/** DSP timer input inverter control defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_CLK_INPUT_INVERTER_DISABLED = 0,
|
|
C66XX_TIMER_CLK_INPUT_INVERTER_ENABLED
|
|
} C66XX_TIMER_CLK_INPUT_INVERTER;
|
|
|
|
|
|
/** DSP timer clock source defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_CLK_SRC_INTERNAL = 0,
|
|
C66XX_TIMER_CLK_SRC_EXTERNAL
|
|
} C66XX_TIMER_CLK_SRC;
|
|
|
|
|
|
/** DSP timer clock/pulse mode for timer output defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_CLK_OUTPUT_MODE_PULSE = 0,
|
|
C66XX_TIMER_CLK_OUTPUT_MODE_CLK
|
|
} C66XX_TIMER_CLK_OUTPUT_MODE;
|
|
|
|
|
|
/** DSP timer pulse width used in pulse mode for timer output defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_CLK_OUTPUT_PULSE_WIDTH_1CLK = 0,
|
|
C66XX_TIMER_CLK_OUTPUT_PULSE_WIDTH_2CLK,
|
|
C66XX_TIMER_CLK_OUTPUT_PULSE_WIDTH_3CLK,
|
|
C66XX_TIMER_CLK_OUTPUT_PULSE_WIDTH_4CLK
|
|
} C66XX_TIMER_CLK_OUTPUT_PULSE_WIDTH;
|
|
|
|
|
|
/** DSP timer output inverter control defs */
|
|
typedef enum
|
|
{
|
|
C66XX_TIMER_CLK_OUTPUT_INVERTER_DISABLED = 0,
|
|
C66XX_TIMER_CLK_OUTPUT_INVERTER_ENABLED
|
|
} C66XX_TIMER_CLK_OUTPUT_INVERTER;
|
|
|
|
|
|
/** DSP 32-bit Timer configuration data descriptor */
|
|
typedef struct
|
|
{
|
|
C66XX_TIMER_CLK_SRC clk_src; /**< Clock source for 32-bit timer */
|
|
C66XX_TIMER_CLK_INPUT clk_input_enabled; /**< Timer clock is gated by the timer input for 32-bit timer */
|
|
C66XX_TIMER_CLK_INPUT_INVERTER clk_input_inverter_enabled; /**< An inverted timer input drives the 32-bit timer */
|
|
C66XX_TIMER_CLK_OUTPUT_MODE clk_src_output_mode; /**< Clock output mode for 32-bit timer */
|
|
C66XX_TIMER_CLK_OUTPUT_PULSE_WIDTH clk_src_output_pulse_width; /**< Clock output pulse width used in pulse mode for 32-bit timer */
|
|
C66XX_TIMER_CLK_OUTPUT_INVERTER clk_output_inverter_enabled; /**< 32-bit timer output is inverted */
|
|
} C66XX_TIMER_32BIT_CFG_DD;
|
|
|
|
|
|
/** DSP 64-bit Timer module configuration data descriptor */
|
|
typedef struct
|
|
{
|
|
C66XX_TIMER_MODE timer_mode; /**< Timer mode: 64-bit GPT, 64-bit WDT, dual 32-bit unchained or chained */
|
|
C66XX_TIMER_32BIT_CFG_DD timer_high; /**< Configuration data descriptor for 32-bit HIGH timer */
|
|
C66XX_TIMER_32BIT_CFG_DD timer_low; /**< Configuration data descriptor for 32-bit LOW timer */
|
|
} C66XX_TIMER_CFG_DD;
|
|
|
|
// DSP 64-bit Timer module configuration data descriptor length in bytes
|
|
#define C66XX_TIMER_CFG_DD_LEN sizeof(C66XX_TIMER_CFG_DD)
|
|
|
|
|
|
/*------------ C66XX_TIMER_init() function -------------------------------*//**
|
|
* @brief Function configures selected DSP 64-bit timer module
|
|
*
|
|
* @param[in] timer_number - DSP 64-bit timer module number
|
|
* @param[in] frequency - DSP timer output frequency in Hz
|
|
* @param[in] cfg_dd - pointer to filled DSP 64-bit timer module configuration
|
|
* data descriptor
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_TIMER_init(C66XX_TIMER timer_number, uint32_t frequency, C66XX_TIMER_CFG_DD *cfg_dd);
|
|
|
|
|
|
/*------------ C66XX_TIMER_start() function ------------------------------*//**
|
|
* @brief Function starts selected DSP timer
|
|
*
|
|
* @param[in] timer_number - DSP 64-bit timer module number
|
|
* @param[in] timer_to_start - hardware timer to start (64BIT/32BIT_LOW/
|
|
* 32BIT_HIGH)
|
|
* @param[in] count_mode - DSP timer counting mode (DISABLED/ONE_SHOT/
|
|
* CONTINUOUSLY/CONTINUOUSLY_RELOAD)
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_TIMER_start(C66XX_TIMER timer_number, C66XX_TIMER_HW_CFG timer_to_start, C66XX_TIMER_COUNT_MODE count_mode);
|
|
|
|
|
|
/*------------ C66XX_TIMER_stop() function -------------------------------*//**
|
|
* @brief Function stops selected DSP timer
|
|
*
|
|
* @param[in] timer_number - DSP 64-bit timer module number
|
|
* @param[in] timer_to_stop - hardware timer to stop (64BIT/32BIT_LOW/
|
|
* 32BIT_HIGH)
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_TIMER_stop(C66XX_TIMER timer_number, C66XX_TIMER_HW_CFG timer_to_stop);
|
|
|
|
|
|
/*------------ C66XX_TIMER_reset() function ------------------------------*//**
|
|
* @brief Function resets selected DSP timer
|
|
*
|
|
* @param[in] timer_number - DSP 64-bit timer module number
|
|
* @param[in] timer_to_reset - hardware timer to reset (64BIT/32BIT_LOW/
|
|
* 32BIT_HIGH)
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_TIMER_reset(C66XX_TIMER timer_number, C66XX_TIMER_HW_CFG timer_to_reset);
|
|
|
|
|
|
/*------------ C66XX_TIMER_enable_interrupts() function ------------------*//**
|
|
* @brief Function enables interrupts from selected DSP timer
|
|
*
|
|
* @param[in] timer_number - DSP 64-bit timer module number
|
|
* @param[in] timer_to_enable - hardware timer to enable interrupts from
|
|
* (64BIT/32BIT_LOW/32BIT_HIGH)
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_TIMER_enable_interrupts(C66XX_TIMER timer_number, C66XX_TIMER_HW_CFG timer_to_enable);
|
|
|
|
|
|
/*------------ C66XX_TIMER_disable_interrupts() function ------------------*//**
|
|
* @brief Function disables interrupts from selected DSP timer
|
|
*
|
|
* @param[in] timer_number - DSP 64-bit timer module number
|
|
* @param[in] timer_to_disable - hardware timer to disable interrupts from
|
|
* (64BIT/32BIT_LOW/32BIT_HIGH)
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_TIMER_disable_interrupts(C66XX_TIMER timer_number, C66XX_TIMER_HW_CFG timer_to_disable);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ UART functions =================================================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_UART DSP UART functions
|
|
* @{
|
|
*/
|
|
|
|
// UART baud rate defs (max 128 kBauds)
|
|
#define C66XX_UART_BAUD_RATE_2400 2400 /**< UART baud rate 2400 bps */
|
|
#define C66XX_UART_BAUD_RATE_4800 4800 /**< UART baud rate 4800 bps */
|
|
#define C66XX_UART_BAUD_RATE_9600 9600 /**< UART baud rate 9600 bps */
|
|
#define C66XX_UART_BAUD_RATE_19200 19200 /**< UART baud rate 19200 bps */
|
|
#define C66XX_UART_BAUD_RATE_38400 38400 /**< UART baud rate 38400 bps */
|
|
#define C66XX_UART_BAUD_RATE_57600 57600 /**< UART baud rate 57600 bps */
|
|
#define C66XX_UART_BAUD_RATE_115200 115200 /**< UART baud rate 115200 bps */
|
|
|
|
// UART data bits defs
|
|
#define C66XX_UART_DATA_BITS_5BITS 5 /**< UART 5-bits data words */
|
|
#define C66XX_UART_DATA_BITS_6BITS 6 /**< UART 6-bits data words */
|
|
#define C66XX_UART_DATA_BITS_7BITS 7 /**< UART 7-bits data words */
|
|
#define C66XX_UART_DATA_BITS_8BITS 8 /**< UART 8-bits data words */
|
|
|
|
// UART parity parameter defs
|
|
#define C66XX_UART_PARITY_NONE 0 /**< no parity */
|
|
#define C66XX_UART_PARITY_EVEN 1 /**< even parity */
|
|
#define C66XX_UART_PARITY_ODD 2 /**< odd parity */
|
|
|
|
// UART stop bits defs
|
|
#define C66XX_UART_STOP_BITS_1BIT 0 /**< one stop bit */
|
|
#define C66XX_UART_STOP_BITS_1_5BITS 1 /**< one and a half stop bits */
|
|
#define C66XX_UART_STOP_BITS_2BITS 2 /**< two stop bits */
|
|
|
|
// UART key defs
|
|
#define C66XX_UART_KEY_BEEP 0x7 /**< BELL value in HEX */
|
|
#define C66XX_UART_KEY_ESC 0x1b /**< ESC value in HEX */
|
|
#define C66XX_UART_KEY_CR 0xd /**< Carriage Return value in HEX */
|
|
#define C66XX_UART_KEY_BS 0x8 /**< Back space value in HEX */
|
|
#define C66XX_UART_LINE_LEN_MAX 80 /**< Maximum available received line length */
|
|
|
|
|
|
|
|
/*------------ C66XX_UART_init() function --------------------------------*//**
|
|
* @brief Function inits the UART peripheral
|
|
*
|
|
* @param[in] core_clk - DSP core clock frequency in MHz;
|
|
* @param[in] baud_rate - desired baud rate;
|
|
* @param[in] data_bits - number of data bits;
|
|
* @param[in] parity - parity bit;
|
|
* @param[in] stop_bits - number of stop bits;
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_UART_init(uint32_t core_clk, uint32_t baud_rate, uint32_t data_bits, uint32_t parity, uint32_t stop_bits);
|
|
|
|
|
|
/*------------ C66XX_UART_receiver_is_ready() function -------------------*//**
|
|
* @brief Function checks if a character is received over UART
|
|
*
|
|
* @return 1 - a character is received over UART,
|
|
* 0 - otherwise
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_UART_receiver_is_ready(void);
|
|
|
|
|
|
/*------------ C66XX_UART_receive_char() function ------------------------*//**
|
|
* @brief Function receives a character over UART
|
|
*
|
|
* @return Received character
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint8_t C66XX_UART_receive_char(void);
|
|
|
|
|
|
/*------------ C66XX_UART_transmit_char() function -----------------------*//**
|
|
* @brief Function transmits a character over UART
|
|
*
|
|
* @param[in] c - A character to transmit
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_UART_transmit_char(uint8_t c);
|
|
|
|
|
|
/*------------ C66XX_UART_transmit_string() function ---------------------*//**
|
|
* @brief Function transmits a string until '0' character
|
|
*
|
|
* @param[in] s - A pointer to the string to transmit
|
|
*
|
|
* @return None
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
void C66XX_UART_transmit_string(char *s);
|
|
|
|
|
|
/*------------ C66XX_UART_receive_line_string() function -----------------*//**
|
|
* @brief Function receives a line ended with CR character, and stores
|
|
* received characters into string with '\0' symbol.
|
|
*
|
|
* Note that maximum received line length should not exceed
|
|
* C66XX_UART_LINE_LEN_MAX value!
|
|
*
|
|
* @param[in] s - Pointer to a string to store received characters
|
|
*
|
|
* @return Number of received characters without '\0' symbol.
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint32_t C66XX_UART_receive_line_string(char *s);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ I2C functions ==================================================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_I2C DSP I2C functions
|
|
* @{
|
|
*/
|
|
|
|
|
|
// I2C interrupt codes
|
|
#define C66XX_I2C_INTCODE_NONE 0 /**< No interrupt */
|
|
#define C66XX_I2C_INTCODE_AL 1 /**< Arbitration-lost interrupt */
|
|
#define C66XX_I2C_INTCODE_NACK 2 /**< No-acknowledge interrupt */
|
|
#define C66XX_I2C_INTCODE_ARDY 3 /**< Register-access-ready interrupt */
|
|
#define C66XX_I2C_INTCODE_ICRRDY 4 /**< Receive-data-ready interrupt */
|
|
#define C66XX_I2C_INTCODE_ICXRDY 5 /**< Transmit-data-ready interrupt */
|
|
#define C66XX_I2C_INTCODE_SCD 6 /**< Stop-condition-detected interrupt */
|
|
#define C66XX_I2C_INTCODE_AAS 7 /**< Address-as-slave interrupt */
|
|
|
|
|
|
/*------------ C66XX_I2C_init() function ---------------------------------*//**
|
|
* @brief Function inits the I2C peripheral
|
|
*
|
|
* @param[in] core_clk - DSP core clock frequency in MHz;
|
|
* @param[in] i2c_clk - I2C clock in Hz;
|
|
* @param[in] own_addr - I2C own slave address;
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_I2C_init(uint32_t core_clk, uint32_t i2c_clk, uint32_t own_addr);
|
|
|
|
|
|
/*------------ C66XX_I2C_write_data() function ---------------------------*//**
|
|
* @brief Function writes data[len] to I2C chip_addr at mem_addr memory
|
|
* address
|
|
*
|
|
* @param[in] chip_addr - I2C chip address;
|
|
* @param[in] mem_addr - memory (register) address within the chip;
|
|
* @param[in] mem_addr_len - number of bytes to use for mem_addr (typically 1,
|
|
* 2 for larger memories, 0 for register type devices with only
|
|
* one register);
|
|
* @param[in] data - pointer to data;
|
|
* @param[in] len - data len in bytes;
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_I2C_write_data(uint8_t chip_addr, uint32_t mem_addr, uint32_t mem_addr_len, uint8_t *data, uint32_t len);
|
|
|
|
|
|
/*------------ C66XX_I2C_read_data() function ----------------------------*//**
|
|
* @brief Function reads data[len] from I2C chip_addr at mem_addr memory
|
|
*
|
|
* @param[in] chip_addr - I2C chip address;
|
|
* @param[in] mem_addr - memory (register) address within the chip;
|
|
* @param[in] mem_addr_len - number of bytes to use for mem_addr (typically 1,
|
|
* 2 for larger memories, 0 for register type devices with only
|
|
* one register);
|
|
* @param[out] buf - pointer to data buffer to store data;
|
|
* @param[in] len - data len in bytes;
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_I2C_read_data(uint8_t chip_addr, uint32_t mem_addr, uint32_t mem_addr_len, uint8_t *buf, uint32_t len);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ Gigabit Ethernet (GbE) Switch functions ========================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_GBE DSP Gigabit Ethernet Switch functions
|
|
* @{
|
|
*/
|
|
|
|
/*------------ C66XX_GBE_get_mac_id() function ---------------------------*//**
|
|
* @brief Function returns DSP MAC address for this device
|
|
*
|
|
* @return 64-bit variable that contains 48-bit MAC ID
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
uint64_t C66XX_GBE_get_mac_id(void);
|
|
|
|
|
|
/*------------ C66XX_GBE_init_serdes() function --------------------------*//**
|
|
* @brief Function inits Gigabit Ethernet Serdes block to the default state
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_GBE_init_serdes(void);
|
|
|
|
|
|
/** SGMII port Slave operation mode */
|
|
#define C66XX_SGMII_PORT_SLAVE_MODE 0
|
|
/** SGMII port Master operation mode */
|
|
#define C66XX_SGMII_PORT_MASTER_MODE 1
|
|
|
|
|
|
/** SGMII port autonegotiation disabled */
|
|
#define C66XX_SGMII_PORT_AUTONEGOTIATION_DISABLED 0
|
|
/** SGMII port autonegotiation enabled */
|
|
#define C66XX_SGMII_PORT_AUTONEGOTIATION_ENABLED 1
|
|
|
|
|
|
/*------------ C66XX_GBE_init_sgmii() function ---------------------------*//**
|
|
* @brief Function inits Gigabit Ethernet SGMII block
|
|
*
|
|
* Note that this function requires the presence of link partner connected
|
|
* at specified SGMII port - PHY or another SGMII.
|
|
*
|
|
* @param[in] port - MAC port number for which the SGMII port setup should
|
|
* be performed
|
|
* @param[in] mode - SGMII port operation mode: master or slave.
|
|
* @param[in] autoneg - flag to enable autonegotiation on this SGMII port.
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_GBE_init_sgmii(uint32_t port, uint32_t mode, uint32_t autoneg);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
//=============================================================================
|
|
//============ SRIO functions =================================================
|
|
//=============================================================================
|
|
|
|
/** @addtogroup C66XX_SRIO DSP SRIO functions
|
|
* @{
|
|
*/
|
|
|
|
/** SRIO vendor identifier */
|
|
#define C66XX_SRIO_DEVICE_VENDOR_ID 0x30
|
|
/** SRIO device revision */
|
|
#define C66XX_SRIO_DEVICE_REVISION 0x0
|
|
/** SRIO assembly identifier */
|
|
#define C66XX_SRIO_DEVICE_ASSEMBLY_ID 0x0
|
|
/** SRIO assembly vendor identifier */
|
|
#define C66XX_SRIO_DEVICE_ASSEMBLY_VENDOR_ID C66XX_SRIO_DEVICE_VENDOR_ID
|
|
/** SRIO assembly device revision */
|
|
#define C66XX_SRIO_DEVICE_ASSEMBLY_REVISION C66XX_SRIO_DEVICE_REVISION
|
|
/** SRIO assembly extension features */
|
|
#define C66XX_SRIO_DEVICE_ASSEMBLY_FEATURES 0x0100
|
|
|
|
|
|
/** SRIO link rate 1.25 Gbps */
|
|
#define C66XX_SRIO_LINK_RATE_1_25GB 1
|
|
/** SRIO link rate 2.5 Gbps */
|
|
#define C66XX_SRIO_LINK_RATE_2_5GB 2
|
|
/** SRIO link rate 3.125 Gbps */
|
|
#define C66XX_SRIO_LINK_RATE_3_125GB 3
|
|
/** SRIO link rate 5 Gbps */
|
|
#define C66XX_SRIO_LINK_RATE_5GB 4
|
|
|
|
|
|
// SRIO port widths defs - corresponds to SRIO path modes
|
|
/** SRIO port width with 1 receive and transmit lane */
|
|
#define C66XX_SRIO_PORT_WIDTH_1X 0
|
|
/** SRIO port width with 2 receive and transmit lanes */
|
|
#define C66XX_SRIO_PORT_WIDTH_2X 3
|
|
/** SRIO port width with 4 receive and transmit lanes */
|
|
#define C66XX_SRIO_PORT_WIDTH_4X 4
|
|
|
|
|
|
/** SRIO port 0 */
|
|
#define C66XX_SRIO_PORT_0 0
|
|
/** SRIO port 1 */
|
|
#define C66XX_SRIO_PORT_1 1
|
|
/** SRIO port 2 */
|
|
#define C66XX_SRIO_PORT_2 2
|
|
/** SRIO port 3 */
|
|
#define C66XX_SRIO_PORT_3 3
|
|
|
|
|
|
/** SRIO peripheral normal operation mode */
|
|
#define C66XX_SRIO_OPMODE_NORMAL 0
|
|
/** SRIO peripheral loopback operation mode - used to test the peripheral */
|
|
#define C66XX_SRIO_OPMODE_LOOPBACK 1
|
|
|
|
|
|
/** SRIO device identificator data descriptor */
|
|
typedef struct
|
|
{
|
|
uint32_t dev_id_8bit; /**< SRIO 8-bit device identificator */
|
|
uint32_t dev_id_16bit; /**< SRIO 16-bit device identificator */
|
|
} C66XX_SRIO_DEVICE_ID_DD;
|
|
|
|
// SRIO device identificator data descriptor length in bytes
|
|
#define C66XX_SRIO_DEVICE_ID_DD_LEN sizeof(C66XX_SRIO_DEVICE_ID_DD)
|
|
|
|
|
|
/** SRIO destination device identificators number */
|
|
#define C66XX_SRIO_DESTINATION_DEVICE_ID_COUNT 4
|
|
|
|
|
|
/** SRIO messages (Type9 and Type11) transmit queues mapping data descriptor */
|
|
typedef struct
|
|
{
|
|
uint32_t port; /**< SRIO port to which the queue is mapped */
|
|
uint32_t priority; /**< priority bit */
|
|
} C66XX_SRIO_TX_QUEUE_SCH_DD;
|
|
|
|
// SRIO messages (Type9 and Type11) transmit queues mapping data descriptor length in bytes
|
|
#define C66XX_SRIO_TX_QUEUE_SCH_DD_LEN sizeof(C66XX_SRIO_TX_QUEUE_SCH_DD)
|
|
|
|
|
|
/** SRIO peripheral initialization data descriptor */
|
|
typedef struct
|
|
{
|
|
uint32_t mode; /**< SRIO peripheral operation mode */
|
|
uint32_t link_rate; /**< SRIO link rate definition */
|
|
uint32_t port_width; /**< SRIO port width definition (1x, 2x, or 4x) */
|
|
C66XX_SRIO_DEVICE_ID_DD src_dev_id_dd; /**< SRIO base device identificators */
|
|
C66XX_SRIO_DEVICE_ID_DD dst_dev_id_dd[C66XX_SRIO_DESTINATION_DEVICE_ID_COUNT]; /**< SRIO destination device identificators */
|
|
} C66XX_SRIO_DD;
|
|
|
|
// SRIO peripheral initialization data descriptor length in bytes
|
|
#define C66XX_SRIO_DD_LEN sizeof(C66XX_SRIO_DD)
|
|
|
|
|
|
/*------------ C66XX_SRIO_init() function --------------------------------*//**
|
|
* @brief Function inits the SRIO peripheral
|
|
*
|
|
* The function does the following:
|
|
* 1. SRIO peripheral supports directIO, doorbell, data messaging (Type9
|
|
* packets) and data streaming (Type11 packets) operations.
|
|
* 2. Max MTU length is set to 256 bytes.
|
|
* 3. SRIO 8-bit and 16-bit base device IDs are set to supplied parameters.
|
|
* 4. Available destination SRIO 8-bit and 16-bit device IDs are set
|
|
* according to supplied parameters.
|
|
* 5. Operation mode is set according to supplied parameter.
|
|
* 6. Link rate and ports configuration (4 ports are available) are set
|
|
* according to supplied parameters.
|
|
* 7. SRIO transmit queues used in data message (Type9 and Type11) operations
|
|
* are configured by default: all 16 queues send packets onto Port 0 and
|
|
* operate at the same minimum priority level. In case the different mapping
|
|
* is needed then C66XX_srio_map_tx_queue() function should be called.
|
|
* 8. 64 SRIO doorbell interrupts are configured by default: the first 16
|
|
* interrupts (0-15) are routed to INTDST16 (Interrupt destination 16),
|
|
* 16-31 - to INTDST17 (Interrupt destination 17), 32-47 - to INTDST18
|
|
* (Interrupt destination 18), 48-63 - to INTDST19 (Interrupt destination
|
|
* 19). In case the different interrupt routing is needed then
|
|
* C66XX_srio_route_doorbell_interrupt() function should be called.
|
|
* 9. GARBAGE queues, which can used by the TXU, are not configured.
|
|
*
|
|
* @param[in] srio_dd - SRIO peripheral initialization data descriptor
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SRIO_init(C66XX_SRIO_DD *srio_dd);
|
|
|
|
|
|
/*------------ C66XX_SRIO_map_tx_queue() function ------------------------*//**
|
|
* @brief Function configures the selected SRIO transmit queue according to
|
|
* supplied parameters: SRIO port to which the queue is mapped and priority
|
|
* bit
|
|
*
|
|
* @param[in] queue - transmit queue number (0 - 15)
|
|
* @param[in] tx_queue_sch_dd - transmit queue mapping data descriptor
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SRIO_map_tx_queue(uint32_t queue, C66XX_SRIO_TX_QUEUE_SCH_DD *tx_queue_sch_dd);
|
|
|
|
|
|
/*------------ C66XX_SRIO_route_doorbell_interrupt() function ------------*//**
|
|
* @brief Function configures the selected SRIO doorbell interrupt to
|
|
* specified interrupt destination number
|
|
*
|
|
* @param[in] doorbell - SRIO doorbell interrupt number (0 - 63)
|
|
* @param[in] intdst - interrupt destination number (0 - 23)
|
|
*
|
|
* @return Error code
|
|
*
|
|
-----------------------------------------------------------------------------*/
|
|
int32_t C66XX_SRIO_route_doorbell_interrupt(uint32_t doorbell, uint32_t intdst);
|
|
|
|
|
|
/** @}*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
//=============================================================================
|
|
#endif /* __C66XX_FUNCTIONS_HXX__ */
|