推荐阅读最新更新时间:2024-10-24 13:58
从0开始学Keil下的S3C2440裸机开发-3使用外部NORFLASH+内部RAM
关于S3C2440启动方式: 程序下载到NORFLASH中后,选择从NORFLASH启动,自动执行,NORFLASH中执行代码,内部RAM分配变量;NORFLASH本身地址映射为0X0000000,内存选用内部RAM。 程序下载到NANDFLASH中后,选择从NANDFLASH启动,会自动搬运4K到RAM中运行。 1、新增工程配置组. 2设置分散加载组 3使用命令生成.bin文件。 4更改S3C2440.S文件: (1)均为: IMPORT ||Image ERROM1ERROM1 RO Length||IMPORT||ImageLength||IMPORT||Image RW_IR
[单片机]
从0开始学Keil下的S3C2440裸机开发-1使用内部RAM
1建立KEIL开发环境 Keil版本:μVision V4.71.2.0; 调试器:JLINKV8; 调试软件:J-Link ARM V4.72。 2新建工程 新建工程如图1,并在硬盘建立文件夹结构如图2,保存后选择CPU类型如图3所示,选择S3C2440A。 完成后,设置工程结构。 将S3C2440.S移动到Core文件夹下,并添加到工程Core组下。 新建app.c文件,存储到App文件夹下,并添加到工程App组下。 组管理设置完成后,如下. 3设置工程属性 设置内部4KRAM分配,4KRAM 2k作为IROM,2K作为IRAM,查看S3C2440存储器映射,内部RAM起始地址为0X400000
[单片机]
s3c2440裸机-内存控制器(三-1、norflash编程之NorFlash原理)
1.flash种类与特性: flash一般分为nand flash和nor flash,各自特性如下表: - Nor NAND XIP(片上执行) yes no 性能(擦除) 非常慢(5s,块太大) 快(3ms) 性能(写) 慢 快 性能(读) 快 快 可靠性 高 一般(容易出现位反转) 可擦除次数 10000 ~ 100000 100000 ~ 1000000 接口 与ram类似,可直接访问任意地址 I/O接口(无地址线,必须串行访问,命令、地址、数据共用8位IO) 易用性 容易 复杂 主要用途 常用于保存代码和关键数据 用于保存数据 价格 高 低 容量 小 大 常用文件系统类型 jffs yaff
[单片机]
s3c2440裸机-内存控制器(三-2、norflash编程之适配访问时序)
前面我们了解了 norFlash的特性和原理 ,那么cpu是如何和nor进行通信的呢?下面开始详细介绍。 1.内存控制器适配norflash 如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部norflash的性能进行配置,这里先列出时间参数的含义: Tacs: Address set-up time before nGCSn(表示地址信号A发出多久后才能发出nGCS片选) Tcos: Chip selection set-up time before nOE(表示片选信号nGCS发出多久后才能发出读使能信号) Tacc:access cycle(数据访问周期) Tacp:page模式下的访问周
[单片机]
s3c2440裸机-内存控制器(三-3、norflash编程之uboot中操作norflash)
前提: norflash初始化正常,能够正常从nor上执行。 cpu总是从0地址读取指令执行程序。当cpu设置成nor启动时,0地址对应nor。cpu从nand启动时,0地址对应sram。 1.读取norFlash 我们将板子设为nor启动,那么0地址对应nor,我们先将uboot烧写到nor中。我们先看下这款NorFlash的手册,找到操作flash的命令表: 下面简单的举一些例子: 1)复位(reset): 往任何一个地址写入F0即可。 2)读ID: 很多的Nor Flash可以配置成位宽16bit(Word),位宽8bit(Byte),我们这款norflash数据位宽为16bit。下面我们按照nor手册上的命令表
[单片机]
s3c2440裸机-内存控制器(三-4、norflash编程之实现)
1.识别norflash 我们知道要识别norflash属性,要让norflash进入cfi模式,然后按照手册上的表格发送一系列的命令就能获取norflash属性。 1)发送命令 那么我们需要实现一个cpu向nor发命令的一个函数nor_cmd()。我们的norflash是16bit位宽的,所以访问nor是以16位为单位访问的。 #define NOR_FLASH_BASE 0 /* jz2440, nor-- cs0, base addr = 0 */ /* 比如: 55H 98 ** 本意是: 往(0 + (0x55) 1)写入0x98 */ void nor_write_word(unsigned int b
[单片机]
从0开始学Keil下的S3C2440裸机开发-2使用外部SDRAM
和使用内部RAM一样,关键设置分散加载文件,同时设置JLINK初始化配置文件。 1、新增工程配置组。 2设置分散加载组 3设置ini文件 Ext_Ram内容: FUNC void SetupForStart (void) { // o Program Entry Point PC = 0x30000000; } FUNC void Init (void) { _WDWORD(0x4A000008, 0xFFFFFFFF); // Disable All Interrupts _WDWORD(0x53000000, 0x00000000); // Disable Watchdog Timer
[单片机]
S3C2440内部中断和外部中断
1.中断分两大类:内部中断和外部中断。 2.外部中断。24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体参考datesheet数据手册。 寄存器:EXTINT0-EXTINT2:三个寄存器设定EINT0-EINT23的触发方式。 EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。 EINTPEND:这个是中断挂起寄存器,清除时要写1,后面还有几个是写1清除。当一个外部中断(EINT4-EINT23)发生后,那么相应的位会被置1。为什么没有EINT0-EINT3,呵呵,看看SRCPND就知道了
[单片机]