@@ -290,6 +290,42 @@ typedef struct
290290/*@} end of group CSI_CACHE */
291291
292292
293+ #define SYSMAP_SYSMAPCFG_B_Pos 0U /*!< SYSMAP SYSMAPCFG: B Position */
294+ #define SYSMAP_SYSMAPCFG_B_Msk (0x1UL << SYSMAP_SYSMAPCFG_B_Pos) /*!< SYSMAP SYSMAPCFG: B Mask */
295+ #define SYSMAP_SYSMAPCFG_C_Pos 1U /*!< SYSMAP SYSMAPCFG: C Position */
296+ #define SYSMAP_SYSMAPCFG_C_Msk (0x1UL << SYSMAP_SYSMAPCFG_C_Pos) /*!< SYSMAP SYSMAPCFG: C Mask */
297+ #define SYSMAP_SYSMAPCFG_SO_Pos 2U /*!< SYSMAP SYSMAPCFG: SO Position */
298+ #define SYSMAP_SYSMAPCFG_SO_Msk (0x1UL << SYSMAP_SYSMAPCFG_SO_Pos) /*!< SYSMAP SYSMAPCFG: SO Mask */
299+ /**
300+ \ingroup CSI_core_register
301+ \defgroup CSI_SYSMAP system map (SYSMAP)
302+ \brief Type definitions for the SYSMAP Registers
303+ @{
304+ */
305+ typedef struct
306+ {
307+ __IOM uint32_t SYSMAPADDR0 ; /*!< Offset: 0x000 (R/W) SYSMAP configure register */
308+ __IOM uint32_t SYSMAPCFG0 ; /*!< Offset: 0x004 (R/W) SYSMAP configure register */
309+ __IOM uint32_t SYSMAPADDR1 ; /*!< Offset: 0x008 (R/W) SYSMAP configure register */
310+ __IOM uint32_t SYSMAPCFG1 ; /*!< Offset: 0x00c (R/W) SYSMAP configure register */
311+ __IOM uint32_t SYSMAPADDR2 ; /*!< Offset: 0x010 (R/W) SYSMAP configure register */
312+ __IOM uint32_t SYSMAPCFG2 ; /*!< Offset: 0x014 (R/W) SYSMAP configure register */
313+ __IOM uint32_t SYSMAPADDR3 ; /*!< Offset: 0x018 (R/W) SYSMAP configure register */
314+ __IOM uint32_t SYSMAPCFG3 ; /*!< Offset: 0x01c (R/W) SYSMAP configure register */
315+ __IOM uint32_t SYSMAPADDR4 ; /*!< Offset: 0x020 (R/W) SYSMAP configure register */
316+ __IOM uint32_t SYSMAPCFG4 ; /*!< Offset: 0x024 (R/W) SYSMAP configure register */
317+ __IOM uint32_t SYSMAPADDR5 ; /*!< Offset: 0x028 (R/W) SYSMAP configure register */
318+ __IOM uint32_t SYSMAPCFG5 ; /*!< Offset: 0x02c (R/W) SYSMAP configure register */
319+ __IOM uint32_t SYSMAPADDR6 ; /*!< Offset: 0x030 (R/W) SYSMAP configure register */
320+ __IOM uint32_t SYSMAPCFG6 ; /*!< Offset: 0x034 (R/W) SYSMAP configure register */
321+ __IOM uint32_t SYSMAPADDR7 ; /*!< Offset: 0x038 (R/W) SYSMAP configure register */
322+ __IOM uint32_t SYSMAPCFG7 ; /*!< Offset: 0x03c (R/W) SYSMAP configure register */
323+ } SYSMAP_Type ;
324+
325+
326+ /*@} end of group CSI_SYSMAP */
327+
328+
293329/**
294330 \ingroup CSI_core_register
295331 \defgroup CSI_SysTick System Tick Timer (CORET)
@@ -383,12 +419,14 @@ typedef struct
383419#define TCIP_BASE (0xE000E000UL) /*!< Titly Coupled IP Base Address */
384420#define CORET_BASE (0xE0004000UL) /*!< CORET Base Address */
385421#define CLIC_BASE (0xE0800000UL) /*!< CLIC Base Address */
422+ #define SYSMAP_BASE (0xEFFFF000UL) /*!< SYSMAP Base Address */
386423#define DCC_BASE (0xE4010000UL) /*!< DCC Base Address */
387424#define CACHE_BASE (TCIP_BASE + 0x1000UL) /*!< CACHE Base Address */
388425
389426#define CORET ((CORET_Type *) CORET_BASE ) /*!< SysTick configuration struct */
390427#define CLIC ((CLIC_Type *) CLIC_BASE ) /*!< CLIC configuration struct */
391428#define DCC ((DCC_Type *) DCC_BASE ) /*!< DCC configuration struct */
429+ #define SYSMAP ((SYSMAP_Type *) SYSMAP_BASE ) /*!< SYSMAP configuration struct */
392430#define CACHE ((CACHE_Type *) CACHE_BASE ) /*!< cache configuration struct */
393431
394432/*@} */
@@ -646,7 +684,7 @@ __STATIC_INLINE void csi_mpu_disable_region(uint32_t idx)
646684 */
647685__STATIC_INLINE uint32_t csi_coret_config (uint32_t ticks , int32_t IRQn )
648686{
649- if (CORET -> MTIMECMP ) {
687+ if (( CORET -> MTIMECMP != 0 ) && ( CORET -> MTIMECMP != 0xffffffffffffffff ) ) {
650688 CORET -> MTIMECMP = CORET -> MTIMECMP + ticks ;
651689 } else {
652690 CORET -> MTIMECMP = CORET -> MTIME + ticks ;
@@ -691,6 +729,126 @@ __STATIC_INLINE uint32_t csi_coret_get_valueh(void)
691729}
692730
693731/*@} end of CSI_Core_SysTickFunctions */
732+ /* ########################## SYSMAP functions #################################### */
733+ /**
734+ \ingroup CSI_Core_FunctionInterface
735+ \defgroup CSI_Core_SYSMAPFunctions SYSMAP Functions
736+ \brief Functions that manage system map attribute
737+ @{
738+ */
739+
740+ /**
741+ \brief Get SYSMAPCFGx Register by index
742+ \details Returns the content of the SYSMAPxCFG Register.
743+ \param [in] idx SYSMAP region index
744+ \return SYSMAPxCFG Register value
745+ */
746+ __STATIC_INLINE uint8_t __get_SYSMAPCFGx (uint32_t idx )
747+ {
748+ switch (idx )
749+ {
750+ case 0 : return SYSMAP -> SYSMAPCFG0 ;
751+ case 1 : return SYSMAP -> SYSMAPCFG1 ;
752+ case 2 : return SYSMAP -> SYSMAPCFG2 ;
753+ case 3 : return SYSMAP -> SYSMAPCFG3 ;
754+ case 4 : return SYSMAP -> SYSMAPCFG4 ;
755+ case 5 : return SYSMAP -> SYSMAPCFG5 ;
756+ case 6 : return SYSMAP -> SYSMAPCFG6 ;
757+ case 7 : return SYSMAP -> SYSMAPCFG7 ;
758+ default : return 0 ;
759+ }
760+ }
761+
762+ /**
763+ \brief Set SYSMAPCFGx by index
764+ \details Writes the given value to the SYSMAPxCFG Register.
765+ \param [in] idx SYSMAPx region index
766+ \param [in] sysmapxcfg SYSMAPxCFG Register value to set
767+ */
768+ __STATIC_INLINE void __set_SYSMAPCFGx (uint32_t idx , uint32_t sysmapxcfg )
769+ {
770+ switch (idx )
771+ {
772+ case 0 : SYSMAP -> SYSMAPCFG0 = sysmapxcfg ; break ;
773+ case 1 : SYSMAP -> SYSMAPCFG1 = sysmapxcfg ; break ;
774+ case 2 : SYSMAP -> SYSMAPCFG2 = sysmapxcfg ; break ;
775+ case 3 : SYSMAP -> SYSMAPCFG3 = sysmapxcfg ; break ;
776+ case 4 : SYSMAP -> SYSMAPCFG4 = sysmapxcfg ; break ;
777+ case 5 : SYSMAP -> SYSMAPCFG5 = sysmapxcfg ; break ;
778+ case 6 : SYSMAP -> SYSMAPCFG6 = sysmapxcfg ; break ;
779+ case 7 : SYSMAP -> SYSMAPCFG7 = sysmapxcfg ; break ;
780+ default : return ;
781+ }
782+ }
783+
784+ /**
785+ \brief Get SYSMAPADDRx Register by index
786+ \details Returns the content of the SYSMAPADDRx Register.
787+ \param [in] idx SYSMAP region index
788+ \return SYSMAPADDRx Register value
789+ */
790+ __STATIC_INLINE uint32_t __get_SYSMAPADDRx (uint32_t idx )
791+ {
792+ switch (idx )
793+ {
794+ case 0 : return SYSMAP -> SYSMAPADDR0 ;
795+ case 1 : return SYSMAP -> SYSMAPADDR1 ;
796+ case 2 : return SYSMAP -> SYSMAPADDR2 ;
797+ case 3 : return SYSMAP -> SYSMAPADDR3 ;
798+ case 4 : return SYSMAP -> SYSMAPADDR4 ;
799+ case 5 : return SYSMAP -> SYSMAPADDR5 ;
800+ case 6 : return SYSMAP -> SYSMAPADDR6 ;
801+ case 7 : return SYSMAP -> SYSMAPADDR7 ;
802+ default : return 0 ;
803+ }
804+ }
805+
806+ /**
807+ \brief Set SYSMAPADDRx by index
808+ \details Writes the given value to the SYSMAPADDRx Register.
809+ \param [in] idx SYSMAP region index
810+ \param [in] sysmapaddr SYSMAPADDRx Register value to set
811+ */
812+ __STATIC_INLINE void __set_SYSMAPADDRx (uint32_t idx , uint32_t sysmapxaddr )
813+ {
814+ switch (idx )
815+ {
816+ case 0 : SYSMAP -> SYSMAPADDR0 = sysmapxaddr ; break ;
817+ case 1 : SYSMAP -> SYSMAPADDR1 = sysmapxaddr ; break ;
818+ case 2 : SYSMAP -> SYSMAPADDR2 = sysmapxaddr ; break ;
819+ case 3 : SYSMAP -> SYSMAPADDR3 = sysmapxaddr ; break ;
820+ case 4 : SYSMAP -> SYSMAPADDR4 = sysmapxaddr ; break ;
821+ case 5 : SYSMAP -> SYSMAPADDR5 = sysmapxaddr ; break ;
822+ case 6 : SYSMAP -> SYSMAPADDR6 = sysmapxaddr ; break ;
823+ case 7 : SYSMAP -> SYSMAPADDR7 = sysmapxaddr ; break ;
824+ default : return ;
825+ }
826+ }
827+
828+ /**
829+ \brief configure system map attribute.
830+ \details
831+ \param [in] idx system map region (0, 1, 2, ..., 7).
832+ \param [in] base_addr base address must be aligned with page size.
833+ \param [in] enable enable or disable memory protected region.
834+ */
835+ __STATIC_INLINE void csi_sysmap_config_region (uint32_t idx , uint32_t base_addr , uint32_t attr )
836+ {
837+ uint32_t addr = 0 ;
838+
839+ if (idx > 7 ) {
840+ return ;
841+ }
842+
843+ addr = base_addr >> 12 ;
844+ attr = attr << 2 ;
845+
846+ __set_SYSMAPADDRx (idx , addr );
847+ __set_SYSMAPCFGx (idx , attr );
848+ }
849+
850+ /*@} end of CSI_Core_SYSMAPFunctions */
851+
694852
695853/* ##################################### DCC function ########################################### */
696854/**
@@ -986,7 +1144,7 @@ __STATIC_INLINE void csi_dcache_invalid_range (uint32_t *addr, int32_t dsize)
9861144__STATIC_INLINE void csi_dcache_clean_range (uint32_t * addr , int32_t dsize )
9871145{
9881146
989- #if (__DCACHE_PRESENT == 1 )
1147+ #if (__DCACHE_PRESENT == 1U )
9901148 int32_t op_size = dsize + (uint32_t )addr % 32 ;
9911149 uint32_t op_addr = (uint32_t ) addr & CACHE_INV_ADDR_Msk ;
9921150 int32_t linesize = 32 ;
0 commit comments