123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- /*
- * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- /******************************************************************************
- * @file csi_core.h
- * @brief CSI Core Layer Header File
- * @version V1.0
- * @date 02. June 2017
- ******************************************************************************/
- #ifndef _CORE_H_
- #define _CORE_H_
- #include <stdint.h>
- #include "csi_gcc.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* ################################## NVIC function ############################################ */
- /**
- \brief initialize the NVIC interrupt controller
- \param [in] prio_bits the priority bits of NVIC interrupt controller.
- */
- void drv_nvic_init(uint32_t prio_bits);
- /**
- \brief Enable External Interrupt
- \details Enables a device-specific interrupt in the NVIC interrupt controller.
- \param [in] irq_num External interrupt number. Value cannot be negative.
- */
- void drv_nvic_enable_irq(int32_t irq_num);
- /**
- \brief Disable External Interrupt
- \details Disables a device-specific interrupt in the NVIC interrupt controller.
- \param [in] irq_num External interrupt number. Value cannot be negative.
- */
- void drv_nvic_disable_irq(int32_t irq_num);
- /**
- \brief Get Pending Interrupt
- \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.
- \param [in] irq_num Interrupt number.
- \return 0 Interrupt status is not pending.
- \return 1 Interrupt status is pending.
- */
- uint32_t drv_nvic_get_pending_irq(int32_t irq_num);
- /**
- \brief Set Pending Interrupt
- \details Sets the pending bit of an external interrupt.
- \param [in] irq_num Interrupt number. Value cannot be negative.
- */
- void drv_nvic_set_pending_irq(int32_t irq_num);
- /**
- \brief Clear Pending Interrupt
- \details Clears the pending bit of an external interrupt.
- \param [in] irq_num External interrupt number. Value cannot be negative.
- */
- void drv_nvic_clear_pending_irq(int32_t irq_num);
- /**
- \brief Get Active Interrupt
- \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.
- \param [in] irq_num Device specific interrupt number.
- \return 0 Interrupt status is not active.
- \return 1 Interrupt status is active.
- \note irq_num must not be negative.
- */
- uint32_t drv_nvic_get_active(int32_t irq_num);
- /**
- \brief Set Interrupt Priority
- \details Sets the priority of an interrupt.
- \note The priority cannot be set for every core interrupt.
- \param [in] irq_num Interrupt number.
- \param [in] priority Priority to set.
- */
- void drv_nvic_set_prio(int32_t irq_num, uint32_t priority);
- /**
- \brief Get Interrupt Priority
- \details Reads the priority of an interrupt.
- The interrupt number can be positive to specify an external (device specific) interrupt,
- or negative to specify an internal (core) interrupt.
- \param [in] irq_num Interrupt number.
- \return Interrupt Priority.
- Value is aligned automatically to the implemented priority bits of the microcontroller.
- */
- uint32_t drv_nvic_get_prio(int32_t irq_num);
- /*@} end of CSI_Core_NVICFunctions */
- /* ########################## Cache functions #################################### */
- /**
- \brief Enable I-Cache
- \details Turns on I-Cache
- */
- void drv_icache_enable(void);
- /**
- \brief Disable I-Cache
- \details Turns off I-Cache
- */
- void drv_icache_disable(void);
- /**
- \brief Invalidate I-Cache
- \details Invalidates I-Cache
- */
- void drv_icache_invalid(void);
- /**
- \brief Enable D-Cache
- \details Turns on D-Cache
- \note I-Cache also turns on.
- */
- void drv_dcache_enable(void);
- /**
- \brief Disable D-Cache
- \details Turns off D-Cache
- \note I-Cache also turns off.
- */
- void drv_dcache_disable(void);
- /**
- \brief Invalidate D-Cache
- \details Invalidates D-Cache
- \note I-Cache also invalid
- */
- void drv_dcache_invalid(void);
- /**
- \brief Clean D-Cache
- \details Cleans D-Cache
- \note I-Cache also cleans
- */
- void drv_dcache_clean(void);
- /**
- \brief Clean & Invalidate D-Cache
- \details Cleans and Invalidates D-Cache
- \note I-Cache also flush.
- */
- void drv_dcache_clean_invalid(void);
- /**
- \brief D-Cache Invalidate by address
- \details Invalidates D-Cache for the given address
- \param[in] addr address (aligned to 16-byte boundary)
- \param[in] dsize size of memory block (in number of bytes)
- */
- void drv_dcache_invalid_range(uint32_t *addr, int32_t dsize);
- /**
- \brief D-Cache Clean by address
- \details Cleans D-Cache for the given address
- \param[in] addr address (aligned to 16-byte boundary)
- \param[in] dsize size of memory block (in number of bytes)
- */
- void drv_dcache_clean_range(uint32_t *addr, int32_t dsize);
- /**
- \brief D-Cache Clean and Invalidate by address
- \details Cleans and invalidates D_Cache for the given address
- \param[in] addr address (aligned to 16-byte boundary)
- \param[in] dsize size of memory block (in number of bytes)
- */
- void drv_dcache_clean_invalid_range(uint32_t *addr, int32_t dsize);
- /**
- \brief setup cacheable range Cache
- \details setup Cache range
- */
- void drv_cache_set_range(uint32_t index, uint32_t baseAddr, uint32_t size, uint32_t enable);
- /**
- \brief Enable cache profile
- \details Turns on Cache profile
- */
- void drv_cache_enable_profile(void);
- /**
- \brief Disable cache profile
- \details Turns off Cache profile
- */
- void drv_cache_disable_profile(void);
- /**
- \brief Reset cache profile
- \details Reset Cache profile
- */
- void drv_cache_reset_profile(void);
- /**
- \brief cache access times
- \details Cache access times
- \note every 256 access add 1.
- */
- uint32_t drv_cache_get_access_time(void);
- /**
- \brief cache miss times
- \details Cache miss times
- \note every 256 miss add 1.
- */
- uint32_t drv_cache_get_miss_time(void);
- /* ################################## SysTick function ############################################ */
- /**
- \brief CORE timer Configuration
- \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
- Counter is in free running mode to generate periodic interrupts.
- \param [in] ticks Number of ticks between two interrupts.
- \param [in] irq_num core timer Interrupt number.
- \return 0 Function succeeded.
- \return 1 Function failed.
- \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
- function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
- must contain a vendor-specific implementation of this function.
- */
- uint32_t drv_coret_config(uint32_t ticks, int32_t irq_num);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _CORE_H_ */
|