第三章 ARM9芯片S3C2410片上资源.

Slides:



Advertisements
Similar presentations
公文处理常见问题分析 2015 年 9 月. Page  2 目 录 公文的定义 1 公文格式和行文规则中常见问题 2 常用文种的注意事项 3 公文写作的步骤方法 4.
Advertisements

《单片机原理及应用》 《微型计算机原理及接口技术 》 授课专业:测控13级 授课学时: 78 学时 理论教学:52学 实验教学:26学时
嵌入式系统与单片机 北京科技大学电子信息系.
2017年3月5日 单片机原理与应用 背景知识调查.
第二章 微型计算机系统 第一节 基本术语和基本概念 第二节 计算机系统的基本构成 第三节 微机系统的硬件组成 第四节 微机系统的软件组成.
第二章 嵌入式处理器.
业界最低功耗无线抄表方案 30年超长待机 刘 云 技术中心 第一: 抄表系统的类型,介绍 第二: 无线抄表的系统构成,集中器
第一章 嵌入式系统概况 大连理工大学 马洪连.
MTK各芯片简介 整理:张平.
Chap4 電腦硬體基本單元 高中資訊科技概論 松崗圖書公司.
第一章 计算机基础知识 计算机的发展简史 1 计算机软件系统 6 计算机的定义和分类 2 微型计算机的组成 7 计算机的特点和用途 3
IC 燒錄 / Flash 測試 Cost Effective Solution.
实验四 利用中规模芯片设计时序电路(二).
嵌入式系统应用 概述 随着现代物流业仓储、超市等行业的快速发展,物品流动的速度越来越快,仓储库存周期也越来越短。这样物流仓储盘点行业的压力也越来越大,传统的人工盘点方式已经不能适应现代物流的发展。为了解决这一问题,国际上一些物流先进国家已经采用专业的盘点设备——盘点机,用于物流盘点。 我们选取了一个十分典型的国产盘点机进行介绍。其微处理器选型是采用韩国三星公司生产的S3C2410微处理器,操作系统采用了Windows.
高等学校嵌入式系统设计教材 ARM9处理器C语言编程标准教程 侯殿有 才华 编著 人民邮电出版社.
Chapter 13 輸入/輸出系統 (I/O Systems)
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
3.3 通用的ARM微处理器介绍 现将几种通常使用较为广泛的Samsung S3C44B0X (ARM7TDMI内核)、 S3C2410B (ARM920T核)和Intel PXA25X/27x(Xscale核)微处理器内部结构、特点及功能介绍一下。
C H A P T E R 9 ARM处理器核.
模块1 计算机基本操作技术 项目1.1 认识计算机.
單晶片原理與應用 魏兆煌 整理 南台科技大學 電機系 Sep
第四章 BootLoader开发 附-s3c2410/s3c2440处理器介绍
TERAWINS T302B数码相框方案 杨春波
主讲教师:唐大仕 第5讲 计算机硬件 主讲教师:唐大仕
第一章 嵌入式系统开发基础 本章介绍了嵌入式系统开发的基础知识,从嵌入式计算机的历史由来、嵌入式系统的定义、嵌入式系统的基本特点、嵌入式系统的分类及应用、嵌入式系统软硬件各部分组成、嵌入式系统的开发流程、嵌入式技术的发展趋势等方面进行了介绍,涉及到嵌入式系统开发的基本内容,使读者系统地建立起的嵌入式系统整体概念。
第7章 中斷系統.
C H A P T E R 11 体系结构对操作系统的支持.
ARM存储器结构 ARM架构的处理器的存储器寻址空间有4G字节 ,存储空间可以分为 :
S3c2410电路设计(以北京博创s3c2410-s实验箱为例讲解)
C H A P T E R 10 存储器层次.
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
YM100开发实验板 演讲人:熊小燕 2009年月12月16日
5 Computer Organization (計算機組織).
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
C H A P T E R 8 体系结构对系统开发的支持.
嵌入式系统设计与开发 第1章 概述 第2章 ARM及其编程模型 第3章 ARM指令集 第4章 嵌入式程序设计
第14章 Bootloader基本概念與燒錄.
商用運輸系統智慧化整體研究發展計畫 -計程車內安全管理系統之研發與示範(I)
嵌入式系统教案 武汉创维特信息技术有限公司 2018/11/27.
Block diagram BB —逻辑 —音频 —电源管理 HW interface. Block diagram BB —逻辑 —音频 —电源管理 HW interface.
2018/11/29 The Right silicon for your next BIG idea K3智能手机参考设计介绍.
第七章设备管理 7. 1 概述 7. 2 I/O软件的组成 7. 3 I/O硬件特点 7. 4 有关技术 7. 5 网络设备 7
ChipON工业级汽车级MCU在电动工具领域中的应用
热释电晶体光源用于X射线荧光分析及控制电子学研究
第1章 嵌入式系统概述 嵌入式系统的发展、定义、特点、组成、分类 嵌入式系统硬件核心、软件核心 嵌入式实时操作系统
第四章 BootLoader开发 附-s3c2410/s3c2440中断控制器介绍
嵌入式系統概論-以S3C2440核心為架構 第1章 嵌入式系統概念.
嵌入式系统设计与实例开发 ——ARM与C/OS-Ⅱ 第六讲 基于ARM的嵌入式硬件结构设计.
深圳市藏海科技有限公司—CH7852 建议零售价格:140元 上市时间:2017年 12 月 11 日
第2章 ARM微处理器硬件结构 计算机体系结构分类 ARM版本及系列 ARM处理器结构 存储系统机制.
逆向工程-汇编语言
CPU结构和功能.
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
(第2版).
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第3章 嵌入式系统的设计方法 3.1 嵌入式系统的总体结构 3.2 嵌入式系统开发过程 3.3 ADS集成开发环境的使用
微机系统的组成.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
第2章ARM/THUMB微处理器结构及指令系统
嵌入式系统教案 武汉创维特信息技术有限公司 2019/4/18.
(Random Access Memory)
第二章ADS1.2开发环境创建与简介.
单片机原理及应用 (C语言版) 第8章 单片机系统扩展
第六章 S3C2410的串口UART及编程 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
DSP技术与应用 电子与信息技术系.
一个实时嵌入式操作系统移植问题研究 报告人:荣峰华.
Presentation transcript:

