ARM总线架构(S3C2440)

2020-02-14来源: eefocus关键字:ARM  总线架构  S3C2440

S3C2440集成了丰富了外设控制器(LCD控制器、USB Device控制器、USB Host控制器、NAND FLASH控制器、I2C控制器、SPI控制器等)。要控制这些外设就要设置相应控制器的寄存器以产生相应的驱动时序。学习S3C2440,主要是如何配置寄存器。下面是S3C2440特殊功能寄存器地址:


#define rBANKCON0  (*(volatileunsigned *)0x48000004) //Boot ROM control

#define rBANKCON1  (*(volatileunsigned *)0x48000008) //BANK1 control

#define rBANKCON2  (*(volatileunsigned *)0x4800000c) //BANK2 cControl


#define rBANKCON0  (*(volatileunsigned *)0x48000004) //Boot ROM control


#define rBANKCON1  (*(volatileunsigned *)0x48000008) //BANK1 control


#define rBANKCON2  (*(volatileunsigned *)0x4800000c) //BANK2 cControl


图1 内存映射


下面就来详细分析。

图2 S3C2440结构框图

    先介绍一下AMBA(Advanced Micro-Controller Bus Architecture)是由ARM Limited公司推出的On-Chip Bus片上总线规范,是目前芯片总线的主流标准。一开始AMBA 1.0只有ASB和APB,为了节省面积,这时候的总线协定都是采用3态的总线,到后来的AMBA 2.0版本,新增了AHB总线,共定义了3组总线:高性能总线(AdvancedHigh Performance Bus,AHB)、系统总线(AdvancedSystem Bus,ASB)和外设总线(Advanced PeripheralBus,APB)。

图3 典型的基于AMBA总线的系统

    关于AMBA总线的更多的内容可上网查看,中文的资料都有很多。由图2可知AHB总线上挂载了LCD控制器、中断控制器、USB Host控制器、电源管理、NAND控制器、Camera控制器、存储器控制器以及AHB to APB桥和DMA控制器。APB总线上挂载了UART控制器、I2C控制器、USB Device控制器、I3S控制器SDI/MMC控制器、GPIO、Watchdog/定时器、RTC、ADC、SPI、AC97。下面这段话是摘自S3C2440芯片手册:

"The S3C2440A holds 13 bus masters. They include DRAMrefresh controller, LCD_DMA, CAMIF DMA, DMA0,DMA1, DMA2, DMA3, USB_HOST_DMA,EXT_BUS_MASTER, Test interface controller (TIC) and ARM920T."

    S3C2440A有13个主设备。当AHB总线上的主设备读写从设备时,发出的地址经过AHB总线的译码器(通过内存映射表) 产生该地址所对应从设备的选择信号,选中从设备;这样就可以对从设备进行读写啦。

图4 AHB译码器

图5 译码器的具体实现代码

    译码器的内存映射表具有相对的独立性。如果AHB总线上的从设备发生了变化,必须对内存映射表进行修改以确保每个地址都对应正确的从设备。下面是内存映射表的一个例子。

图6 内存映射表

    使用了两种内存映射表:正常工作下的内存映射表和重新启动时的内存映射表。在正常工作时,微处理器的从设备包括内部RAM、外部RAM、外部ROM和AHB/APB桥;当系统重新启动时,系统的内存映射不包括内部RAM,而是将0x0000—0000至0x0000—03FF的内存地址段映射为nash。这个部分包含系统的启动和初始化代码。当系统启动完成初始化后,AMBA总线将产生一个Remap信号,送入译码器,将译码器的当前内存映射表改为正常工作状态下的内存映射表。


下面是S3C2440的地址映射


AHB Memory Map


Memory control          0x48000000  0x48000030


USB HOST                0x49000000  0x49000058


INTERRUPT               0x4a000000  0x4a00001c


DMA                     0x4b000000  0x4b0000e0


CLOCK & POWER MANAGEMENT          0x4c000000  0x4c000018


*LCD CONTROLLER                   0x4d000000  0x4d000060  0x4d000400(Palettestart address)


Nand Flash                        0x4E000000  0x4E00003C


Camera Interface                  0x4F000000  0x4F0000A0


 


APB Memory Map


UART0                             0x50000000  0x50000028


UART1                             0x50004000 0x50004028


UART2                             0x50008000  0x50008028


