hal_cache.c

来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 88 行

C
88
字号
/**********************************************************************************/
/*                                                                                */
/*    Copyright (C) 2006 Oki Electric Industry Co., LTD.                          */
/*                                                                                */
/*    System Name    :  uPLAT7D series                                            */
/*    Module Name    :  uPLAT7D system Cache HAL program                          */
/*    File   Name    :  hal_cache.c                                               */
/*    Revision       :  01.00                                                     */
/*    Date           :  2006/1/25 initial version                                 */
/*                                                                                */
/**********************************************************************************/

#if defined(__arm)
#include "ml675050.h"
#elif defined(_WIN32)
#include "ml675050sim.h"
#else
#error COMPILER ERROR
#endif

#include "common.h"
#include "hal_common.h"
#include "hal_cache.h"

/***********************************/
/*     type definition             */
/***********************************/
#define CACHE_NON_LOCK    (0x00000000)
#define CACHE_WAY0_LOCK   (0x02000000)
#define CACHE_WAY01_LOCK  (0x04000000)
#define CACHE_WAY012_LOCK (0x06000000)

#define CACHE_FLUSH (0x00000000)

/***********************************/
/*     Static functions prototype  */
/***********************************/

/*****************************************************************************/
/*                                                                           */
/*  Function Name   : int16_t HALCache_CacheInit( int16_t cache_mode )       */
/*  Input           : Cache mode(write through/back)                         */
/*                  :   0: write through                                     */
/*                  :   1: write back                                        */
/*  Output          : HAL_OK(1)                                              */
/*                  : HAL_PARAM_ERROR(-2)                                    */
/*                                                                           */
/*  Note : Initialize Cache.                                                 */
/*        Memory Map                                                         */
/* BANK29(Mirroring External SRAM) :cache off                                */
/* BANK28(Mirroring External ROM)  :cache off                                */
/* BANK27(Mirroring External DRAM) :cache off                                */
/* BANK26(External SRAM)           :cache on                                 */
/* BANK25(External ROM)            :cache off                                */
/* BANK24(External DRAM)           :cache off                                */
/* BANK10(AHB SRAM(16KB))          :cache off                                */
/* BANK0 (Remappable Space)        :cache on                                 */
/*                                                                           */
/*****************************************************************************/
int16_t HALCache_CacheInit( int16_t cache_mode )
{
    int16_t rtnVal = HAL_OK;
    
    switch(cache_mode ){
    case CACHE_WRITE_THROUGH:
        rtnVal = HAL_PARAM_ERROR;
        break;
    case CACHE_WRITE_BACK:
        break;
    default:
        rtnVal = HAL_PARAM_ERROR;
        break;
    }
    
    if(rtnVal == HAL_OK){
        /* Initialize Cache */
        OkiCLib_write32(CACHE, CACHE_NON_BANK);                 /* cache off */
        OkiCLib_write32(CON, CACHE_NON_LOCK|CACHE_NORMALMODE);  /* non lock, non load mode */
        OkiCLib_write32(FLUSH, CACHE_FLUSH);                    /* Flush cache memory */
        
        /* Setting cache on bank */
        OkiCLib_write32(CACHE, CACHE_BANK0|CACHE_BANK26);       /* cache on(bank? or all bank) */
    }
    
    return rtnVal;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?