关于s3c44b0的cpu内部8Kcache SRAM的初始化问题。主要是因为cpu_init()调用了icache_enable()函数,而该函数又调用了s3c44b0_flush_cache()而引发的问题
s3c44b0_flush_cache()函数就这么几行,代码如下:
static void s3c44b0_flush_cache(void)
{
volatile int i;
/* flush cycle */
for(i=0x10002000;i<0x10004800;i+=16)
{
*((int *)i)=0x0;
}
}
首先莫名的是:计数用的变量i要用volatile来修饰!也许这就是arm或说是嵌入式或说是基于硬件的C程序与基于PC的C程序不同之处吧。加volatile是为了防止编译器把i给合谐掉然后就是赋值句*((int *)i)=0x0:这个对写过或是看过arm程序的都知道吧,不解释。
关键在于for(i=0x10002000;i<0x10004800;i+=16)参看s3c44b0手册,cache set0:3地址是0x1000000~0x10002000;cache tag0:3+LRU地址是0x10002000~0x10004800。刚开始以为刷新cache是要向cache set0:3写0,而其实应该向且cache tag0:3+LRU空间写入0来刷新cache。有点意思的是:cache tag和LRU RAM写入的地址。(参看s3c44b0手册关于cache tag部分)由于cache tag和LRU RAM是16字节读写的,故i的增加应该是以16为单位的。
接下来是设置非缓冲区范围。
NCACHBE0 = 0xC0000000;
NCACHBE1 = 0x00000000;
完全依据程序员个人主观,呵呵 当然是要好的想法:比如不应该把IO地址放入缓冲区,而应该把它放入非缓冲区;不应该不把SDRAM放入非缓冲区,而应该放入缓冲区。所以,这里把除SDRAM地址外的所有映射地址做为非缓冲区。然后依据地址设置NCACHBE0和NCACHBE1。NCACHBE0在在这里是有用的,高地址为0x0c000000,低地址为0x00000000;而 NCACHBE1可以理解为不用它,所以起始和终止地址都设为0
在设置完之后就只要开启cpu cache功能就可以。
reg = SYSCFG;
reg |= 0x00000006; /* 8kB */
SYSCFG = reg;
当然,坚持一惯的风格,操作SYSCFG寄存器方式为:读---操作---回写。这里把8K内部RAM全作为cache
除了s3c44b0_flush_cache()外,其他都很简单,呵呵 不是吗
关键字:s3c44b0 SRAM 初始化
引用地址:
详解s3c44b0 cpu 8K cache SRAM的初始化
推荐阅读最新更新时间:2024-03-16 13:07
STM32的启动堆栈初始化
有几个问题,众多博文中抄来抄去,内容一样,却没有解释清楚 上电初始化堆栈,在进入_main后又说初始化堆栈,有什么不同 堆栈的地址是怎么得出来的 关于这两个问题,先借用一下要标准的启动流程 一般而言,系统上电后第一个执行的是由汇编所编写的启动文件,其主要工作为一下五部分: (1)、初始化堆栈指针SP=_initial_sp (2)、初始化PC指针,令其=Reset_Handler (3)、初始化中断向量表 (4)、配置系统时钟 (5)、调用C库函数_main初始化用户堆栈,从而最终调用main函数进入C的世界 STM32的中断向量表规定每一行必须是SP地址,第二行是复位中断入口地址,上电后,C
[单片机]
利用U-Boot实现uClinux向S3C44B0的移植
1 引言 S3C44B0是Samsung公司推出的一款为手持设备或其他通用设备开发的32位处理器,它基于ARM7TDMI核,没有内存管理单元(MMU)。在采用无MMU的微处理器的嵌入式系统中广泛采用的就是uClinux系统,作为linux的衍生系统,其具有支持多任务、内核精简、高效稳定和源代码开放的优点。系统移植的基本过程包括:获取较新版本的linux-2.6.9内核源码,根据目标平台对源码中与硬件平台相关部分进行修改,添加必要的外设驱动程序,对系统进行针对目标平台的交叉编译,生成的内核映像文件的下载调试等。 2 硬件环境介绍 硬件平台以S3C44B0为核心,采用的外部晶振频率为6MHZ,内核主频最高可达到66MHZ,平台以
[单片机]
C51全局初始化及精确延时程序,51单片机精确延时程序
/********************************************************************************************************* * Initialization Program * QiZhao,2007 * All Rights Reserved * File : initial.h * By : QiZhao * Contact :zq1987731@163.com * * Version : V2.1 γ * Corrector : QiZhao * Date : 2008.2.1 (Last modified) * * Remarks :
[单片机]
瑞萨电子宣布扩大其前沿IP的授权范围
全球领先的半导体解决方案供应商瑞萨电子株式会社宣布扩大其备受欢迎的IP的授权范围,帮助设计师能够在瞬息万变的行业中满足广泛的客户需求。自即日起,客户将可访问诸如尖端的7nm(纳米)SRAM和TCAM,以及领先的标准以太网时间敏感网络(TSN)等IP。此外,瑞萨电子正致力于打造包括PIM(内存处理)的系统IP,该技术首次在2019年6月的会议论文中提出,作为AI(人工智能)加速器引起广泛关注。利用这些IP,客户可迅速启动其先进的半导体器件开发项目,例如为领先的5G网络开发下一代AI芯片或ASIC。 对于开发定制芯片或使用FPGA器件进行早期开发的客户,可在其子系统设计中利用瑞萨IP加快软件开发速度,从而使资源集中于专业领域,将具
[半导体设计/制造]
TQ2440国嵌学院gboot-bss段初始化
BSS段主要用来存放未初始化的全局变量 首先先查看我们的链接器脚本文件,也就是gboot.lds OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x30008000; . = ALIGN(4); .text : { start.o (.text) *(.text) } . = ALIGN(4); .data : { *(.data) } . = ALIGN(4); bss_start = .; .bss : { *(.bss) } bss_end = .; } 可以看到上面bss段的开始地址bss_start和结束地址bss_end,
[单片机]
采用高性能SRAM提高DSP密集型应用的性能
军事与国防应用极大地受益于数字信号处理器( DSP ),其广泛应用于雷达、软件无线电( SDR )、灵巧弹药与目标探测系统、电子战应用、飞机成像以及众多其它应用。 DSP 借助其完美架构提供的精确处理能力可以显著提高性能。关键 DSP 功能包括实时信号处理、超高吞吐量与可重编程功能。本文介绍了如何采用高性能四倍数据速率(QDR)SRAM而使整体DSP系统性能至少提高两倍(与使用 SDR AM的传统方法相比)的方法。 数字信号处理 数字信号处理包含把信号转换成数字形式后对其进行处理的方法,如:雷达处理。雷达系统基本上是产生可以通过定向天线馈送的脉冲。这些信号以光速传播,而其路径中的任何物体都会把
[嵌入式]
STM8L101F3P-串口发送功能初始化
1.串口初始化函数 CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1); GPIO_ExternalPullUpConfig(GPIOC,GPIO_Pin_3|GPIO_Pin_4, ENABLE); CLK_PeripheralClockConfig(CLK_Peripheral_USART, ENABLE); USART_DeInit(); USART_Init(9600, USART_WordLength_8D, USART_StopBits_1, USART_Parity_No,USART_Mode_Tx); 2.发送一个uint8_t类型的数据 USART_Sen
[单片机]
赛普拉斯推出QDRII 和DDRII SRAM器件
赛普拉斯半导体公司推出业界首款四数据速率II+ (QDRII+)和双数据速率II+ (DDRII+) SRAM器件。这些存储器芯片是世界上密度最高带宽最大的,比现有QDRII和DDRII的系统级带宽大50%。这些存储器加速了各种数据密集产品的读写功能,可用于交换机、路由器、服务器、存储设备、无线基站和测试设备。 QDRII+和DDRII+的工作速率高达500MHz,带宽高于QDRII和DDRII,他们均使用相同占位引脚,封装形式为165引脚FBGA封装。这些SRAM的引脚与其它QDR联盟的产品兼容,包括NEC、IDT、Renesas和三星。Cypress的QDRII+/DDRII+ SRAM均采用Cypress的90nm RAM
[新品]