第三章 ARM9芯片S3C2410片上资源

主要内容: 3.1 S3C2410处理器介绍 3.2 S3C2410处理器片上资源的定义和使用 3.3 参考软件项目2410test.mcp

3.1 S3C2410处理器介绍 本节介绍S3C2410处理器的体系结构、特点和应用领域,AMBA (Advanced Microcontroller Bus Architecture)片上总线协议、AHB(dvanced High Performance Bus)高级高性能总线 、APB (Advanced Peripheral Bus)外围总线、总线特点和应用,存储器存储空间映射等。

S3C2410微处理器是一款由Samsung公司为手持设备设计的低功耗、高度集成的基于ARM920T核的微处理器。为了降低系统总成本和减少外围器件,这款芯片中还集成了下列部件:16KB指令Cache、16KB数据Cache、MMU、外部存储器控制器、LCD(Liquid Crystal Display)控制器(STN和TFT)、NAND Flash控制器、4个DMA通道、3个UART通道、1个I2C(双向二线制同步串行总线)总线控制器、1个I2S总线控制器,以及4个PWM定时器和一个内部定时器、通用I/O口、实时时钟、8通道10位ADC和触摸屏接口、USB主、USB从、SD/MMC卡接口等。现在它广泛应用于PDA、移动通讯、路由器、工业控制等领域,其内部结构如图3-1所示。

图3-1 S3C2410X结构框图

3.1.1 AMBA、AHB、APB 总线特点 AMBA规范主要包括AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。

AMBA 2.0规范包括四个部分:AHB、ASB、APB和Test Methodology。AHB的相互连接采用了传统的带有主模块和从模块的共享总线,接口与互连功能分离,这对芯片上模块之间的互连具有重要意义。AMBA已不仅是一种总线,更是一种带有接口模块的互连体系。下面将简要介绍比较重要的AHB和APB总线。

3.1.2 S3C2410处理器体系结构 . ARM920T核,16位/32位RISC结构和ARM精简指令集; . ARM MMU,支持Windows CE, Linux等操作系统; . 指令Cache、数据Cache、写缓冲; . 支持ARM调试结构,片上ICE支持JTAG调试方式

