1 /* 2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /********************************************************************************************************************** 8 * File Name : bsp_address_convert.c 9 * Version : 1.00 10 * Description : bsp_address_convert source code 11 *********************************************************************************************************************/ 12 13 /*********************************************************************************************************************** 14 * Includes <System Includes> , "Project Includes" 15 **********************************************************************************************************************/ 16 #include "bsp_api.h" 17 #include "bsp_address_convert.h" 18 19 /*********************************************************************************************************************** 20 * Macro definitions 21 **********************************************************************************************************************/ 22 #define BSP_PRV_ADDRESS_TABLE_END (0xFFFFFFFF) 23 24 /*********************************************************************************************************************** 25 * Typedef definitions 26 **********************************************************************************************************************/ 27 typedef struct bsp_address_convert_table 28 { 29 uint32_t original_address; ///< Base address of CPU Address space 30 uint32_t converted_address; ///< Base address of Bus-master's Address space 31 uint32_t size; ///< size of region (byte) 32 } r_bsp_address_convert_table_t; 33 34 /*********************************************************************************************************************** 35 * Exported global variables (to be accessed by other files) 36 **********************************************************************************************************************/ 37 38 /*********************************************************************************************************************** 39 * Private global variables and functions 40 **********************************************************************************************************************/ 41 r_bsp_address_convert_table_t g_address_convert_table_array[] = 42 { 43 BSP_ADDRESS_CONVERT_TABLE_BODY, 44 {BSP_PRV_ADDRESS_TABLE_END, BSP_PRV_ADDRESS_TABLE_END,BSP_PRV_ADDRESS_TABLE_END} 45 }; 46 47 /*******************************************************************************************************************//** 48 * @addtogroup BSP_MCU 49 * 50 * @{ 51 **********************************************************************************************************************/ 52 53 /** @} (end addtogroup BSP_MCU) */ 54 55 /*******************************************************************************************************************//** 56 * Converts the cpu address specified in the argument to the bus address. 57 * If an address that does not exist in the external-bus is specified, it will not be converted. 58 * 59 * @param[in] original_address Address that CPU access to slave. 60 * 61 * @retval converted_address Address that Bus-master device access to slave. 62 **********************************************************************************************************************/ R_BSP_SlaveAddressConversion(uint32_t original_address)63uint32_t R_BSP_SlaveAddressConversion (uint32_t original_address) 64 { 65 uint32_t converted_address = original_address; // Set unconverted address as initial value. 66 r_bsp_address_convert_table_t * p_convert_table = &g_address_convert_table_array[0]; 67 68 for ( ; BSP_PRV_ADDRESS_TABLE_END != p_convert_table->original_address; p_convert_table++) 69 { 70 uint32_t region_base = p_convert_table->original_address; 71 if ((region_base <= original_address) && (original_address < (region_base + p_convert_table->size))) 72 { 73 /* find region: convert address */ 74 converted_address = (original_address & BSP_ADDRESS_OFFSET_MASK) | p_convert_table->converted_address; 75 76 /* exit loop */ 77 break; 78 } 79 } 80 81 return converted_address; 82 } 83