PWM TIMER                         0x51000000 0x51000040


USB DEVICE                        0x52000140 0x5200026c


WATCH DOG TIMER                   0x53000000  0x53000008


IIC                               0x54000000  0x54000010


IIS                               0x55000000   0x55000010


AC97                              0x5b000000  0x5b00001C


I/O PORT


A          0x56000000  0x56000004


B          0x56000004  0x56000018


C          0x56000020  0x56000028


D          0x56000030  0x56000038


E          0x56000040  0x56000048


F          0x56000050  0x56000058


G          0x56000060  0x56000068


H          0x56000070  0x56000078


J          0x560000d0  0x560000d8


other      0x56000080  0x560000cc


RTC        0x57000040  0x57000088


ADC        0x58000000  0x58000014


SPI        0x59000000  0x59000034


SD Interface          0x5a000000  0x5a000040


    总结:AHB总线上的译码器根据地址产生相应的片选信号,选中对应的设备。AHB总线上有一个AHB to APB 桥,桥是AHB总线的从设备,是APB总线上唯一的主设备。桥是一个协议转换器(AHB协议到APB协议的转换),它还要完成APB总线的地址译码工作。

关键字:ARM  总线架构  S3C2440 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488236.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:arm中tslib-1.4移植成功,但qt应用程序 触摸屏没有响应
下一篇:基于全志H3芯片的ARM开发环境搭建

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

海思ARM平台交叉编译zeroMQ
在使用海思的项目中要使用到ZeroMQ这个消息队列框架,之前在PC端使用感觉不错。所以通过要通过交叉编译,将其移植到ARM平台。移植方法,可以参考 https://blog.csdn.net/sishuihuahua/article/details/77203094  以下是我使用海思交叉编译工具的方法:一、配置编译器./configure --host=arm-himix100-linux --prefix=/opt/hisi-linux/zeromq-4.1.6/arm-zeromq  --without-libsodiumarm-himix100-linux   --host
发表于 2020-02-08
ARM常用汇编指令列表
发表于 2020-02-07
ARM常用汇编指令列表
ARM 处理器寻址方式之间接寻址的几种表达
我们以 LDR 指令为例来分别举例分析。LDR 指令的格式为:LDR{条件} 目的寄存器,<存储器地址>LDR 指令是字加载指令,用于从存储器中将一个 32 位的字数据送到目的寄存器中。该指令通常用于从存储器中读取 32 位的字数据到通用寄存器,然后对数据进行处理。当程序计数器 PC 作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。指令示例:LDR R3, [R4]             ; 将存储器地址为 R4 的字数据读入寄存器 R3LDR R3, [R1, #8]     
发表于 2020-02-07
ARM 汇编指令 DCD
简介DCD:数据定义( Data Definition )伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。语法格式:标号 DCD(或 DCDU) 表达式DCD(或 DCDU)伪指令用于分配一片连续的字存储单元并用指定的表达式初始化。其中表达式可以为程序标号或数字表达式。 DCD 也可用 “ &” 代替。用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。实例(STM32 启动文件):__Vectors       DCD     __initial_sp     
发表于 2020-02-07
ARM 汇编指令 ADR 与 LDR 使用
简介这两个都是伪指令:ADR 是小范围的地址读取伪指令,LDR 是大范围的读取地址伪指令。可实际使用的区别是: ADR 是将基于 PC 相对偏移的地址值或基于寄存器相对地址值读取的伪指令,而 LDR 用于加载 32 位立即数或一个地址到指定的寄存器中。以下面的汇编代码为例:.global _start_start:    ldr r0, loop    adr r0, loop    ldr r0, =looploop:    nop用以下命令完成汇编、链接操作,并输出反汇编文件[root@localhost asm]# arm
发表于 2020-02-07
arm架构64位(AArch64)汇编优化总结
1、参考https://blog.csdn.net/SoaringLee_fighting/article/details/81906495https://blog.csdn.net/SoaringLee_fighting/article/details/82155608https://blog.csdn.net/u011514906/article/details/38142177https://blog.csdn.net/listener51/article/details/825304642、前言本文是arm架构64位(AArch64执行状态) neon优化的总结文档,主要包括arm架构64位优化的基础知识,特殊用法,打印
发表于 2020-02-07
arm架构64位(AArch64)汇编优化总结
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved