嵌入式系统设计与实践:Linux篇
上QQ阅读APP看书,第一时间看更新

2.4 S3C2410处理器概述

S3C2410处理器是韩国Samsung公司基于ARM公司的ARM920T处理器核,开发的32位RISC微处理器,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache, MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer, I/O口,RTC,8路10位ADC, Touch Screen接口,IIC-BUS接口,IIS-BUS接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。

核心板的尺寸仅相当于名片的2/3大小,开发商可以充分发挥想象力,设计制造出小体积,高性能的嵌入式应用产品。

2.4.1 S3C2410芯片的功能单元

S3C2410芯片集成了大量的功能单元,包括:

● 内部1.8V,存储器3.3V,外部I/O3.3V,16KB数据Cache,16KB指令Cache, MMU。

● 内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。

● LCD控制器,一个LCD专业DMA。

● 4个带外部请求线的DMA。

● 3个通用异步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道SPI。

● 一个多主IIC总线,一个IIS总线控制器。

● SD主接口版本1.0和多媒体卡协议版本2.11兼容。

● 两个USB HOST,一个USB DEVICE(VER1.1)。

● 4个PWM定时器和一个内部定时器。

● 看门狗定时器。

● 117个通用I/O。

● 56个中断源。

● 24个外部中断。

● 电源控制模式:标准、慢速、休眠、掉电。

● 8通道10位ADC和触摸屏接口。

● 带日历功能的实时时钟。

● 芯片内置PLL。

● 设计用于手持设备和通用嵌入式系统。

● 16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。

● 带MMU的先进的体系结构支持WinCE、EPOC32、Linux。

● 指令缓存(Cache)、数据缓存、写缓存和物理地址TAG RAM,减小了对主存储器带宽和性能的影响。

● ARM920T CPU核支持ARM调试的体系结构。

● 内部先进的位控制器总线(AMBA)(AMBA2.0, AHB/APB)。

2.4.2 S3C2410芯片的系统管理

● 小端/大端支持

● 地址空间:每个BANK为128MB(全部为1GB)。

● 每个BANK可编程为8/16/32位数据总线。

● BANK0到BANK6为固定起始地址。

● BANK7可编程BANK起始地址和大小。

● 一共8个存储器BANK。

● 前6个存储器BANK用于ROM、SRAM和其他。

● 两个存储器BANK用于ROM、SRAM和SDRAM(同步随机存储器)。

● 支持等待信号用以扩展总线周期。

● 支持SDRAM掉电模式下的自刷新。

● 支持不同类型的ROM用于启动(NOR/NAND FLASH、EEPROM和其他)。

在时钟方面S3C2410也有突出的特点,该芯片集成了一个具有日历功能的RTC和具有PLL(MPLL和UPLL)的芯片时钟发生器。MPLL产生主时钟,能够使处理器工作频率最高达到203MHz。这个工作频率能够使处理器轻松运行于Windows CE, Linux等操作系统以及进行较为复杂的信息处理。UPLL产生实现主从USB功能的时钟。

S3C2410将系统的存储空间分成8组(Bank),每组大小是128MB,共1G。Bank0到Bank5的开始地址是固定的,用于ROM和SRAM。Bank6和Bank7用于ROM, SRAM或SDRAM,这两个组可编程且大小相同。Bank7的开始地址是Bank6的结束地址,灵活可变。所有内存块的访问周期都可编程。S3C2410采用nGCS [7:0]8个通用片选信号选择这些组。

2.4.3 S3C2410芯片的启动模式

S3C2410支持从NAND FLASH启动,NAND FLASH具有容量大,比NOR FLASH价格低等特点。系统采用NAND FLASH与SDRAM组合,可以获得非常高的性价比。S3C2410具有三种启动方式,可通过OM [1:0]管脚通过复位期间上拉下拉电阻的电平逻辑进行选择,当:

OM[1:0]=00时,处理器通过NAND FLASH启动;

OM[1:0]=01时,处理器通过16位宽的ROM启动;

OM[1:0]=10时,处理器通过32位宽的ROM启动;

OM[1:0]=11时,处理器处于测试模式。

当处理器从NAND FLASH启动时,内置的NAND FLASH将访问控制接口,并将代码自动加载到容量为4KB的内部SRAM中并且运行,SRAM的起始地址空间为0x00000000,然后SRAM中的引导程序将操作系统镜像加载到SDRAM中,操作系统就在SDRAM中运行。

2.4.4 S3C2410系统结构

S3C2410系统结构主要由两大部分构成: ARM920T内核及片内外设。

ARM920T内核包括三部分:ARM9内核ARM9TDMI、32KB的Cache、MMU,如图2.8所示。片内外设分为高速外设和低速外设,分别用AHB总线和APB总线。

图2.8 S3C2410的结构

2.4.5 S3C2410的引脚分布及信号描述

S3C2410引脚图如图2.9所示,在图中画实心的引脚标记为M8,因此引脚处于M行,第8列,各引脚的功能分布可查阅相关资料。

图2.9 S3C2410引脚

S3C2410芯片上有117个多功能I/O引脚.分别是:

端口A(GPA):23个输出端口;

端口B(GPB):11个输入/输出端口;

端口C(GPC):16个输入/输出端口;

端口D(GPD):16个输入/输出端口;

端口E(GPE):16个输入/输出端口;

端口F(GPF):8个输入/输出端口;

端口G(GPG):16个输入/输出端口;

端口H(GPH):11个输入/输出端口。

每个端口都可以通过软件配置寄存器来满足不同系统和设计的需要。在运行主程序之前,必须先对每一个用到的引脚的功能进行设置。如果某些引脚的复用功能没有使用,那么可以先将该引脚设置为I/O口。

2.4.6 S3C2410芯片与端口相关的寄存器

(1)端口控制寄存器(GPACON—GPHCON):在S3C2410芯片中,大部分引脚是多路复用的,所以要确定每个引脚的功能。PnCON(端口控制寄存器)能够定义引脚功能。如果GPF0—GPF7和GPG0—GPG7被用作掉电模式下的唤醒信号,那么这些端口必须配置成中断模式。

(2)端口数据寄存器(GPADAT—GPHDAT):如果端口定义为输出口,那么输出数据可以写入PDATn中的相应位;如果端口定义为输入口,那么输入数据可以从PDATn相应的位中读入。

(3)端口上拉寄存器(GPBUP—GPHUP):通过配置端口上拉寄存器,可以使该组端口与上拉电阻连接或断开。当寄存器中相应的位配置为0时,该引脚接上拉电阻;当寄存器中相应的位配置为1时,该引脚不接上拉电阻。

(4)外部中断控制寄存器(EXTINTn):通过不同的信号方式可以使24个外部中断被请求。EXTINTn寄存器可以根据外部中断的需要,将中断触发信号配置为低电平触发,高电平触发,下降沿触发,上升沿触发和边沿触发几种方式。

2.4.7 端口A引脚定义及功能设置

端口A(GPA)共有23个输出引脚,其引脚功能如表2.2所示。

表2.2 端口A引脚定义

在端口A中控制寄存器GPACON地址是0x56000000,数据寄存器GPADAT地址是0x56000004, GPACON复位默认值是0x7FFFFF。

端口A与端口B—H在功能选择方面有所不同,GPACON中每一位对应一根引脚,共23根引脚。当某位设为0时,相应引脚设置为输出引脚,此时可以在GPADAT中相应位写入0或1,让此引脚输出低电平或高电平;当GPACON某位设为1时,相应引脚为地址线或用于地址控制,此时GPADAT无用。一般而言GPACON通常设为全1,以便访问外部存储器件。

2.4.8 端口B-H引脚定义及功能设置

端口B—H在寄存器操作方面完全相同。如果用x表示B—H中的一个字符,即GPxCON中每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保留不用。GPxDAT用于读/写引脚:当引脚设为输入时,读此寄存器可知相应引脚的状态是高是低;当引脚设为输出时,写此寄存器相应位可令此引脚输出低电平或高电平。GPxUP:某位为0时,相应引脚无内部上拉;为1时,相应引脚使用内部上拉,端口B—H引脚定义如表2.3-2.9所示。

表2.3 端口B引脚定义