3.1.3 S3C2410处理器管理系统 . 支持大端(Big Endian)/小端(Little Endian)模式; . 地址空间为每个内存块128MB(一共1GB),每个内存块支持8/16/32位数据总线编程; . 8个内存块,6个用于ROM、SRAM和其它,2个用于ROM/SRAM/SDRAM; . 1个起始地址和大小可编程的内存块 (Bank7); . 7个起始地址固定的内存块(Bank0~Bank6); . 所有内存块可编程寻址周期; . 支持SDRAM自动刷新模式; . 支持多种类型ROM启动,包括NOR/NAND Flash、EEPROM等。

3.1.4 S3C2410处理器存储器映射 S3C2410的存储空间映射如图3-2所示。

图3-2 S3C2410存储区地址映射

3.1.5 S3C2410处理器时钟和电源管理 1.时钟 S3C2410的主时钟由外部晶振或者外部时钟提供,选择后可以提供3种时钟信号, 分别是CPU使用的FCLK、AHB总线使用的HCLK和APB总线使用的PCLK。 2. 时钟源选择 对时钟源的选择是通过OM[1:2]实现的,如表3-1所示。

表3-1 时钟源选择

S3C2410引脚的OM[3:2]=00时,晶体为MPLL CLK和UPLL CLK提供时钟源;OM[3:2]=01时,晶体为MPLL CLK提供时钟源,EXTCLK为UPLL CLK提供时钟源;OM[32]=10时,EXTCLK为MPLL CLK提供时钟源,晶体为UPLL CLK提供时钟源;OM[3:2]=11时,EXTCLK为MPLL CLK和UPLL CLK提供时钟。

3. 时钟控制逻辑 S3C2410支持HCLK、FCLK和PCLK的按比率选择,其比率是通过时钟分频寄存器CLKDIV中的HDIVN和PDIVN控制的,如表3-2所示。 表3-2 分频设定表

4. 电源管理 S3C2410电源管理模块通过4种模式有效地控制功耗,即正常(Normal)模式、省电(Slow)模式、空闲(Idle)模式和断电(Power-off)模式。 • Normal模式:为CPU和所有的外设提供电源,所有的外设开启,该模式下的功耗最大。这种模式允许用户通过软件控制外设,可以断开提供给外设的时钟以降低功耗。 • Slow模式:采用外部时钟生产FCLK的方式,此时电源的功耗取决于外部时钟。

5. 时钟和电源管理寄存器 S3C2410通过相应控制寄存器实现对时钟和电源的管理,相关寄存器使用参见表3-3。

3.2 S3C2410处理器片上资源的定义和使用 和开发MCS-51单片机一样,S3C2410在头文件2410addr.h中,将S3C2410的所有硬件资源都进行了定义,我们在编写S3C2410的驱动程序时必需引用这个头文件。 2410addr.h将系统所有的资源进行了宏定义,宏的名称就是所定义的寄存器的名字前面加一个小写的“r”,方便记忆。

2410addr.h内容包括:Memory control、USB Host、INTERRUPT、DMA、CLOCK & POWER MANAGEMENT、LCD CONTROLLER、NAND flash、UART、PWM TIMER、USB DEVICE、WATCHDOG TIMER、IIC、IIS、I/O PORT、RTC、ADC、SPI、ISR、SD Interface等,近20类。

3.3 参考软件项目2410test.mcp 在随书提供的资料中,有一个2410test.mcp项目,里面包括几乎所有S3C2410硬件驱动的C语言例子和头文件,仔细阅读这些程序对我们编程有很大参考价值,应熟悉这些程序。 项目主要部分列出如下,并做必要解释:

//-------------------------------------------------------------------------------------------------------- // 引入所有实验所需头文件 //------------------------------------------------------------------------------------------------------- #include <stdlib.h> #include <string.h> #include "def.h" #include "option.h" #include "2410addr.h" #include "2410lib.h"

#include "2410slib.h" #include "2410etc.h" #include "2410IIC.h" #include "2410iis.h" #include "2410int.h" #include "2410RTC.h" #include "2410swi.h" #include "timer.h" #include "adc.h" #include "dma.h" #include "dma2.h" #include "eint.h" #include "extdma.h" #include "k9s1208.h" #include "mmu.h"

#include "nwait.h" #include "sdi.h" #include "stone.h" #include "ts_auto.h" #include "ts_sep.h" #include "usbfifo.h" #include "IrDA.h" #include "lcd.h" #include "lcdlib.h" #include "glib.h" #include "palette.h" #include "spi.h" #include "uart0.h" #include "uart1.h" #include "uart2.h" #include "etc.h" #include "flash.h" #include "idle.h" #include "pd6710.h"

#include "pll.h" #include "power.h" #include "pwr_c.h" #include "stop.h" //---------------------------------------------------------------------------------------------------------- // 定义一个二维的指针数组,数组中第一列是函数名,第二列是函数功能提示 //-------------------------------------------------------------------------------------------------------- void * function[][2]= { //ADC, TSP

(void *)Test_Adc, "ADC ", (void *)Test_DMA_Adc, "ADC with DMA ", (void *)Ts_Sep, "ADC TSP Seperate ", (void *)Ts_Auto, "ADC TSP Auto ", //DMA (void *)Test_DMA, "DMA M2M ", (void *)Test_DMAWorst, "DMA Worst Test ", (void *)Test_Dma0Xdreq, "External DMA ", //EINT (void *)Test_Eint, "External Interrupt ", //IIC (void *)Test_Iic, "IIC(KS24C080)INT ", (void *)Test_Iic2, "IIC(KS24C080)POL ", //IIS

(void *)Record_Iis, "Reco IIS UDA1341 ", (void *)Test_Iis, "Play IIS UDA1341 ", //Interrupt (void *)Test_Fiq, "FIQ Interrupt ", (void *)Change_IntPriorities, "Change INT Priority ", //IrDA (void *)Test_IrDA_Rx, "UART2 IrDA Rx ", (void *)Test_IrDA_Tx, "UART2 IrDA Tx ", //LCD (void *)Test_Lcd_Stn_1Bit, "STN 1Bit ", (void *)Test_Lcd_Stn_2Bit, "STN 2Bit ", (void *)Test_Lcd_Stn_4Bit, "STN 4Bit ", (void *)Test_Lcd_Cstn_8Bit, "CSTN 8Bit ", (void *)Test_Lcd_Cstn_8Bit_On, "CSTN 8Bit On ", (void *)Test_Lcd_Cstn_12Bit, "CSTN 12Bit ", (void *)Test_Lcd_Tft_8Bit_240320, "TFT240320 8Bit ", (void *)Test_Lcd_Tft_8Bit_240320_On, "TFT240320 8Bit On ",

(void *)Test_Lcd_Tft_16Bit_240320, "TFT240320 16Bit ", (void *)Test_Lcd_Tft_8Bit_640480_Bswp, "TFT640480 BSWP ", (void *)Test_Lcd_Tft_8Bit_640480_Palette, "TFT640480 Palette ", (void *)Test_Lcd_Tft_16Bit_640480_Hwswp,"TFT640480 HWSWP ", //Memory //MPLL (void *)Test_PLL, "MPLL Change ", (void *)ChangePLL, "MPLL MPS Change ", (void *)Test_PllOnOff, "MPLL On/Off ", //PMS

(void *)Test_SlowMode, "PMS Slow ", (void *)Test_HoldMode, "PMS Hold ", (void *)Test_IdleMode, "PMS Idle ", (void *)Test_MMUIdleMode, "PMS Idle(MMU) ", (void *)Test_IdleModeHard, "PMS Idle Hard ", (void *)Test_InitSDRAM, "PMS SDRAM Init ", (void *)Test_StopMode, "PMS STOP ", (void *)Test_PowerOffMode, "PMS Power-Off STOP ", (void *)Test_PowerOffMode_100Hz, "PMS Power-Off 100Hz ", (void *)MeasurePowerConsumption, "PMS Measure Power ", //RTC (void *)Test_Rtc_Alarm, "RTC Alarm ", (void *)Display_Rtc, "RTC Display ", (void *)RndRst_Rtc, "RTC Round Reset ", (void *)Test_Rtc_Tick, "RTC Tick ",

//SDI (void *)Test_SDI, "SDI Write/Read ", //SPI (void*) Test_Spi_MS_int, "SPI0 RxTx Int ", (void *)Test_Spi_MS_poll, "SPI0 RxTx POLL ", (void *)Test_Spi_M_Tx_DMA1, "SPI0 Master Tx DMA1 ", (void *)Test_Spi_S_Rx_DMA1, "SPI0 Slave Rx DMA1 ", (void *)Test_Spi_M_Rx_DMA1, "SPI0 Master Rx DMA1 ", (void *)Test_Spi_S_Tx_DMA1, "SPI0 Slave Tx DMA1 ", (void *)Test_Spi_M_Int, "SPI0 Master RxTx INT", (void *)Test_Spi_S_Int, "SPI0 Slave RxTx INT ", //Timer (void *)Test_TimerInt, "Timer Interrupt ", (void *)Test_Timer, "Timer Tout ", //UART

(void *)Test_Uart0_Int, "UART0 Rx/Tx Int ", (void *)Test_Uart0_Dma, "UART0 Rx/Tx DMA ", (void *)Test_Uart0_Fifo, "UART0 Rx/Tx FIFO ", (void *)Test_Uart0_AfcTx, "UART0 AFC Tx ", (void *)Test_Uart0_AfcRx, "UART0 AFC Rx ", (void *)Test_Uart1_Int, "UART1 Rx/Tx Int ", (void *)Test_Uart1_Dma, "UART1 Rx/Tx DMA ", (void *)Test_Uart1_Fifo, "UART1 Rx/Tx FIFO ", (void *)Test_Uart1_AfcTx, "UART1 AFC Tx ", (void *)Test_Uart1_AfcRx, "UART1 AFC Rx ", (void *)Test_Uart2_Int, "UART2 Rx/Tx Int ", (void *)Test_Uart2_Dma, "UART2 Rx/Tx DMA ", (void *)Test_Uart2_Fifo, "UART2 Rx/Tx FIFO ", //USB

(void *)Test_USBFIFO, "USB FIFO Test ", //WDT (void *)Test_WDT_IntReq, "WDT INT Request ", //ETC (void *)Test_XBREQ, "External Bus Reqest ", (void *)Test_NonalignedAccess, "NonAlgined Access ", (void *)Test_PD6710, "PC Card (PD6710) ", (void *)ReadPageMode, "Read Page Mode ", (void *)Test_SwiIrq, "SWI ", (void *)Test_WaitPin, "External Wait ", (void *)Test_ISram, "Stone Test ", (void *)Test_NecInterrupt, "ETC NEC Int ", (void *)Test_BattFaultInterrupt, "nBATT_FAULT int ", //NAND, NOR Flash (void *)K9S1208_PrintBadBlockNum, "NAND View Bad Block ", (void *)K9S1208_PrintBlock, "NAND View Page ",

(void *)K9S1208_Program, "NAND Write ", (void *)TestECC, "NAND ECC ", (void *)ProgramFlash, "NOR Flash Program ", 0,0 }; //--------------------------------------------------------------------------------------------------------- // 主程序 void Main(void) { int i; MMU_Init(); //内存管理初始化 ChangeClockDivider(1,1); // 定义FCLK、HCLK,PCLK比例 //1:2:4 ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz Port_Init(); //I/O口初始化 Isr_Init(); //中断初始化 Uart_Init(0,115200) ; //选串口0与上位机通信,波特率115200

Uart_Select(0); //选串口0 Check_PowerOffWakeUp(); //唤醒电源进入正常工作状态 while(1) { i = 0; Uart_Printf("%2d:%s",i,function[i][1]); // 在超级终端上显示主菜单 i++; if((int)(function[i][0])==0) //显示结束跳出

{ Uart_Printf("\n"); break; } if((i%4)==0) Uart_Printf("\n"); //每行显示4项 Uart_Printf("\nSelect the function to test : "); //提示:选择某项实验 i = Uart_GetIntNum(); //读实验项目号放i中 Uart_Printf("\n"); //超级终端上显示内容回车换行 rGPGCON = (rGPGCON & 0xfffffcff) | (1<<8);//GPG4做输出 rGPGDAT = (rGPGDAT & 0xffef) | (1<<4); // GPG4输出1控制LCD显示开 if(i>=0 && (i<(sizeof(function)/8)) ) //指针数组function中每行二列指针,每指针占4字节,总实验项数是sizeof(function)/8 ( (void (*)(void)) (function[i][0]) )(); // 将function[i][0]转化为函数的指针并执行该函数,参数为0。