在端口B中控制寄存器GPBCON地址是0x56000010,数据寄存器GPBDAT地址是0x56000014,上拉电阻寄存器GPBUP地址为0x56000018, GPBCON复位默认值为0x0, GPBUP复位默认值为0x0。

例如:通过内存映射把GPBCON寄存器地址0x56000010映射到标识符GPBCON上,把GPBDAT寄存器地址0x56000014映射到标识符GPBDAT上,并设置GPB7为输出口,输出为0,用C语言的语句可表示为:

        #define GPBCON (*(volatile unsigned long *)0x56000010)
        #define GPBDAT (*(volatile unsigned long *)0x56000014)
        GPBCON=0x00004000; //设置GPB7为输出口,两个位控制1个引脚,00输入、01输出
        GPBDAT=0x00000000; //令GPB7输出0

如果使用端口映射,就必须用汇编语言完成对设备的控制,上述C程序可以改写为:

        LDR R0, =0x56000010; R0设为GPBCON寄存器,用于选择端口B引脚
        MOV R1, #0x00004000
        STR R1, [R0];设置GPB7为输出口
        LDR R0, =0x56000014; R0设为GPBDAT寄存器,此寄存器用于读/写端口B各引脚的数据
        MOV R1, #0x00000000;此值改为0x00000080,可让LED1熄灭
        STR R1, [R0]; GPB7输出0, LED1点亮

表2.4 端口C引脚定义

在端口C中控制寄存器GPCCON地址是0x56000020,数据寄存器GPCDAT地址是0x56000024,上拉电阻寄存器GPCUP地址为0x56000028, GPCCON复位默认值为0x0, GPCUP复位默认值为0x0。

例如:

        #define rGPCCON  (*(volatile unsigned*)0x56000020)   //Port C控制寄存器
        #define rGPCDAT  (*(volatile unsigned*)0x56000024)   //Port C数据寄存器
        #define rGPCUP   (*(volatile unsigned*)0x56000028)   //Port C上拉电阻禁止寄
    存器

表2.5 端口B引脚定义

在端口D中控制寄存器GPDCON地址是0x56000030,数据寄存器GPDDAT地址是0x56000034,上拉电阻寄存器GPDUP地址为0x56000038, GPDCON复位默认值为0x0, GPDUP复位默认值为0xF000。

表2.6 端口E引脚定义

在端口E中控制寄存器GPECON地址是0x56000040,数据寄存器GPEDAT地址是0x56000044,上拉电阻寄存器GPEUP地址为0x56000048, GPECON复位默认值为0x0, GPEUP复位默认值为0x0。

表2.7 端口F引脚定义

在端口F中控制寄存器GPFCON地址是0x56000050,数据寄存器GPFDAT地址是0x56000054,上拉电阻寄存器GPFUP地址为0x56000058, GPFCON复位默认值为0x0, GPFUP复位默认值为0x0。

表2.8 端口G引脚定义

在端口G中控制寄存器GPGCON地址是0x56000060,数据寄存器GPGDAT地址是0x56000064,上拉电阻寄存器GPGUP地址为0x56000068, GPGCON复位默认值为0x0, GPFUP复位默认值为0xF800。

表2.9 端口H引脚定义

在端口H中控制寄存器GPHCON地址是0x56000070,数据寄存器GPHDAT地址是0x56000074,上拉电阻寄存器GPHUP地址为0x56000078, GPHCON复位默认值为0x0, GPHUP复位默认值为0x0。

例如:

设有LED1, LED2分别接GPE11, GPE12两脚,如图2.10所示,如何控制GPE11, GPE12两脚的输出,让LED灯各闪烁10次。

图2.10 LED与S3C2410

    void LED_DispOn(void)
    {
     rGPEDAT=rGPEDAT | (0x03 << 11);
    }
    void LED_DispOff(void)
    {
     rGPEDAT=rGPEDAT & (~ (0x03 << 11));
    }
    int main( void)
    {
      int  i ;
      rGPECON= ( rGPECON & (~(0x0F<<22))) | (0x05<<22) ;
      //// rGPECON[25:22]=0101b,设置GPE11,12两脚为GPIO输入模式
      for(i=0; i<10; i++)
      {
          LED_DispOff( ) ;
          Delay(5);   /////表示延迟5s
          LED_DispOn(  ) ;
          Delay(5);
          …………
        }

    }
    思考:
    阅读下列程序,请分析程序的功能
    #define GPBCON  (*(volatile unsigned long *)0x56000010)
    #define GPBDAT  (*(volatile unsigned long *)0x56000014)
    #define GPFCON  (*(volatile unsigned long *)0x56000050)
    #define GPFDAT  (*(volatile unsigned long *)0x56000054)
    /* 设根据硬件特性LED1—LED4 对应GPB7—GPB10 */
    #define GPB7_out  (1<<(7*2))
    #define GPB8_out  (1<<(8*2))
    #define GPB9_out  (1<<(9*2))
    #define GPB10_out (1<<(10*2))
    /* 设根据硬件特性键盘K1—K3对应GPF1—GPF3, K4对应GPF7 */
    #define GPF1_in   ~(3<<(1*2))
    #define GPF2_in   ~(3<<(2*2))
    #define GPF3_in   ~(3<<(3*2))
    #define GPF7_in   ~(3<<(4*2))
    int main()
    {
      //LED1—LED4对应的4根引脚设为输出
      GPBCON=GPB7_out | GPB8_out | GPB9_out | GPB10_out ;
      //K1—K4 对应的4根引脚设为输入
      GPFCON &= GPF1_in & GPF2_in & GPF3_in & GPF7_in ;
      while(1)
        {
        //若Kn为0(表示按下),则令LEDn为0(表示点亮) ,11110000000
        GPBDAT = ((GPFDAT & 0x0e)<<6) | ((GPFDAT & 0x80)<<3);
        }
      return 0;
    }

2.5 嵌入式开发板

目前有很多公司研发自己的S3C2410开发板,虽然从功能上讲有些差异,但原理基本一致。S3C2410开发板外围电路接口非常丰富,功能强大,适用于各种手持设备、消费电子和工业控制设备的开发。如图2.11所示的是某企业生产的S3C2410开发板的实物图。

图2.11 某企业生产的S3C2410开发板

在图2.12中的S3C2410开发板器件布局图,数模转换芯片接口中芯片内部集成8通道10bitADC,有电位器调节的电压输入、温度传感器输入、D/A输出引脚经隔离后的输入;可以外接SPI接口的键盘控制芯片ZLG7289;双Ethernet以太网接口可以用CS8900扩展的10M以太网接口或DM9000扩展的10M/100M以太网接口;系统带有三部分的LED显示。通过ZLG7290驱动的8位8段数码管,显示数字信息,通过总线驱动的8×8数码管点阵,显示点阵信息;VIDEO扩展接口,通过专用视频编码芯片CH7004输出如下形式的视频信号:VGA信号,可以直接连接显示器;电视机接口(S端子)直接连接电视机;视频口(AV端子)直接连接电视机。

图2.12 某企业生产的S3C2410开发板器件布局

IIS音频扩展接口,通过音频扩展芯片支持MIC输入及耳机音频输出;为了方便视听,板载音频功放和两个1W的喇叭,左右声道经功放驱动后直接由板载喇叭发声,当然也可以通过板上跳线关闭这个在线播放的功能IDE接口,通过板载的IDE接口还可以直接连接笔记本的IDE硬盘,支持DMA方式。

扩展总线接口,总线接口通过两个96P×2的欧式座扩展出来,不仅引出了总线的信号,而且通过板载的CPLD扩展了多个I/O口,方便了用户的使用;而且,结实耐用的欧式座适用用户的不断插拔;通过扩展总线可以扩展如下扩展模块:

FPGA(Altera Cyclone)设计扩展模块:实现MCU+FPGA架构的综合设计;

DSP(TI 5402)扩展模块:实现MCU+DSP架构的综合设计;

GPS扩展模块:实现地理信息相关的综合设计;

GPRS扩展模块:实现远程无线通信的综合设计;

电机扩展模块:包括步进、直流、交流电机模块,实现电机相关的综合控制设计;

指纹传感器(ATMEL FCD4B14)扩展模块:实现信号处理的综合设计。