2008年10月31日星期五

数电知识 数电常识

什么是数字电路:
数字电路是处理数字信号并能完成数字运算的电路。

什么是数字信号:
电信号通常分为模拟信号和数字信号两类。
模拟信号是连续变化的信号,
数字信号是断续变化(离散)的信号。
数字信号目前取二值信息,他用两个有一定数值范围的高低电平来表示,高电平为“1”, 低电平为“0”。

数字电路的特点:
1、处理的是数字信号,完成数字运算。还可以进行逻辑运算与判断。
2、电路结构简单,容易制造,便于集成,成本低,使用方便
3、工作准确可靠,精度高。

数字电路的分类:
按电路组成结构分类:分离电路和集成电路
按所用器件分类:双极型(DTL、TTL、ECL、IIL、HTL)和单极型(NMOS、PMOS、CMOS)。
按逻辑功能分类:组合逻辑电路和时序逻辑电路

数电知识 数字电路的竞争冒险

什么是竞争冒险
信号在通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号 的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变 化,成为“竞争”;往往导致出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。
如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在“冒险”。冒险是由变量的竞争引起的。冒险又分为逻辑冒险和功能冒险。
简言之:在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争,竞争产生冒险。

竞争冒险产生的原因?
1)根本原因:延迟
2)详细分析:竞争冒险的产生受到四个要素的制约,即:时间延迟、过渡时间、逻辑关系和延迟信号相位。
[1]时间延迟,即信号在传输中受路径、器件等因素影响,输入端信号间出现的时间差异
[2]过渡时间,即脉冲信号状态不会发生突变,必须经历一段极短的过渡时间
[3]逻辑关系,即逻辑函数式
[4]延迟信号相位,即延迟信号状态间的相位关系,涵盖延迟信号同相位和延迟信号反相位两个方面。 延迟信号状态变化相同的则是延迟信号同相位,反之则是反相位。
时间延迟和过渡时间要素是竞争冒险的产生原因,逻辑关系和延迟信号相位要素是竞争冒险的产生机制。由原因和机制,构成竞争冒险的产生条件。当电路满足产生条件时,则一定产生毛刺。

如何判断有竞争冒险?
1、 逻辑冒险的判断方法有两种:
1). 代数法: 在逻辑函数表达式中,若某个变量同时以原变量和反变量两种形式出现,
例如:逻辑函数在一定条件下可简化为Y=A+A反或Y=A*A反就具备了竞争条件。去掉其余变量(也就是将其余变量取固定值0或1),留下有竞争能力的变量,如果表达式为F=A+A~(用A~表示A的反变量,以下同),就会产生0型冒险(F应该为1而实际却为0);如果表达式为F=AA~,就会产生1型冒险。
例如:表达式 F=AB+CB~,当A=C=1时,F=B+B~,在B发生跳变时,可能出现0型冒险。
2). 卡诺图法:将函数填入卡诺图,按照函数表达式的形式圈好卡诺圈。
A\BC 00 01 11 10
--------------------
0 0 0 0 1
1 0 1 1 1
F=AC+BC~的卡诺图(将101和111的1圈一起,010和110的1圈一起) 通过观察发现,这两个卡诺圈相切。则函数在相切处两值间跳变时发生逻辑冒险。(前提是这两个卡诺圈没有被其他卡诺圈包围)
2 、功能冒险的判断:
功能冒险是当多个输入信号同时变化的瞬间,由于变化快慢不同而引起的冒险。
卡诺图法:依然用上面的卡诺图,按同样函数圈好。举例F=AC+BC~中,ABC从111变为010时,A和C两个变量同时发生了跳变,若A先变化,则 ABC的取值出现了过渡态011,由卡诺图可以知道此时函数输出F为0,然而ABC在变化的前后的稳定状态输出值为1,此时就出现了0型冒险。
这种由过渡 态引起的冒险是由于电路的功能所致,因此成为功能冒险。
3、 综合逻辑冒险和功能冒险: 例 :F=CD+BD~+AC~,自己画及圈卡诺图,可以发现信号ABCD从0100变化到1101可能存在0型功能冒险,不存在逻辑冒险。从0111变化到1110不存在功能冒险,而可能存在逻辑冒险。
4 、总结判断竞争-冒险的方法:
1)、逻辑函数在一定条件下可简化为Y=A+A反或Y=A*A反;
2)、真值表卡诺图法;
3)、计算机辅助分析。
4. 如何消除竞争冒险?
消除竞争-冒险的方法:
1)、引入封锁脉冲;
2)、引入选通脉冲;
3)、修改逻辑设计,增加冗余乘积项;
4)、接入滤波电容。
顺便提一句:时序逻辑中的竞争冒险可以用D触发器,格雷码计数器,同步电路等优秀的设计方案消除。

模电知识 二极管知识2

二极管的主要参数介绍用来表示二极管的性能好坏和适用范围的技术指标,称为二极管的参数。不同类型的二极管有不同的特性参数。但是必须了解以下几个主要参数:1、额定正向工作电流  是指二极管长期连续工作时允许通过的最大正向电流值。因为电流通过管子时会使管芯发热,温度上升,温度超过容许限度(硅管为140左右,锗管为90左右)时,就会使管芯过热而损坏。所以,二极管使用中不要超过二极管额定正向工作电流值。例如,常用的IN4001-4007型锗二极管的额定正向工作电流为 1A。2、最高反向工作电压  加在二极管两端的反向电压高到一定值时,会将管子击穿,失去单向导电能力。为了保证使用安全,规定了最高反向工作电压值。例如,IN4001二极管反向耐压为50V,IN4007反向耐压为1000V。3、反向电流  反向电流是指二极管在规定的温度和最高反向电压作用下,流过二极管的反向电流。反向电流越小,管子的单方向导电性能越好。值得注意的是反向电流与温度有着密切的关系,大约温度每升高10,反向电流增大一倍。例如2AP1型锗二极管,在25时反向电流若为250uA,温度升高到35,反向电流将上升到 500uA,依此类推,在75时,它的反向电流已达8mA,不仅失去了单方向导电特性,还会使管子过热而损坏。又如,2CP10型硅二极管,25时反向电流仅为5uA,温度升高到75时,反向电流也不过160uA。故硅二极管比锗二极管在高温下具有较好的稳定性。4、正向电压降VF:二极管通过额定正向电流时,在两极间所产生的电压降。5、结电容C:电容包括电容和扩散电容,在高频场合下使用时,要求结电容小于某一规定数值。6、最大整流电流(平均值)IOM:在半波整流连续工作的情况下,允许的最大半波电流的平均值。7、最高工作频率FM:二极管具有单向导电性的最高交流信号的频率。二极管的原理晶体二极管为一个由p型半导体和n型半导体形成的p-n结,在其界面两侧形成空间电荷层,并建有自建电场。当不存在外加电压时,由于p-n 结两边载流子浓度差引起的扩散电流和自建电场引起的漂移电流相等而处于电平衡状态。当外界有正向电压偏置时,外界电场和自建电场的互相抑消作用使载流子的扩散电流增加引起了正向电流。当外界有反向电压偏置时,外界电场和自建电场进一步加强,形成在一定反向电压范围内与反向偏置电压值无关的反向饱和电流I0。当外加的反向电压高到一定程度时,p-n结空间电荷层中的电场强度达到临界值产生载流子的倍增过程,产生大量电子空穴对,产生了数值很大的反向击穿电流,称为二极管的击穿现象。

模电知识 二极管知识1

二极管的分类

一、根据构造分类  
半导体二极管主要是依靠PN结而工作的。与PN结不可分割的点接触型和肖特基型,也被列入一般的二极管的范围内。包括这两种型号在内,根据PN结构造面的特点,把晶体二极管分类如下:
1、点接触型二极管  点接触型二极管是在锗或硅材料的单晶片上压触一根金属针后,再通过电流法而形成的。因此,其PN结的静电容量小,适用于高频电路。但是,与面结型相比较,点接触型二极管正向特性和反向特性都差,因此,不能使用于大电流和整流。因为构造简单,所以价格便宜。对于小信号的检波、整流、调制、混频和限幅等一般用途而言,它是应用范围较广的类型。
2、键型二极管  键型二极管是在锗或硅的单晶片上熔接或银的细丝而形成的。其特性介于点接触型二极管和合金型二极管之间。与点接触型相比较,虽然键型二极管的PN结电容量稍有增加,但正向特性特别优良。多作开关用,有时也被应用于检波和电源整流(不大于50mA)。在键型二极管中,熔接金丝的二极管有时被称金键型,熔接银丝的二极管有时被称为银键型。
3、合金型二极管  在N型锗或硅的单晶片上,通过合金铟、铝等金属的方法制作PN结而形成的。正向电压降小,适于大电流整流。因其PN结反向时静电容量大,所以不适于高频检波和高频整流。
4、扩散型二极管  在高温的P型杂质气体中,加热N型锗或硅的单晶片,使单晶片表面的一部变成P型,以此法PN结。因PN结正向电压降小,适用于大电流整流。最近,使用大电流整流器的主流已由硅合金型转移到硅扩散型。
5、台面型二极管  PN结的制作方法虽然与扩散型相同,但是,只保留PN结及其必要的部分,把不必要的部分用药品腐蚀掉。其剩余的部分便呈现出台面形,因而得名。初期生产的台面型,是对半导体材料使用扩散法而制成的。因此,又把这种台面型称为扩散台面型。对于这一类型来说,似乎大电流整流用的产品型号很少,而小电流开关用的产品型号却很多。
6、平面型二极管  在半导体单晶片(主要地是N型硅单晶片)上,扩散P型杂质,利用硅片表面氧化膜的屏蔽作用,在N型硅单晶片上仅选择性地扩散一部分而形成的PN结。因此,不需要为调整PN结面积的药品腐蚀作用。由于半导体表面被制作得平整,故而得名。并且,PN结合的表面,因被氧化膜覆盖,所以公认为是稳定性好和寿命长的类型。最初,对于被使用的半导体材料是采用外延法形成的,故又把平面型称为外延平面型。对平面型二极管而言,似乎使用于大电流整流用的型号很少,而作小电流开关用的型号则很多。
7、合金扩散型二极管  它是合金型的一种。合金材料是容易被扩散的材料。把难以制作的材料通过巧妙地掺配杂质,就能与合金一起过扩散,以便在已经形成的PN结中获得杂质的恰当的浓度分布。此法适用于制造高灵敏度的变容二极管。
8、外延型二极管  用外延面长的过程制造PN结而形成的二极管。制造时需要非常高超的技术。因能随意地控制杂质的不同浓度的分布,故适宜于制造高灵敏度的变容二极管。
9、肖特基二极管  基本原理是:在金属(例如铅)和半导体(N型硅片)的接触面上,用已形成的肖特基来阻挡反向电压。肖特基与PN结的整流作用原理有根本性的差异。其耐压程度只有40V左右。其特长是:开关速度非常快:反向恢复时间trr特别地短。因此,能制作开关二极和低压大电流整流二极管。

二、根据用途分类
1、检波用二极管  就原理而言,从输入信号中取出调制信号是检波,以整流电流的大小(100mA)作为界线通常把输出电流小于100mA的叫检波。锗材料点接触型、工作频率可达400MHz,正向压降小,结电容小,检波效率高,频率特性好,为2AP型。类似点触型那样检波用的二极管,除用于检波外,还能够用于限幅、削波、调制、混频、开关等电路。也有为调频检波专用的特性一致性好的两只二极管组合件。
2、整流用二极管  就原理而言,从输入交流中得到输出的直流是整流。以整流电流的大小(100mA)作为界线通常把输出电流大于100mA的叫整流。面结型,工作频率小于KHz,最高反向电压从25伏至3000伏分A~X共22档。分类如下:①硅半导体整流二极管2CZ型、②硅桥式整流器QL型、③用于电视机高压硅堆工作频率近100KHz的2CLG型。
3、限幅用二极管  大多数二极管能作为限幅使用。也有象保护仪表用和高频齐纳管那样的专用限幅二极管。为了使这些二极管具有特别强的限制尖锐振幅的作用,通常使用硅材料制造的二极管。也有这样的组件出售:依据限制电压需要,把若干个必要的整流二极管串联起来形成一个整体。
4、调制用二极管  通常指的是环形调制专用的二极管。就是正向特性一致性好的四个二极管的组合件。即使其它变容二极管也有调制用途,但它们通常是直接作为调频用。
5、混频用二极管  使用二极管混频方式时,在500~10,000Hz的频率范围内,多采用肖特基型和点接触型二极管。
6、放大用二极管  用二极管放大,大致有依靠隧道二极管和体效应二极管那样的负阻性器件的放大,以及用变容二极管的参量放大。因此,放大用二极管通常是指隧道二极管、体效应二极管和变容二极管。
7、开关用二极管  有在小电流下(10mA程度)使用的逻辑运算和在数百毫安下使用的磁芯激励用开关二极管。小电流的开关二极管通常有点接触型和键型等二极管,也有在高温下还可能工作的硅扩散型、台面型和平面型二极管。开关二极管的特长是开关速度快。而肖特基型二极管的开关时间特短,因而是理想的开关二极管。2AK型点接触为中速开关电路用;2CK型平面接触为高速开关电路用;用于开关、限幅、钳位或检波等电路;肖特基(SBD)硅大电流开关,正向压降小,速度快、效率高。
8、变容二极管 用于自动频率控制(AFC)和调谐用的小功率二极管称变容二极管。日本厂商方面也有其它许多叫法。通过施加反向电压, 使其PN结的静电容量发生变化。因此,被使用于自动频率控制、扫描振荡、调频和调谐等用途。通常,虽然是采用硅的扩散型二极管,但是也可采用合金扩散型、外延结合型、双重扩散型等特殊制作的二极管,因为这些二极管对于电压而言,其静电容量的变化率特别大。结电容随反向电压VR变化,取代可变电容,用作调谐回路、振荡电路、锁相环路,常用于电视机高频头的频道转换和调谐电路,多以硅材料制作。
9、频率倍增用二极管  对二极管的频率倍增作用而言,有依靠变容二极管的频率倍增和依靠阶跃(即急变)二极管的频率倍增。频率倍增用的变容二极管称为可变电抗器,可变电抗器虽然和自动频率控制用的变容二极管的工作原理相同,但电抗器的构造却能承受大功率。阶跃二极管又被称为阶跃恢复二极管,从导通切换到关闭时的反向恢复时间trr短,因此,其特长是急速地变成关闭的转移时间显著地短。如果对阶跃二极管施加正弦波,那么,因tt(转移时间)短,所以输出波形急骤地被夹断,故能产生很多高频谐波。
10、稳压二极管  是代替稳压电子二极管的产品。被制作成为硅的扩散型或合金型。是反向击穿特性曲线急骤变化的二极管。作为控制电压和标准电压使用而制作的。二极管工作时的端电压(又称齐纳电压)从3V左右到150V,按每隔10%,能划分成许多等级。在功率方面,也有从200mW至100W以上的产品。工作在反向击穿状态,硅材料制作,动态电阻RZ很小,一般为2CW型;将两个互补二极管反向串接以减少温度系数则为2DW型。
11、PIN型二极管(PIN Diode)  这是在P区和N区之间夹一层本征半导体(或低浓度杂质的半导体)构造的晶体二极管。PIN中的I是"本征"意义的英文略语。当其工作频率超过100MHz时,由于少数载流子的存贮效应和"本征"层中的渡越时间效应,其二极管失去整流作用而变成阻抗元件,并且,其阻抗值随偏置电压而改变。在零偏置或直流反向偏置时,"本征"区的阻抗很高;在直流正向偏置时,由于载流子注入"本征"区,而使"本征"区呈现出低阻抗状态。因此,可以把PIN二极管作为可变阻抗元件使用。它常被应用于高频开关(即微波开关)、移相、调制、限幅等电路中。
12、 雪崩二极管 (Avalanche Diode)  它是在外加电压作用下可以产生高频振荡的晶体管。产生高频振荡的工作原理是栾的:利用雪崩击穿对晶体注入载流子,因载流子渡越晶片需要一定的时间,所以其电流滞后于电压,出现延迟时间,若适当地控制渡越时间,那么,在电流和电压关系上就会出现负阻效应,从而产生高频振荡。它常被应用于微波领域的振荡电路中。
13、江崎二极管 (Tunnel Diode)  它是以隧道效应电流为主要电流分量的晶体二极管。其基底材料是砷化镓和锗。其P型区的N型区是高掺杂的(即高浓度杂质的)。隧道电流由这些简并态半导体的量子力学效应所产生。发生隧道效应具备如下三个条件:①费米能级位于导带和满带内;②空间电荷层宽度必须很窄(0.01微米以下);简并半导体P型区和N型区中的空穴和电子在同一能级上有交叠的可能性。江崎二极管为双端子有源器件。其主要参数有峰谷电流比(IP/PV),其中,下标"P"代表"峰";而下标"V"代表"谷"。江崎二极管可以被应用于低噪声高频放大器及高频振荡器中(其工作频率可达毫米波段),也可以被应用于高速开关电路中。
14、快速关断(阶跃恢复)二极管 (Step Recovary Diode)  它也是一种具有PN结的二极管。其结构上的特点是:在PN结边界处具有陡峭的杂质分布区,从而形成"自助电场"。由于PN结在正向偏压下,以少数载流子导电,并在PN结附近具有电荷存贮效应,使其反向电流需要经历一个"存贮时间"后才能降至最小值(反向饱和电流值)。阶跃恢复二极管的"自助电场"缩短了存贮时间,使反向电流快速截止,并产生丰富的谐波分量。利用这些谐波分量可设计出梳状频谱发生电路。快速关断(阶跃恢复)二极管用于脉冲和高次谐波电路中。
15、肖特基二极管 (Schottky Barrier Diode)  它是具有肖特基特性的"金属半导体结"的二极管。其正向起始电压较低。其金属层除材料外,还可以采用金、钼、镍、钛等材料。其半导体材料采用硅或砷化镓,多为N型半导体。这种器件是由多数载流子导电的,所以,其反向饱和电流较以少数载流子导电的PN结大得多。由于肖特基二极管中少数载流子的存贮效应甚微,所以其频率响仅为RC时间常数限制,因而,它是高频和快速开关的理想器件。其工作频率可达100GHz。并且,MIS(金属-绝缘体-半导体)肖特基二极管可以用来制作太阳能电池或发光二极管。
16、阻尼二极管  具有较高的反向工作电压和峰值电流,正向压降小,高频高压整流二极管,用在电视机行扫描电路作阻尼和升压整流用。
17、瞬变电压抑制二极管  TVP管,对电路进行快速过压保护,分双极型和单极型两种,按峰值功率(500W-5000W)和电压(8.2V~200V)分类。
18、双基极二极管(单结晶体管)  两个基极,一个发射极的三端负阻器件,用于张驰振荡电路,定时电压读出电路中,它具有频率易调、温度稳定性好等优点。
19、发光二极管  用磷化镓、磷砷化镓材料制成,体积小,正向驱动发光。工作电压低,工作电流小,发光均匀、寿命长、可发红、黄、绿单色光。

三、根据特性分类 点接触型二极管,按正向和反向特性分类如下。
1、一般用点接触型二极管 这种二极管正如标题所说的那样,通常被使用于检波和整流电路中,是正向和反向特性既不特别好,也不特别坏的中间产品。如:SD34、SD46、1N34A等等属于这一类。
2、高反向耐压点接触型二极管  是最大峰值反向电压和最大直流反向电压很高的产品。使用于高压电路的检波和整流。这种型号的二极管一般正向特性不太好或一般。在点接触型锗二极管中,有SD38、1N38A、OA81等等。这种锗材料二极管,其耐压受到限制。要求更高时有硅合金和扩散型。
3、高反向电阻点接触型二极管  正向电压特性和一般用二极管相同。虽然其反方向耐压也是特别地高,但反向电流小,因此其特长是反向电阻高。使用于高输入电阻的电路和高阻负荷电阻的电路中,就锗材料高反向电阻型二极管而言,SD54、1N54A等等属于这类二极管。
4、高传导点接触型二极管  它与高反向电阻型相反。其反向特性尽管很差,但使正向电阻变得足够小。对高传导点接触型二极管而言,有SD56、1N56A等等。对高传导键型二极管而言,能够得到更优良的特性。这类二极管,在负荷电阻特别低的情况下,整流效率较高。

四、按封装分类
1、玻璃封装的。
2、塑料封装的。
3、金属封装的等几种。

模电知识 半导体常识

半导体材料按化学成分和内部结构,大致可分为以下几类
1.元素半导体
有锗、硅、硒、硼、碲、锑等。50年代,锗在半导体中占主导地位,但 锗半导体器件的耐高温和抗辐射性能较差,到60年代后期逐渐被硅材料取代。用硅制造的半导体器件,耐高温和抗辐射性能较好,特别适宜制作大功率器件。因此,硅已成为应用最多的一种增导体材料,目前的集成电路大多数是用硅材料制造的。
2.无机化合物半导体
分为二元系、三元系、多元系和有机化合物半导体。二元系化合物半导体有Ⅲ-Ⅴ族(如砷化镓、磷化镓、磷化铟等)、Ⅱ-Ⅵ族(如硫化镉、硒化镉、碲化锌、硫化锌等)、Ⅳ-Ⅵ族(如硫化铅、硒化铅等)、Ⅳ-Ⅳ族(如碳化硅)化合物。三元系和多元系化合物半导体主要为三元和多元固溶体,如镓铝砷固溶体、镓锗砷磷固溶体等。
3.有机化合物半导体
已知的有机半导体材料有几十种,包括萘、蒽、聚丙烯腈、酞菁和一些芳香族化合物等,目前尚未得到应用 。
4.非晶态和液态半导体材料,
这类半导体与晶态半导体的最大区别是不具有严格周期性排列的晶体结构。
目前主要的非晶态半导体有两大类。
硫系玻璃。含硫族元素的非晶态半导体。例如As-Se、As-S,通常的制备方法是熔体冷却或汽相沉积。
四面体键非晶态半导体。如非晶Si、Ge、GaAs等,此类材料的非晶态不能用熔体冷却的办法来获得,只能用薄膜淀积的办法(如蒸发、溅射、辉光放电或化学汽相淀积等),非晶态半导体在技术
非晶态半导体的应用存在著很大的潜力,非晶硫早已广泛应用在复印技术中,由S.R.奥夫辛斯基首创的 As-Te-Ge-Si系玻璃半导体制作的电可改写主读存储器已有商品生产,利用光脉冲使碲微晶薄膜玻璃化这种性质制作的光存储器正在研制之中。对於非晶硅的应用目前研究最多的是太阳能电池。非晶硅比晶体硅制备工艺简单,易於做成大面积,非晶硅对於太阳光的吸收效率高,器件只需大约1微米厚的薄膜材料,因此,可望做成一种廉价的太阳能电池,现已受到能源专家的重视。最近已有人试验把非晶硅场效应晶体管用於液晶显示和集成电路。

半导体材料的特性参数 
半导体材料虽然种类繁多但有一些固有的特性,称为半导体材料的特性参数。这些特性参数不仅能反映半导体材料与其他非半导体材料之间的差别,而且更重要的是能反映各种半导体材料之间甚至同一种材料在不同情况下特性上的量的差别。
常用的半导体材料的特性参数有:禁带宽度、电阻率、载流子迁移率(载流子即半导体中参加导电的电子和空穴)、非平衡载流子寿命、位错密度。
禁带宽度由半导体的电子态、原子组态决定,反映组成这种材料的原子中价电子从束缚状态激发到自由状态所需的能量。
电阻率、载流子迁移率反映材料的导电能力。
非平衡载流子寿命反映半导体材料在外界作用(如光或电场)下内部的载流子由非平衡状态向平衡状态过渡的弛豫特性。
位错是晶体中最常见的一类晶体缺陷。
位错密度可以用来衡量半导体单晶材料晶格完整性的程度。当然,对于非晶态半导体是没有这一反映晶格完整性的特性参数的。


价电子:半导体材料原子最外层轨道导航的四个电子称为价电子。
共价键:相邻两个原子之间由价电子组成的共价键连接。
电导率:导电能力的强弱,与材料单位体积内含电荷载离子的数量有关。
本征激发:载常温下,价电子获得足够的随机热震动能量而挣脱共价键的束缚,成为自由电子。
空穴:当电子挣脱共价键的束缚成为自由的电子之后,共价键中就留下一个空位,这个空位就称为空穴。

本征半导体:是一种完全纯净的,结构完整的半导体晶体。自由电子和空穴总是成对出现的。
杂质半导体:根据掺杂的杂质不同分为
空穴(P型)半导体:在硅或者是锗中加入三价的元素,如硼,铟等。多数载离子是空穴。
电子(N型)半导体:在硅或者是锗中加入五价的元素,如磷,砷,锑等。多数载离子是电子。
在杂质半导体中多子的数量跟掺杂的浓度有关。
在杂质半导体中少子的数量跟温度有关。温度升高时,少子的数量增多。
在外加电场的作用下P型半导体中的电流主要是空穴电流,N型半导体中的电流主要是电子电流。
PN结的形成
由于P型半导体中掺杂了三价的元素,因此多数载离子是空穴。
由于N型半导体中掺杂了五价的元素,因此多数载离子是电子。
P型半导体和N半导体结合后,在他们两边出现电子和空穴的浓度差。P区空穴多,电子少。N区电子多,空穴少。这样空穴和电子都要从浓度高的地方向浓度低的地方扩散,扩散的结果就是P区失去空穴,留下带负电的杂质。N区一边失去电子,留下带正电的杂质。虽然杂质带电,由于结构的原因,他们是不能移动的,不参与导电。因此就形成了一个空间电荷区,也即PN结。这个结电阻率很好。PN结的单向导电性
在外加电场(P正,N负)的作用下,P区的空穴向PN结移动,N区的电子也向PN结移动。当P区的空穴进入PN结后,就会和原来的一部分负离子(杂质)中和,使得P区的空间电荷量减少,PN结变窄。同样,当N区的电子进入PN结后,就会和原来的一部分正离子(杂质)中和,使N区的空间电荷量减少,PN结变窄。PN结的电阻减小,导电性能增加。

在外加电场(P负,N正)的作用下,P区的空穴向外加电场移动,使得P区的空穴减少,PN结的空间电荷增加,PN结变宽,在外加电场的作用下,N区的电子也向外加电场移动,使得N区的电子减少,PN结的空间电荷增加,PN结变宽,PN结的电阻增大,导电性能减弱。

PN结的反向击穿


PN结的反向击穿分为:热击穿和电击穿。
当PN结两端的反向电压增大到一定数值时,反向电流突然增加。这个现象就称为PN结的反向击穿(电击穿)。发生击穿所需的反向电压VBR称为反向击穿电压。

PN结电击穿从其产生原因又可分为雪崩击穿和齐纳击穿两种类型。
1、雪崩击穿: 当PN结反向电压增加时,空间电荷区中的电场随着增强。通过空间电荷区的电子和空穴,在电场作用下获得的能量增大,在晶体中运动的电子和空穴,将不断地与晶体原子发生碰撞,当电子和空穴的能量足够大时,通过这样的碰撞,可使共价键中的电子激发形成自由电子—空穴对,这种现象称为碰撞电离。新产生的电子和空穴与原有的电子和空穴一样,在电场作用下,也向相反的方向运动,重新获得能量,又可通过碰撞,再产生电子—空穴对,这就是载流子的倍增效应。当反向电压增大到某一数值后,载流子的倍增情况就像在陡峻的积雪山坡上发生雪崩一样,载流子增加得多而快,使反向电流急剧增大,于是PN结就发生雪崩击穿。 雪崩击穿多发生在杂质浓度较低的二极管,一般需要比较高的电压(>6V),击穿电压与浓度成反比。 2、齐纳击穿: 在加有较高的反向电压下,PN结空间电荷区中存在一个强电场,它能够破坏共价键将束缚电子分离出来造成电子—空穴对,形成较大的反向电流。发生齐纳击穿需要的电场强度约为2*105V/cm,这只有在杂质浓度特别大的PN结中才能达到,因为杂质浓度大,空间电荷区内电荷密度(即杂质离子)也大,因而空间电荷区很窄,电场强度就可能很高。一般整流二极管掺杂浓度没有这么高,它在电击穿中多数是雪崩击穿造成的。 齐纳击穿多数出现在杂质浓度较高的二极管,如稳压管(齐纳二极管)。 必须指出,上述两种电击穿过程是可逆的,当加在稳压管两端的反向电压降低后,管子仍可以恢复原来的状态。但它有一个前提条件,就是反向电流和反向电压的乘积不超过PN结容许的耗散功率,超过了就会因为热量散不出去而使PN结温度上升,直到过热而烧毁,这种现象就是热击穿。所以热击穿和电击穿的概念是不同的。电击穿往往可为人们所利用(如稳压管),而热击穿则是必须尽量避免的。



二极管正向V-I特性建模:


1、理想模型
正向偏置时管压降为零,反向截至时电阻无穷大,电流为零。
2、恒压降模型
正向导通时管压降为恒定的0.3或者0.7
3、折线模式
认为二极管的管压降随电流的增加而增加
4、小信号模型
认为二极管在某个范围内工作时,内阻随电流是变化的。

经济学常识 谁在主导A股走势?

A股从2007年10月16日的6124.04点最高点到2008年8月19日的1500点的最低点,市场有过各种各样的剖析,其实最关键的原因也许只有一个,那就是,在金融全球化的今天,A股的中长期走势是由国际资本决定的,而非国内资本决定的。至于国际资本对A股的操纵,有两条传导链,一条是通过全球股市联动,另一条传导链,在近期金融海啸中的巨大作用,即通过汇率市场上主要货币的中长期走势,通过国际资本在不同币种不同市场的流动,引导包括A股在内全球股市的中长期走势。
近四十年历史上,美联储持续降息周期与持续升息周期的轮回,与其对应的是弱势美元周期与强势美元周期的轮回,每一个弱势美元周期都会引导国际资本流入新兴市场制造股市房市泡沫,而每一个强势美元周期引导国际资本回流美国,导致新兴市场股市房市泡沫破裂。
2006年以来A股的大牛市与大调整似乎完美地验证了上述规律,2006年5月美联储持续两年加息周期结束,意味着着一个弱势美元周期的到来 (2006年-2008年3月美元指数下跌20%,其间人民币的升值进一步强化了弱势美元),预示着2006年开始A股及新兴市场将在国际资本支持下进入牛市。值得注意的是,2005年11月美元指数92.63的中级顶,比美联储加息周期结束提前半年,但滞后于A股牛市大底998五个月形成,而2008年3月美元指数70.68中级底,同样滞后于A股牛市大顶6124五个月形成(而受益于石油牛市俄罗斯巴西见顶则与美元大底同步),至于其是比美联储降息周期结束提前半年还是九个月,可拭目以待。
近日美联储降息50个基点,把利率降至2003年以来最低的1%,以及伯南克甚至表示不排除12月把把利率降至零,把仍无法改变美元8月以来的井喷强势。或许说明,美联储持续降息周期即将结束,而对应的可能是又一个强势美元周期的到来,而A股及新兴市场可能在国际资本持续回流美国的背景下,陷入长期低迷,直到下一个弱势美元周期的到来。
如果说,美元对A股大底大顶的影响属滞后确认,那么日元对A股的影响或同步或提前。2007年6月美元兑日元见124之大底,比A股牛市大顶6124提前四个月,是否说明日元套利盘热钱当时开始净流出A股?其后两年日元升值30%,其中,115-95,110-90两波20%升值高点95,90,与A股3516,1664中级底几乎同步。说明巨额日元套利盘持续平仓离场,尤其是恐慌性平仓买回日元,也是A股及全球股市大跌的原因。日元3%的波动,可以使用30倍杠杆进行日元套利对冲基金赔完老本。

2008年10月30日星期四

硬件知识 常用电平电压

RS232电平或者说串口电平,有的甚至说计算机电平,所有的这些说法,指得都是计算机9针串口 (RS232)得电平,采用负逻辑,
-15v ~ -3v 代表1
+3v ~ +15v 代表0
RS485电平 和RS422电平 由于两者均采用 差分传输(平衡传输)的方式,所以他们的电平方式,一般有两个引脚 A,B
发送端 AB间的电压差
+2 ~ +6v 1
-2 ~ -6v 0
接收端 AB间的电压差
大于 +200mv 1 定义逻辑1为B>A的状态
小于 -200mv 0 定义逻辑0为A>B的状态
AB之间的电压差不小于200mv

一对一通讯的情况下
RS232 可做到双向传输,全双工通讯 最高传输速率 20kbps
RS422 只能做到单向传输,半双工通讯,最高传输速率10Mbps
RS485 双向传输,半双工通讯, 最高传输速率10Mbps

总结各电平标准。现在常用的电平标准有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、RS485等,还有一些速度比较高的 LVDS、GTL、PGTL、CML、HSTL、SSTL等。下面简单介绍一下各自的供电电源、电平标准以及使用注意事项。

TTL:Transistor-Transistor Logic 三极管结构。
Vcc:5V;VOH>=2.4V;VOL<=0.5V;VIH>=2V;VIL<=0.8V。
因为2.4V与5V之间还有很大空闲,对改善噪声容限并没什么好处,又会白白增大系统功耗,还会影响速度。所以后来就把一部分“砍”掉了。也就是后面的LVTTL。
LVTTL又分3.3V、2.5V以及更低电压的LVTTL(Low Voltage TTL)。
3.3V LVTTL:Vcc:3.3V;VOH>=2.4V;VOL<=0.4V;VIH>=2V;VIL<=0.8V。
2.5V LVTTL:Vcc:2.5V;VOH>=2.0V;VOL<=0.2V;VIH>=1.7V;VIL<=0.7V。
更低的LVTTL不常用就先不讲了。多用在处理器等高速芯片,使用时查看芯片手册就OK了。TTL使用注意:TTL电平一般过冲都会比较严重,可能在始端串22欧或33欧电阻;
TTL电平输入脚悬空时是内部认为是高电平。要下拉的话应用1k以下电阻下拉。
TTL输出不能驱动CMOS输入。

CMOS:Complementary Metal Oxide Semiconductor PMOS+NMOS。
Vcc:5V;VOH>=4.45V;VOL<=0.5V;VIH>=3.5V;VIL<=1.5V。相对TTL有了更大的噪声容限,输入阻抗远大于TTL输入阻抗。对应3.3V LVTTL,出现了LVCMOS,可以与3.3V的LVTTL直接相互驱动。3.3V LVCMOS:Vcc:3.3V;VOH>=3.2V;VOL<=0.1V;VIH>=2.0V;VIL<=0.7V。2.5V LVCMOS:Vcc:2.5V;VOH>=2V;VOL<=0.1V;VIH>=1.7V;VIL<=0.7V。CMOS使用注意:CMOS结构内部寄生有可控硅结构,当输入或输入管脚高于VCC一定值(比如一些芯片是0.7V)时,电流足够大的话,可能引起闩锁效应,导致芯片的烧毁。ECL:Emitter Coupled Logic 发射极耦合逻辑电路(差分结构)Vcc=0V;Vee:-5.2V;VOH=-0.88V;VOL=-1.72V;VIH=-1.24V;VIL=-1.36V。速度快,驱动能力强,噪声小,很容易达到几百M的应用。但是功耗大,需要负电源。为简化电源,出现了PECL(ECL结构,改用正电压供电)和LVPECL。PECL:Pseudo/Positive ECLVcc=5V;VOH=4.12V;VOL=3.28V;VIH=3.78V;VIL=3.64VLVPELC:Low Voltage PECLVcc=3.3V;VOH=2.42V;VOL=1.58V;VIH=2.06V;VIL=1.94VECL、PECL、LVPECL使用注意:不同电平不能直接驱动。中间可用交流耦合、电阻网络或专用芯片进行转换。以上三种均为射随输出结构,必须有电阻拉到一个直流偏置电压。(如多用于时钟的LVPECL:直流匹配时用130欧上拉,同时用82欧下拉;交流匹配时用82欧上拉,同时用130欧下拉。但两种方式工作后直流电平都在1.95V左右。)前面的电平标准摆幅都比较大,为降低电磁辐射,同时提高开关速度又推出LVDS电平标准。LVDS:Low Voltage Differential Signaling 差分对输入输出,内部有一个恒流源3.5-4mA,在差分线上改变方向来表示0和1。通过外部的100欧匹配电阻(并在差分线上靠近接收端)转换为±350mV的差分电平。LVDS使用注意:可以达到600M以上,PCB要求较高,差分线要求严格等长,差最好不超过10mil(0.25mm)。100欧电阻离接收端距离不能超过500mil,最好控制在300mil以内。下面的电平用的可能不是很多,篇幅关系,只简单做一下介绍。如果感兴趣的话可以联系我。CML:是内部做好匹配的一种电路,不需再进行匹配。三极管结构,也是差分线,速度能达到3G以上。只能点对点传输。GTL:类似CMOS的一种结构,输入为比较器结构,比较器一端接参考电平,另一端接输入信号。1.2V电源供电。Vcc=1.2V;VOH>=1.1V;VOL<=0.4V;VIH>=0.85V;VIL<=0.75VPGTL/GTL+:Vcc=1.5V;VOH>=1.4V;VOL<=0.46V;VIH>=1.2V;VIL<=0.8VHSTL是主要用于QDR存储器的一种电平标准:一般有V¬CCIO=1.8V和V¬¬CCIO= 1.5V。和上面的GTL相似,输入为输入为比较器结构,比较器一端接参考电平(VCCIO/2),另一端接输入信号。对参考电平要求比较高(1%精度)。SSTL主要用于DDR存储器。和HSTL基本相同。V¬¬CCIO=2.5V,输入为输入为比较器结构,比较器一端接参考电平1.25V,另一端接输入信号。对参考电平要求比较高(1%精度)。HSTL和SSTL大多用在300M以下

单片机 什么是单片机

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成(如图1所示)。

还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。

现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
单片机的应用领域 :
1.单片机在智能仪器仪表中的应用;
2.单片机在工业测控中的应用;
3.单片机在计算机网络和通讯技术中的应用;
4.单片机在日常生活及家电中的应用;
5.单片机在办公自动化方面。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

2008年10月29日星期三

PCB设计 设计PCB时抗静电放电的方法

设计PCB时抗静电放电的方法
 在pcb板的设计当中,可以通过分层、恰当的布局布线和安装实现PCB的抗ESD设计。通过调整PCB布局布线,能够很好地防范ESD。*尽可能使用多层PCB,相对于双面PCB而言,地平面和电源平面,以及排列紧密的信号线-地线间距能够减小共模阻抗和感性耦合,使之达到双面PCB的1/10到1/100。对于顶层和底层表面都有元器件、具有很短连接线。
  来自人体、环境甚至电子设备内部的静电对于精密的半导体芯片会造成各种损伤,例如穿透元器件内部薄的绝缘层;损毁MOSFET和CMOS元器件的栅极;CMOS器件中的触发器锁死;短路反偏的PN结;短路正向偏置的PN结;熔化有源器件内部的焊接线或铝线。为了消除静电释放(ESD)对电子设备的干扰和破坏,需要采取多种技术手段进行防范。
  在pcb板的设计当中,可以通过分层、恰当的布局布线和安装实现PCB的抗ESD设计。在设计过程中,通过预测可以将绝大多数设计修改仅限于增减元器件。通过调整PCB布局布线,能够很好地防范ESD。以下是一些常见的防范措施。  *尽可能使用多层PCB,相对于双面PCB而言,地平面和电源平面,以及排列紧密的信号线-地线间距能够减小共模阻抗和感性耦合,使之达到双面PCB的1/10到1/100。尽量地将每一个信号层都紧靠一个电源层或地线层。对于顶层和底层表面都有元器件、具有很短连接线以及许多填充地的高密度PCB,可以考虑使用内层线。  *对于双面PCB来说,要采用紧密交织的电源和地栅格。电源线紧靠地线,在垂直和水平线或填充区之间,要尽可能多地连接。一面的栅格尺寸小于等于60mm,如果可能,栅格尺寸应小于13mm。
  *确保每一个电路尽可能紧凑。
  *尽可能将所有连接器都放在一边。
  *如果可能,将电源线从卡的中央引入,并远离容易直接遭受ESD影响的区域。
  *在引向机箱外的连接器(容易直接被ESD击中)下方的所有PCB层上,要放置宽的机箱地或者多边形填充地,并每隔大约13mm的距离用过孔将它们连接在一起。  *在卡的边缘上放置安装孔,安装孔周围用无阻焊剂的顶层和底层焊盘连接到机箱地上。
  *PCB装配时,不要在顶层或者底层的焊盘上涂覆任何焊料。使用具有内嵌垫圈的螺钉来实现PCB与金属机箱/屏蔽层或接地面上支架的紧密接触。
  *在每一层的机箱地和电路地之间,要设置相同的“隔离区”;如果可能,保持间隔距离为0.64mm。
  *在卡的顶层和底层靠近安装孔的位置,每隔100mm沿机箱地线将机箱地和电路地用1.27mm宽的线连接在一起。与这些连接点的相邻处,在机箱地和电路地之间放置用于安装的焊盘或安装孔。这些地线连接可以用刀片划开,以保持开路,或用磁珠/高频电容的跳接。
  *如果电路板不会放入金属机箱或者屏蔽装置中,在电路板的顶层和底层机箱地线上不能涂阻焊剂,这样它们可以作为ESD电弧的放电极。
  *要以下列方式在电路周围设置一个环形地:
  (1)除边缘连接器以及机箱地以外,在整个外围四周放上环形地通路。
  (2)确保所有层的环形地宽度大于2.5mm。
  (3)每隔13mm用过孔将环形地连接起来。
  (4)将环形地与多层电路的公共地连接到一起。
  (5)对安装在金属机箱或者屏蔽装置里的双面板来说,应该将环形地与电路公共地连接起来。不屏蔽的双面电路则应该将环形地连接到机箱地,环形地上不能涂阻焊剂,以便该环形地可以充当ESD的放电棒,在环形地(所有层)上的某个位置处至少放置一个0.5mm宽的间隙,这样可以避免形成一个大的环路。信号布线离环形地的距离不能小于0.5mm。
  *在能被ESD直接击中的区域,每一个信号线附近都要布一条地线。
  *I/O电路要尽可能靠近对应的连接器。
  *对易受ESD影响的电路,应该放在靠近电路中心的区域,这样其他电路可以为它们提供一定的屏蔽作用。
  *通常在接收端放置串联的电阻和磁珠,而对那些易被ESD击中的电缆驱动器,也可以考虑在驱动端放置串联的电阻或磁珠。
  *通常在接收端放置瞬态保护器。用短而粗的线(长度小于5倍宽度,最好小于3倍宽度)连接到机箱地。从连接器出来的信号线和地线要直接接到瞬态保护器,然后才能接电路的其他部分。
  *在连接器处或者离接收电路25mm的范围内,要放置滤波电容。
  (1)用短而粗的线连接到机箱地或者接收电路地(长度小于5倍宽度,最好小于3倍宽度)。
  (2)信号线和地线先连接到电容再连接到接收电路。
  *要确保信号线尽可能短。
  *信号线的长度大于300mm时,一定要平行布一条地线。
  *确保信号线和相应回路之间的环路面积尽可能小。对于长信号线每隔几厘米便要调换信号线和地线的位置来减小环路面积。
  *从网络的中心位置驱动信号进入多个接收电路。
  *确保电源和地之间的环路面积尽可能小,在靠近集成电路芯片每一个电源管脚的地方放置一个高频电容。
  *在距离每一个连接器80mm范围以内放置一个高频旁路电容。
  *在可能的情况下,要用地填充未使用的区域,每隔60mm距离将所有层的填充地连接起来。  *确保在任意大的地填充区(大约大于25mm×6mm)的两个相反端点位置处要与地连接。
  *电源或地平面上开口长度超过8mm时,要用窄的线将开口的两侧连接起来。
  *复位线、中断信号线或者边沿触发信号线不能布置在靠近PCB边沿的地方。
  *将安装孔同电路公地连接在一起,或者将它们隔离开来。
  (1)金属支架必须和金属屏蔽装置或者机箱一起使用时,要采用一个零欧姆电阻实现连接。
  (2)确定安装孔大小来实现金属或者塑料支架的可靠安装,在安装孔顶层和底层上要采用大焊盘,底层焊盘上不能采用阻焊剂,并确保底层焊盘不采用波峰焊工艺进行焊接。
  *不能将受保护的信号线和不受保护的信号线并行排列。  *要特别注意复位、中断和控制信号线的布线。
  (1)要采用高频滤波。  (2)远离输入和输出电路。
  (3)远离电路板边缘。
  *PCB要插入机箱内,不要安装在开口位置或者内部接缝处。
  *要注意磁珠下、焊盘之间和可能接触到磁珠的信号线的布线。有些磁珠导电性能相当好,可能会产生意想不到的导电路径。
  *如果一个机箱或者主板要内装几个电路板,应该将对静电最敏感的电路板放在最中间

C语言 指针详解

一:概念
指针---是个变量。
指针---它里面存储的值被解释成为内存的一个地址。
也就是说变量的值是一个内存地址。
指针正确的定义格式:type+*+空格+变量名。char* ptr;
要分析指针要从四个方面分析:
1、指针的类型,
指针的类型就是指变量的类型(指针就是一个变量)。从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。
2、指针所指向的内存区的类型,
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。 从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念,区分"指针的类型"和"指针所指向的类型"这两个概念,是精通指针的关键点之一。
3、指针的值或者叫指针所指向的内存区,
或者叫指针所指向的内存区或地址。指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。 指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。 以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?
4、指针本身所占据的内存区。
定义一个后,肯定也是要给它分配一个存储空间的。只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针变量本身占据了4个字节的长度。 指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。
指针的类型 指针指向的内存类型 指针的值 指针本身所占据的内存区
int*ptr; int* int sizeof( int *)=4 Sizeof(int*) = 4
char*ptr; char* char sizeof(char*)=1 Sizeof(char*) = 4
int**ptr; int** int* sizeof(int**)=4 Sizeof(int**) = 4
int*ptr[2]; int*[2] int[2] sizeof(int*[2])=8 Sizeof(int*[3]) = 4
int(*ptr)[3]; int(*)[3] int()[3] sizeof(int(*)[3])=12 Sizeof(int(*)[3]) = 4
char(*ptr)[3]; char(*)[3] char()[3] sizeof(char(*)[3])=3 Sizeof(char(*)[3]) = 4
int*(*ptr)[4]; int*(*)[4] int*()[4] sizeof(int*(*)[4])=16 Sizeof (int*(*)[4]) = 4

二:运算符和表达式
C语言中有两个运算符
&运算符:取地址运算符,&a即是变量a的地址。书上叫做"间接运算符"。
*运算符:指针运算符,*ptr表示其所指向的变量。
&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。
*p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。
例如:
int a=12;
int b;
int*p;
int**ptr;
p=&a;//&a的结果是一个指针,类型是int*,指向的类型是int,指向的地址是a的地址。 *p=24;//*p的结果,在这里它的类型是int,它所占用的地址是p所指向的地址,显然,*p就是变量a。
ptr=&p;//&p的结果是个指针,该指针的类型是p的类型加个*,在这里是int **。该指针所指向的类型是p的类型,这里是int*。该指针所指向的地址就是指针p自己的地址。
*ptr=&b;//*ptr是个指针,&b的结果也是个指针,且这两个指针的类型和所指向的类型是一样的,所以用&b来给*ptr赋值就是毫无问题的了。
**ptr=34;//*ptr的结果是ptr所指向的东西,在这里是一个指针,对这个指针再做一次*运算,结果就是一个int类型的变量。
一个表达式的最后结果如果是一个指针,那么这个表达式就叫指针表达式。
下面是一些指针表达式的例子:
int a,b;
int array[10];
int*pa;
pa=&a;//&a是一个指针表达式。
int**ptr=&pa;//&pa也是一个指针表达式。
*ptr=&b;//*ptr和&b都是指针表达式。
pa=array;
pa++;//这也是指针表达式。

char*arr[20];
char**parr=arr;//如果把arr看作指针的话,arr也是指针表达式
char*str;
str=*parr;//*parr是指针表达式
str=*(parr+1);//*(parr+1)是指针表达式
str=*(parr+2);//*(parr+2)是指针表达式
由于指针表达式的结果是一个指针,所以指针表达式也具有指针所具有的四个要素:指针的类型,指针所指向的类型,指针指向的内存区,指针自身占据的内存。
好了,当一个指针表达式的结果指针已经明确地具有了指针自身占据的内存的话,这个指针表达式就是一个左值,否则就不是一个左值。 在上上例中,&a不是一个左值,因为它还没有占据明确的内存。*ptr是一个左值,因为*ptr这个指针已经占据了内存,其实*ptr就是指针pa,既然pa已经在内存中有了自己的位置,那么*ptr当然也有了自己的位置。

三:指针的算术运算
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如:
Char a[20];
int* ptr=(int*)a; ...
ptr++;
printf("%c\n",*(ptr+1)); //会打印出a[4]的值,
编译器是这样处理的:它把指针ptr的值加上了sizeof(int),printf(“%d\n”*(ptr+1)); //打印a[4],a[5],a[6],a[7]各二进制位组成的int型值
ptr += 5;// 编译器是这样处理的:将指针ptr的值加上5乘sizeof(int),
printf(“%d\n”*ptr);//指针访问了a[20]之后的内存,结果未知,若是写操作,会有危险
在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样处理的:它把指针ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于地址是用字节做单位的,故ptr所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。 由于char类型的长度是一个字节,所以,原来ptr是指向数组a的第0号单元开始的四个字节,此时指向了数组a中从第4号单元开始的四个字节。
总结一下,一个指针ptrold加上一个整数n后,结果是一个新的指针ptrnew, ptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值增加了n乘sizeof(ptrold所指向的类型)个字节。就是说,ptrnew所指向的内存区将比ptrold所指向的内存区向高地址方向移动了n乘sizeof(ptrold所指向的类型)个字节。 一个指针ptrold减去一个整数n后,结果是一个新的指针ptrnew,ptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值减少了n乘sizeof(ptrold所指向的类型)个字节,就是说,ptrnew所指向的内存区将比ptrold所指向的内存区向低地址方向移动了n乘sizeof(ptrold所指向的类型)个字节。

四: 指针类型转换
赋值运算符“=”号成立的条件是:
1 、左边的值必须为可修改的左值(l-value)
2、“=”号两边的表达式结果类型必须一致。如果“=”号两边是指针表达式,它还必须符合第三个条件
3、“=”号两边的指针表达式所指向的类型必须一致。
当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。
float f=12.3;
float*fptr=&f;
int*p;
在上面的例子中,假如我们想让指针p指向实数f,应该怎么搞?是用下面的语句吗?
p=&f; 不对。因为指针p的类型是int*,它指向的类型是int。表达式&f的结果是一个指针,指针的类型是float*,它指向的类型是float。两者不一致,直接赋值的方法是不行的。为了实现我们的目的,需要进行"强制类型转换":
p=(int*)&f; 如果有一个指针p,我们需要把它的类型和所指向的类型改为TYEP1*和TYPE2, 那么语法格式是: (TYPE1*)p; 这样强制类型转换的结果是一个新指针,该新指针的类型是TYPE1*,它指向的类型是TYPE2,它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都没有被修改。(还必须要注意一点TYPE1和TYPE2的类型还必须一直)
一个函数如果使用了指针作为形参,那么在函数调用语句的实参和形参的结合过程中,也会发生指针类型的转换。 例
void fun(char*);
int a=125,b;
fun((char*)&a);
... ...
void fun(char*s)
{
char c;
c=*(s+3);*(s+3)=*(s+0);*(s+0)=c;
c=*(s+2);*(s+2)=*(s+1);*(s+1)=c;
}
注意这是一个32位程序,故int类型占了四个字节,char类型占一个字节。函数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗?在函数调用语句中,实参&a的结果是一个指针,它的类型是int*,它指向的类型是int。形参这个指针的类型是char*,它指向的类型是char。这样,在实参和形参的结合过程中,我们必须进行一次从int*类型到char*类型的转换。结合这个例子,我们可以这样来想象编译器进行转换的过程:编译器先构造一个临时指针char*temp, 然后执行temp=(char*)&a,最后再把temp的值传递给s。所以最后的结果是:s的类型是char*,它指向的类型是char,它指向的地址就是a的首地址。
们已经知道,指针的值就是指针指向的地址,在32位程序中,指针的值其实是一个32位整数。那可不可以把一个整数当作指针的值直接赋给指针呢?就象下面的语句:
unsigned int a;
TYPE*ptr;//TYPE是int,char或结构类型等等类型。
... ...
a=20345686
ptr=20345686;//我们的目的是要使指针ptr指向地址20345686(十进制 )
ptr=a;//我们的目的是要使指针ptr指向地址20345686(十进制)
编译一下吧。结果发现后面两条语句全是错的。
那么我们的目的就不能达到了吗?不,还有办法:
unsigned int a;
TYPE*ptr;//TYPE是int,char或结构类型等等类型。
... ...
a=某个数;这个数必须代表一个合法的地址
ptr=(TYPE*)a;//呵呵,这就可以了。
严格说来这里的(TYPE*)和指针类型转换中的(TYPE*)还不一样。
这里的(TYPE*)的意思是把无符号整数a的值当作一个地址来看待。
上面强调了a的值必须代表一个合法的地址,否则的话,在你使用ptr的时候,就会出现非法操作错误。
unsigned char* s_cfque = (unsigned char*)0x800000;
想想能不能反过来,把指针指向的地址即指针的值当作一个整数取出来。完 全可以。
下面的例子演示了把一个指针的值当作一个整数取出来,然后再把这个整数当作一个地址赋给一个指针:
int a=123,b;
int* ptr=&a;
char* str;
b=(int)ptr;//把指针ptr的值当作一个整数取出来。
str=(char*)b;//把这个整数的值当作一个地址赋给指针str。
好了,现在我们已经知道了,可以把指针的值当作一个整数取出来,也可以把一个整数值当作地址赋给一个指针。

C语言 编译原理

编译:将原程序转化成二进制格式的目标文件。
汇编:将源程序翻译成目标程序(针对的是汇编代码)
连接:根据二进制的目标文件中的内容,将使用到的程序库合并成可执行程序。
交叉编译:简单地说,就是在一个平台上生成另一个平台上的可执行代码。
Makefile编译:根据makefile文件指定的编译链接过程来完成编译。

一:c语言的编译流程(c语言是如何变成可执行文件的)
源代码(.c)--->预处理器(预编译)--->编译器(编译生成.o文件)--->优化处理---->汇编(处理程序中的汇编语言)--->链接器(链接生成可执行文件)。
1。预编译,把源代码中的宏展开并把包含的文件的源代码插入程序的源代码中.
编译预处理读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
伪指令主要包括以下四个方面
1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。
2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif,等等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉
3) 头文件包含指令,如#include "FileName"或者#include 等。在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用 头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再 在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。包含到c源 程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号(< >)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。
4)特殊符号,预编译程序可以识别一些特殊的符号。例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令
2。编译,把源代码编译成二进制的目标文件.但是此时目标文件还是不可执行的.
经过预编译得到的输出文件中,将只有常量。如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,}, +,-,*,\,等等。预编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
3。优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。
一种优化是对中间代码的优化。 这种优化不依赖于具体的计算机。
另一种优化则主要针对目标代码的生成而进行的。
我们将优化阶段放在编译程序的后面,这是一种比较笼统的表示。
对于前一种优化,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。
后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重要的研究 课题。经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。
4。汇编,这一步主要是处理源代码中的汇编代码。
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:代码段  该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。 数据段  主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。 UNIX环境下主要有三种类型的目标文件:
1)可重定位文件  其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据
2)共享的目标文件  这种文件存放了适合于在两种上下文里链接的代码和数据。第一种事链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个目标文件;第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象
3)可执行文件   它包含了一个可以被操作系统创建一个进程来执行之的文件。汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。
5。连接,把目标代码和二进制的库文件以及其它内容合并成最终的可执行文件.
由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。例如,某个源文件中的函数可能引用了另一个 源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体。根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种:
1)静态链接 在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
2) 动态链接  在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的 名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录 的信息找到相应的函数代码。
对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较 短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。 在某些情况下动态链接可能带来一些性能上损害。


编译的各个阶段:



二:交叉编译:

“既然我们已经有了主机编译器,那为什么还要交叉编译呢?”其实答案很简单,没办法啊!有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器了。所以只能在主机上安装目的平台的编译器(或者是目的平台的改进编译器)。

三:Makefile编译

makefile是用于自动编译和链接的一个文件,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接-----但是不是所有的文件都需要重新编译,makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件!

在unix系统下,makefile是与make命令配合使用的

2008年10月28日星期二

硬件知识 GSM的原理

GSM900和DCS1800就是我们平常讲的双频网络,它们都是GSM标准。两个系统功能相同,主要是频率不同,GSM900工作在900MHZ,DCS1800工作在1800MHZ。我国最早使用的是GSM900,随着通信网络规模和用户数量的迅速发展,原有的GSM900网络频率变得日益紧张,为更好地满足用户增长的需求,我国近期引入了DCS1800,并采用以GSM900网络为依托, DCS1800网络为补充的组网方式,构成GSM900/DCS1800双频网,以缓和高话务密集区无线信道日趋紧张的状况。只要用户使用的是双频手机,就可在GSM900/DCS1800两者之间自由切换,自动选择最佳信道进行通话,即使在通话中手机也可在两个网络之间自动切换而用户毫无察觉,而且手机选择了最佳信道,接通率得到了提高。为适应这个趋势,进一步抢占市场份额,诺基亚、摩托罗拉、爱立信等世界著名移动电话设备生产厂商竞相开发并推出多频段手机。
(一)GSM系统的网络结构
GSM的历史可以追溯到1982年,当时,北欧四国向CEPT(Conference Europe of Post and Telecommunications)提交了一份建议书,要求制定900MHZ频段的欧洲公共电信业务规 范,以建立全欧统一的蜂窝系统。同年,成立了移动通信特别小组(GSM-Group Special Mobile)。在1982年~1985年期间,讨论焦点是制定模拟蜂窝网标准还是制定数字蜂窝网 标准问题,直到1986年决定为制定数字蜂窝网标准。1986年,在巴黎对不同公司、不同 方案的系统(8个)进行了比较,包括现场试验。1987年5月选定窄带TDMA方案。与此同时,18个国家签署了谅解备忘录,相互达成履行规范的协议。1988年颁布了GSM标准, 也称泛欧数字蜂窝通信标准。在现阶段,GSM包括两个并行的系统:GSM900和DCS1800, 这两个系统功能相同,主要是频率不同。在GSM建议中,未对硬件作出规定,只对功能和接口制定了详细规定,这样便于不同产品可以互通。GSM建议共有12个系统。
1.GSM系统的主要组成   
GSM数字蜂窝通信系统的主要组成部分可分为移动台、基站子系统和网络子系统。
基站子系统(简称基站BS)由基站收发台(BTS)和基站控制器(BSC)组成;
网络子系 统由移动交换中心(MSC)和操作维护中心(OMC)以及原地位置寄存器(HLR)、访问 位置寄存器(VLR)、鉴权中心(AUC)和设备标志寄存器(EIR)等组成。
2.GSM的区域、号码、地址与识别
1)区域划分
从地理位置范围来看,GSM系统分为GSM服务区,公用陆地移动网(PLMN)业务区、移动 交换控制区(MSC区)、位置区(LA)、基站区和小区。   
*GSM服务区   由联网的GSM全部成员国组成,移动用户只要在服务区内,就能得到系统的各种服 务,包括完成国际 漫游。   
*PLMN业务区    由GSM系统构成的公用陆地移动网(GSM/PLMN)处于国际或国内汇接交换机的级别上,该区域为PLMN业务区,它可以与公用交换电信网(PSTN)、综合业务数字网(ISDN) 和公用数据网(PDNN)互连,在该区域内,有共同的编号方法及路由规划。一个PLMN 业务区包括多个MSC业务区,甚至可扩展全国。   
*MSC业务区    在该区域内,有共同的编号方法及路由规划。由一个移动交换中心控制区域称为 MSC业务区。一个MSC区可以由一个或多个位置区组成。   
*位置区    每一个MSC业务区分成若干位置区(LA),位置区由若干基站区组成,它与一个或 若干个基站控制器(BSC)有关。在位置区内移动台移动时,不需要作位置更新。当寻 呼移动用户时,位置区内全部基站可以同时发寻呼信号。系统中,位置区域以位置区 识别码(LAI)来区分MSC业务区的不同位置区。   
*基站区   一般指一个基站控制器所控制若干个小区的区域称为基站区。   
*小区    小区也叫蜂窝区,理想形状是正六边形,一个小区包含一个基站,每个基站包含 若干套收,发信机,其有效覆盖范围决定于发射功率、天线高度等因素,一般为几公 里。基站可位于正六边形中心,采用全向天线,称为中心激励;也可位于正六边形顶 点(相隔设置),采用120度或60度定向天线,称为顶点激励。    若小区内业务量激增时,小区可以缩小(一分为四),新的小区俗称“小小区”, 在蜂窝网中称为小区分裂。
2)识别号码   
GSM网络是十分复杂的,它包括交换系统,基站子系统和移动台。移动用户可以 与市话网用户、综合业务数字网用户和其它移动用户进行接续呼叫,因此必须具有多 种识别号码。   
1>国际移动用户识别码(IMSI)    国际移动用户识别码是用于识别GSM/PLMN网中用户,简称用户识别码,根据GSM 建议,IMSI最大长度为15位十进制数字。MCC MNC MSIN/NMSI3位数字 1或者2位数字 10-11位数字MCC-移动国家码,3位数字。如中国的MCC为460。MNC-移动网号,最多2位数字。用于识别归属的移动通信网(PLMN)。MSIN-移动用户识别码。用于识别移动通信网中的移动用户。NMSI-国内移动用户识别码。由移动网号和移动用户识别码组成。   
2>临时用户识别码(TMSI)为安全起见,在空中传送用户识别码时用TMSI来代替IMSI,因为TMSI只在本地有效(即 在该MSC/VLR区域内),其组成结构由管理部门选择,但总长不超过4个字节。  
3>国际移动设备识别码(IMEI) IMEI是唯一的,用于识别移动设备的号码。用于监控被窃或无效的这一类移动设备, IMEI的构成如下图所示。IMEI=TAC+FAC+SNR+SP(15位数)。TAC FAC SNR SP6位数字 2位数字 6位数字 1位数字TAC - Type Approval Code (TAC) 型号批准码,由欧洲型号批准中心分配。 前2位为国家码。(例如:Nokia的,Ericsson的,Motorola的,又各式各样不同型号的 批准码又不尽相同,如同是Ericsson的,GH388和GF388就不一样,虽然只差有无盖; 但只要是同一型号的,前六码一定一样,如果不一样,可能是冒牌货!)FAC - Final Assembly Code (FAC)最后装配码,表示生产厂或最后装配地, 由厂家编码。如40的话,是Motorola在英国(UK)的工厂,07也是Motorola的工厂,在 德国,67的话也是,在美国本地。对Nokia,FAC是51。 SNR - Serial Number (SNR)序号码,独立地、唯一地识别每个TAC和FAC移 动设备,所以同一个牌子的同一型号的SNR是不可能一样的。SP - Spare备用码,通常是0。   
4>移动台PSTN/ISDN号码(MSISDN)MSISDN用于公用交换电信网(PSTN)或综合业务数字网(ISDN)拨向GSM 系统的号码,构成如下:MSISDN=CC+NDC+SN(总长不超过15位数字)CC=国家码(如中国为86),NDC=国内地区码,SN=用户号码  
5>移动台漫游号码(MSRN) 当移动台漫游到另一个移动交换中心业务区时,该移动交换中心将给移动台分配 一个临时漫游号码,用于路由选择。漫游号码格式与被访地的移动台PSTN/ISDN号码格 式相同。当移动台离开该区后,被访位置寄存器(VLR)和原地位置寄存器(HLR)都 要删除该漫游号码,以便可再分配给其它移动台使用。  MSRN分配过程如下:    市话用户通过公用交换电信网发MSISDN号至GSMC、HLR。HLR请求被访MSC/VLR分配 一个临时性漫游号码,分配后将该号码送至HLR。HLR一方面向MSC发送该移动台有关参 数,如国际移动用户识别码(IMSI);另一方面HLR向GMSC告知该移动台漫游号码, GMSC即可选择路由,完成市话用户->GMSC->MSC->移动台接续任务。   
6>位置区识别码(LAI)    LAI用于移动用户的位置更新。LAI=MCC+MNC+LAC 。MCC=移动国家码,识别国家, 与IMSI中的三位数字相同。MNC=移动网号,识别不同的GSMPLMN网,与IMSI中的MNC相 同。LAC=位置区号码,识别一个GSMPLMN网中的位置区。LAC的最大长度为16bits,一 个GSMPLMN中可以定义65536个不同的位置区。   
7>小区全球识别码(CGI)    CGI是用来识别一个位置区内的小区。它是在位置区识别码(LAI)后加上一个小 区识别码(CI)。    CGC=MCC+MNC+LAC+CI。   CI=小区识别码,识别一个位置区内的小区,最多为16bits。   
8>基站识别码(BSIC)   BSIC用于移动台识别不同的相邻基站,BSIC采用6比特编码。
(二)GSM系统信道分类   
蜂窝通信系统要传输不同类型的信息,包括业务信息和各种控制信息,因而要在物理 信道上安排相应的逻辑信道。这些逻辑信道有的用于呼叫接续阶段,有的用于通信进行 当中,也有的用于系统运行的全部时间内。
1、业务信道(TCH)传输话音和数据   
话音业务信道按速率的不同,可分为全速率话音业务信道(TCH/FS)和半速率话音业务信道(TCH/HS)。   
同样,数据业务信道按速率的不同,也分为全速率数据业务信道(如TCH/F9.6, TCH/F4.8,TCH/F2.4)和半速率数据业务信道(如 TCH/H4.8,TCH/H2.4)(这里的数 字9.6,4.8和2.4表示数据速率,单位为kb/s)。
2、控制信道(CCH)传输各种信令信息   
制信道分为三类:   
1)广播信息(BCH)是一种“一点对多点”的单方向控制信道,用于基站向所有移 动台广播公用信息。传输的内容是移动台入网和呼叫建立所需要的各种信息。其中又分 为:   
a、频率校正信道(FCCH):传输供移动台校正其工作频率的信息;   
b、同步信道(SCH):传输供移动台进行同步和对基站进行识别的信息;   
c、广播控制信道(BCCH):传输通用信息,用于移动台测量信号强度和识别小区 标志等。
2)公共控制信道(CCCH)是一种“一点对多点”的双向控制信道,其用途是在呼 叫接续阶段,传输链路连接所需要的控制信令与信息。其中又分为:   
a、寻呼信道(PCH):传输基站寻呼移动台的信息; 
b、随机接入信道(RACH):移动台申请入网时,向基站发送入网请求信息;   
c、准许接入信道(AGCH):基站在呼叫接续开始时,向移动台发送分配专用控制 信道的信令。   
3)专用控制信道(DCCH)是一种“点对点”的双向控制信道,其用途是在呼叫接 续阶段和在通信进行当中,在移动台和基站之间传输必需的控制信息。其中又分为:   
a、独立专用控制信道(SDCCH):传输移动台和基站连接和信道分配的信令;   
b、慢速辅助控制信道(SACCH):在移动台和基站之间,周期地传输一些特定的信 息,如功率调整、帧调整和测量数据等信息;SACCH是安排在业务信道和有关的控制信 道中,以复接方式传输信息。安排在业务信道时,以SACCH/T表示,安排在控制信道时, 以SACCH/C表示,SACCH/常与SDCCH联合使用。   
c、快速辅助控制信道(FACCH):传送与SDCCH相同的信息。使用时要中断业务信息(4帧),把FACCH插入,不过,只有在没有分配SDCCH的情况下,才使用这种控制信 道。这种控制信道的传输速率较快,每次占用4帧时间,约18.5ms。   
由此可见,GSM通信系统为了传输所需的各种信令,设置了多种专门的控制信道。 这样做,除因为数字传输为设置多各逻辑信道提供了可能外,主要是为了增强系统的控 制功能(比如后面将要提到的,为提高过境切换的速度而采用移动台辅助切换技术), 也为了保证话音通信质量,在模拟蜂窝系统中,要在通话进行过程中,进行控制信息的 传输,必须中断话音信息的传输(100ms),这就是所谓的“中断一猝发”的控制方式。 信道中断100ms,会使话音产生可以听得到的喀喇声。如果这种中断过于频繁,势必明 显地降低话音质量,因此,模拟蜂窝系统必须限制在通话过程中传输控制信息的容量。 与此不同,GSM蜂窝系统采用专用控制信道传输控制信息,除去FACCH外,不在通信过 程中中断话音信息,因而能保证话音的传输质量。其中FACCH虽然也采取“中断一猝发” 控制方式,但是只在特定场合下才使用,而且占用的时间短(18.5ms),其影响明显 减小。GSM蜂窝系统还采用信息处理技术,来估计并补偿这种因为插入FACCH而被删除 的话音。

硬件知识 移动通信系统介绍

移动通信系统的分类方法:按信号性质分,按调制方式分,按多址连接方式分。
按信号性质分,可分为模拟、数字;
按调制方式分,可分为调频、调相、调幅;
按多址连接方式分,可分为频分多址(FDMA)、时分多址(TDMA)和码分多址(CDMA)。
中国联通、中国移动所使用的GSM移动电话网采用的便是FDMA和TDMA两种方式的结合。
中国联通的CDMA业务使用的是CDMA方式。
GSM比模拟移动电话有很大的优势,但是,在频谱效率上仅是模拟系统的3倍,容量有限;在话音质量上也很难达到有线电话水平;TDMA终端接入速率最高也只能达到9.6kbit/s;TDMA系统无软切换功能,因而容易掉话,影响服务质量。因此,TDMA并不是现代蜂窝移动通信的最佳无线接入。
CDMA移动通信网是由扩频、多址接入、蜂窝组网和频率复用等几种技术结合而成,含有频域、时域和码域三维信号处理的一种协作,因此它具有抗干扰性好,抗多径衰落,保密安全性高,同频率可在多个小区内重复使用,容量和质量之间可做权衡取舍等属性。这些属性使CDMA比其它系统有很大的优势。
(1) 系统容量大 理论上,在使用相同频率资源的情况下,CDMA移动网比模拟网容量大20倍,实际使用中比模拟网大10倍,比GSM要大4-5倍。
(2) 系统容量的配置灵活 在CDMA系统中,用户数的增加相当于背景噪声的增加,造成话音质量的下降。但对用户数并无限制,操作者可在容量和话音质量之间折衷考虑。另外,多小区之间可根据话务量和干扰情况自动均衡。 这一特点与CDMA的机理有关。CDMA是一个自扰系统,所有移动用户都占用相同带宽和频率,打个比方,将带宽想像成一个大房子,所有的人将进入惟一的大房子。如果他们使用完全不同的语言,他们就可以清楚地听到同伴的声音而只受到一些来自别人谈话的干扰。在这里,屋里的空气可以被想像成宽带的载波,而不同的语言即被当作编码,我们可以不断地增加用户直到整个背景噪音限制住了我们。如果能控制住用户的信号强度,在保持高质量通话的同时,我们就可以容纳更多的用户。
(3) 通话质量更佳 TDMA的信道结构最多只能支持4Kb的语音编码器,它不能支持8Kb以上的语音编码器。而CDMA的结构可以支持13kb的语音编码器。因此可以提供更好的通话质量。CDMA系统的声码器可以动态地调整数据传输速率,并根据适当的门限值选择不同的电平级发射。同时门限值根据背景噪声的改变而变,这样即使在背景噪声较大的情况下,也可以得到较好的通话质量。另外,TDMA采用一种硬移交的方式,用户可以明显地感觉到通话的间断,在用户密集、基站密集的城市中,这种间断就尤为明显,因为在这样的地区每分钟会发生2至4次移交的情形。而CDMA系统“掉话”的现象明显减少,CDMA系统采用软切换技术,“先连接再断开”,这样完全克服了硬切换容易掉话的缺点。
(4) 频率规划简单 用户按不同的序列码区分,所以不相同CDMA载波可在相邻的小区内使用,网络规划灵活,扩展简单。
(5)建网成本低 CDMA技术通过在每个蜂窝的每个部分使用相同的频率,简化了整个系统的规划,在不降低话务量的情况下减少所需站点的数量从而降低部署和操作成本。CDMA网络覆盖范围大,系统容量高,所需基站少,降低了建网成本。
CDMA数字移动技术与现在众所周知的GSM数字移动系统不同。模拟技术被称为第一代移动电话技术,GSM是第二代,CDMA是属于移动通讯第二代半技术,比GSM更先进。

GSM的历史可以追溯到1982年,当时,北欧四国向CEPT(Conference Europe of Post and Telecommunications)提交了一份建议书,要求制定900MHZ频段的欧洲公共电信业务规 范,以建立全欧统一的蜂窝系统。同年,成立了移动通信特别小组(GSM-Group Special Mobile)。在1982年~1985年期间,讨论焦点是制定模拟蜂窝网标准还是制定数字蜂窝网 标准问题,直到1986年决定为制定数字蜂窝网标准。1986年,在巴黎对不同公司、不同 方案的系统(8个)进行了比较,包括现场试验。1987年5月选定窄带TDMA方案。与此同时,18个国家签署了谅解备忘录,相互达成履行规范的协议。1988年颁布了GSM标准, 也称泛欧数字蜂窝通信标准。在现阶段,GSM包括两个并行的系统:GSM900和DCS1800, 这两个系统功能相同,主要是频率不同。在GSM建议中,未对硬件作出规定,只对功能和接口制定了详细规定,这样便于不同产品可以互通。GSM建议共有12个系统。

硬件知识 基带信号和宽带信号及多路复用技术

基带信号就是将数字信号 1 或 0 直接用两种不同的电压来表示,然后送到线路上去传输。
特征:
*保持数据波形的原样
* 数字信号为电脉冲或者光脉冲
* 信号传输将占用整个信道的带宽
* 数据波信号会随着距离的增加而衰减,随着频率的增加而容易发生畸变,因此它不适合高速和远距离的传输
宽带信号则是将基带信号进行调制后形成的频分复用模拟信号。
多路复用是指两个或多个用户共享公用信道的一种机制。通过多路复用技术,多个终端能共享一条高速信道,从而达到节省信道资源的目的,
  多路复用技术的基本原理是:各路信号在进入同一个有线的或无线的传输媒质之前,先采用调制技术把它们调制为互相不会混淆的已调制信号,然后进入传输媒质传送到对方,在对方再用解调(反调制)技术对这些信号加以区分,并使它们恢复成原来的信号,从而达到多路复用的目的。
  常用的多路复用技术有频分多路复用(FDMA),时分多路复用(TDMA),码分多路复用(CDMA),波分多路复用(WDM)几种。
频分多路复用(FDMA)
频分制是将传输频带分成N部分,每一个部分均可作为一个独立的传输信道使用。这样在一对传输线路上可有N对话路信息传送,而每一对话路所占用的只是其中的一个频段。频分制通信又称载波通信,它是模拟通信的主要手段。
时分多路复用(TDMA)
时分制是把一个传输通道进行时间分割以传送若干话路的信息。把N个话路设备接到一条公共的通道上,按一定的次序轮流的给各个设备分配一段使用通道的时间。当轮到某个设备时,这个设备与通道接通,执行操作。与此同时,其它设备与通道的联系均被切断。待指定的使用时间间隔一到,则通过时分多路转换开关把通道联接到下一个要连接的设备上去。时分制通信也称时间分割通信,它是数字电话多路通信的主要方法,因而PCM通信常称为时分多路通信。时分多路复用技术广泛应用于数字通讯。
码分多路复用(CDMA)
CDMA技术不是一项新技术,作为一种多址方案它已经成功地应用于卫星通信和蜂窝电话领域,并且显示出许多优于其他技术的特点。但是,由于卫星通信和移动通信中带宽的限制,所以CDMA技术尚未充分发挥优点。光纤通信具有丰富的带宽,能够很好地弥补这个缺陷。近年来,OCDMA已经成为一项备受瞩目的热点技术。
波分多路复用(WDM)
波分复用(WDM)是将两种或多种不同波长的光载波信号(携带各种信息)在发送端经复用器(亦称合波器,Multiplexer)汇合在一起,并耦合到光线路的同一根光纤中进行传输的技术; 在接收端,经解复用器(亦称分波器或称去复用器,Demultiplexer)将各种波长的光载波分离,然后由光接收机作进一步处理以恢复原信号。这种在同一根光纤中同时传输两个或众多不同波长光信号的技术,称为波分复用。这种用于光纤通信的“波分复用”技术,现在正在迅速发展之中。
频分多路复用与时分多路复用的区别如下:
(1)微观上,频分多路复用的各路信号是并行的,而时分多路复用是串行的。
(2)频分多路复用较适合于模拟信号,而时分多路复用较适用于数字信号。
频分多路复用是将传输介质的可用带宽分割成一个个“频段”,以便每个输入装置都分配到一个“频段”。传输介质容许传输的最大带宽构成一个信道,因此每个“频段”就是一个子信道。 频分多路复用的特点是:每个用户终端的数据通过专门分配给它的予信道传输,在用户没有数据传输时,别的用户也不能使用。频分多路复用适合于模拟信号的频分传输,主要用于电话和电缆电视(CATV)系统,在数据通信系统中应和调制解调技术结合使用。

arm硬件知识 arm处理器的存储模式

ARM体系结构将存储器看作是从零地址开始的字节的线性组合(即所说的平板地址空间)。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构支持最大寻址空间为4GB(2^32)字节。
在ARM体系结构中,每个字单元包含4字节单元或者2个半字单元,1个半字单元包含2字节单元。但是在字单元中,4字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式,通常称为大端格式或者小端格式,也就是big-endian格式和little-endian格式。大/小端的选择对于不同的芯片来说有一些不同的选择方式,一般都可以通过外部的引脚或内部的寄存器来选择。具体要参见处理器的数据手册。
大端格式:

小端格式:在ARM体系结构中通常希望字单元的地址是字对齐的(地址的低两位是0b00),半字单元的地址是半字对齐的(地址的最低位为0b0),
但在存储单元中地址没有遵守上述的对齐规则,称为非对齐的存储访问操作,在ARM体系结构的伪指令集中有专门的align指令来指定对齐格式。



2008年10月27日星期一

arm硬件知识 arm处理器MMU

一:在ARM系统中,存储管理单元MMU主要完成工作:
1、虚拟存储空间到物理存储空间的映射。在ARM中采用了页式虚拟存储管理。
2、存储器访问权限的控制。
3、设置虚拟存储空间的缓冲的特性。
二:开启MMU时存储访问过程:

禁止MMU时存储访问过程:
① 先要确定芯片是否支持cache和write buffer。如果芯片规定当禁止MMU时禁止cache和write buffer,则存储访问将不考虑C和B控制位。如果芯片规定当禁止MMU时可以使能cache和write buffer,则数据访问时,C=0,B=0;指令读取时,如果使用分开的TLB,那么C=1,如果使用统一的TLB,那么C=0。
② 存储访问不进行权限控制,MMU也不会产生存储访问中止信号。
③ 所有的物理地址和虚拟地址相等,即使用平板存储模式。

三: MMU中的地址变换过程:通过两级页表实现。
a)一级页表中包含有以段为单位的地址变换条目以及指向二级页表的指针。一级页表是实现的地址映射粒度较大。以段为单位的地址变换过程只需要一级页表。
b)二级页表中包含有以大页和小页为单位的地址变换条目。有一种类型的二级页表还包含有以极小页为单位的地址变换条目。以页为单位的地址变换过程需要二级页表。

arm硬件知识 arm和thumb

ARM7TDMI核以后,T变种的ARM微处理器有两种工作状态
ARM状态
Thumb状态
ARM是32位指令集
Thumb是16位指令集,功能是ARM指令集的功能子集。

在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且该转变不影响处理器的工作模式和相应寄存器中的内容。

ARM指令集和Thuumb指令集均有切换处理器状态的指令,并可以再两种工作状态之间切换,但是ARM微处理器在开始执行代码时,应该处于ARM状态。
进入Thumb状态:当操作数寄存器的状态位(位[0])为1时,执行BX指令使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ,FIQ,Undef,Abort,SWI等),则异常处理返回时,自动切换到Thumb状态。
进入ARM状态:当操作数寄存器的状态位(位[0])为0时,执行BX指令使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。

2008年10月26日星期日

arm硬件知识 arm处理器的寄存器

ARM寄存器介绍

在移植操作系统的时候,尤其是在移植Boot Loader的时候必须了解ARM处理器的寄存器。在Boot Loader里有一段很重要的处理器初始化程序是用ARM汇编写的,有几个关键参数需要传递,关于这些参数在后面介绍Boot Loader时会有详细的描述。
ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。
(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。
(2)6个状态寄存器:状态寄存器也是32位的寄存器,但是只使用了其中的12位。
1. 通用寄存器

在ARM处理器的7种模式下都有一组对应的寄存器组。在任意时刻,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状态寄存器和PC。在所有的寄存器中,有些是各种模式下共用的同一个物理寄存器,有些是各种模式自己独立拥有的物理寄存器。详细如表1-3所示。


通用寄存器通常又可以分为下面3类。

未备份寄存器:包括R0~R7。
备份寄存器:包括R8~R14。
程序计数器PC:即R15。
1)未备份寄存器R0~R7对于每个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器,在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未备份寄存器。

2)备份寄存器R8~R14备份寄存器中的每个寄存器对应于两个不同的物理寄存器。例如,当使用快速中断模式下的寄存器时,寄存器R8和寄存器R9分别记做R8_fiq和R9_fiq,当使用用户模式下的寄存器时,寄存器R8和寄存器R9分别记做R8_usr和R9_usr等。在这两种情况下使用的是不同的物理寄存器,系统没有将这几个寄存器用于任何的特殊用途。中断处理非常简单,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理过程很迅速。对于备份寄存器R13、R14来说,每个寄存器对应于6个不同的物理寄存器,其中的一个是用户模式和系统模式共用的,另外的5个则对应于其他5种处理器模式,采用下面的方法来标识。R13_mode,其中mode是usr、svc、abt、und、irq和fiq的一种。R13通常用做堆栈指针。每一种模式都拥有自己的物理R13。程序初始化R13,使其指向该模式专用的栈地址。当进入该模式时,可以将需要使用的寄存器保存在R13所指的栈中,当退出该模式时,将保存在R13所指的栈中的寄存器值弹出。这样就实现了程序的现场保护。寄存器R14又被称为连接寄存器(LR),在ARM中有下面两种特殊用途。① 每一种处理器模式在自己的物理R14中存放当前子程序的返回地址。当通过BL或者BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,就实现了子程序返回。具体的汇编调用方式是:MOV PC,LR或BX LR。② 当发生异常中断的时候,该模式下的特定物理R14被设置成该异常模式将要返回的地址。

3)程序计数器PC→R15由于ARM处理器采用的是流水线机制,当正确地读取了PC值时,该值为当前指令地址值加8字节。也就是说对于ARM指令来说,PC指向当前指令的下两条指令的地址,由于ARM指令是字对齐的,PC值的第0位和第1位总是为0。当成功地向PC写入一个地址数值时,程序将跳转到该地址执行。在ARM系统进行代码级调试时对于R13、R14及PC的跟踪很重要,可以用来分析系统堆栈及PC指针值的变化等。

2.程序状态寄存器CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。每一种模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常退出时,可以用SPSR中保存的值来恢复CPSR。CPSR的具体格式如下。

1)条件标志位N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令可以依据CPSR中的这些标志位来选择性地执行。各条件标志位的具体含义,
N
本位设置成当前指令运算结果的bit[31]的值
当两个补码表示的有符号整数运算时,N=1表示运算的结果为负数,N=0 表示结果为正数或零
Z
Z=1表示运算结果是0,Z=0表示运算结果不是零
对于CMP指令,Z=1表示进行比较的两个数大小相等
C
在加法指令中(包括比较指令CMN),结果产生进位了,则C=1,表示无符号数运算发生上溢出,其他情况下C=0
在减法指令中(包括比较指令CMP),结果产生借位了,则C=0,表示无符号数运算发生下溢出,其他情况下C=1
对于包含移位操作的非加/减法运算指令,C中包含最后一次被溢出的位的数值,对于其他非加/减法运算指令,C位的值通常不受影响
V
对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
其他的指令通常不影响V位

2)Q标志位在ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位,主要用于指示增强的DSP指令是否发生了溢出,同样的,SPSR的bit[27]也称为Q标志位,用于在异常中断发生时保存和恢复CPSR中的Q标志位。

3)CPSR中的控制位CPSR的低8位I、F、T及M[4:0]统称为控制位,当异常中断发生时这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。① I中断禁止位当I=1时禁止IRQ中断。当F=1时禁止FIQ中断。通常一旦进入中断服务程序可以通过置位I和F来禁止中断,但是在本中断服务程序退出前必须恢复原来I、F位的值。② T控制位,用来控制指令执行的状态,即说明本指令是ARM指令还是Thumb指令。对于不同版本的ARM处理器,T控制位的含义是有些不同的。对于ARM v3及更低的版本和ARM v4的非T系列版本的处理器,没有ARM和Thumb指令的切换,所以T始终为0。对于ARM v4及更高版本的T系列处理器,T控制位含义如下。当T=0,表示执行ARM指令。当T=1,表示执行Thumb指令。对于ARM v5及更高的版本的非T系列处理器,T控制位的含义如下。当T=0表示执行ARM指令。当T=1表示强制下一条执行的指令产生为定义指令中断。③ M 控制位控制位M[4:0]称为处理器模式标识位,具体说明如下
M[4:0] 处理器模式 可访问的寄存器
0b10000 User PC,R14~R0,CPSR
0b10001 FIQ PC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq
0b10010 IRQ PC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq
0b10011 Supervisor PC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc
0b10111 Abort PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt
0b11011 Undefined PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und
0b11111 System PC,R14~R0,CPSR(ARM v4及更高版本)

CPSR的其他位用于将来ARM版本的扩展,程序可以先不操作这些位。
MRS:状态寄存器到通用寄存器的传送指令。MSR:通用寄存器到状态寄存器的传送指令。

arm硬件知识 arm处理器工作模式

ARM处理器共有7种运行模式如表。

处理器模式 描 述
用户模式(User,usr) 正常程序执行的模式
快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理
外部中断模式(IRQ,irq) 户通常的中断使用
特权模式(Supervisor,sve) 供操作系统使用的一种保护模式
数据访问中止模式(Abort,abt)用于虚拟存储及存储保护
未定义指令中止模式(Undefin- ed,und) 用于支持通过软件仿真硬件的协处理器
系统模式(System,sys) 用于运行特权级的操作系统任务

除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
其中除了系统模式外的其他5种特权模式又称为异常模式。
处理器模式可以通过软件来切换,在ARM Linux操作系统中,只有运行在内核态的程序才有可能更改处理器模式,用户态的程序是不能访问受操作系统保护的系统资源的,更不能直接进行处理器模式的切换。当需要处理器模式切换的时候,用户态的程序可以中断,内核态的中断处理程序开始响应并做出处理。

以上7种模式对应了系统中的中断向量表,这在移植操作系统的时候值得注意的。系统中所有的调度都是围绕着中断向量表展开的。在不用操作系统的系统中也就是通常所谓的裸机系统程序中,对于中断向量表的处理也很关键。这种情况下,这个向量表一般加载在CPU复位执行的开始地址的一段空间(这与单片机一致)。

在移植ARM Linux操作系统时,Boot Loader程序的移植需要考虑这些问题,而一旦Boot Loader移植成功,运行起来以后,开发人员就不需要再考虑这个问题了。

单片机 单片机的处理器结构

对单片机处理方式而言,目前单片机的系统结构有两种类型:
一种是将程式和资料记忆体分开使用,即哈佛(Harvard)结构,当前的单片机大都是这种结构。
另一种是采用和PC机的冯.诺依曼(Von Neumann)类似的原理,对程式和资料记忆体不作逻辑上的区分,即普林斯顿(Princeton)结构。

硬件知识 主要的嵌入式处理器

MCU的架构而言,可分为两大主流;RISC(Reduced Instruction Set Computer)与CISC(Complex Instruction Set Computer),

主要的嵌入式处理器有ARM、MIPS、PowerPC、X86、68K/Cold fire等,下面对这些处理器进行一些简单介绍。
ARM是Advanced RISC Machines的缩写,顾名思义ARM处理器自然也是一种典型的精简指令集处理器。ARM处理器的核心技术来自于英国的一家IC软核设计公司——ARM公司。

MIPS是Microprocessor without Inter-locked Pipeline Stages的缩写,是由MIPS技术公司开发的一种处理器内核标准。目前有32位和64位MIPS芯片,芯片也是由MIPS技术公司生产的。

PowerPC是早期Motorola公司和IBM公司联合为Apple公司的MAC机开发的CPU芯片,商标权同时属于IBM和Motorola两家公司,并一度成为他们的主导产品。IBM公司主要的PowerPC产品有PowerPC 604s(深蓝内部的CPU)、PowerPC 750、PowerPC G3(1.1GHz)。Motorola公司则主要有MC和MPC系列。尽管他们产品不一样,但都采用PowerPC的内核。这些产品在电信、金融和其他许多行业都具有广泛的应用。

x86系列处理器起源于Intel架构的8080,然后发展出286、386、486直到现在的奔腾处理器乃至双核处理器等。从嵌入式市场来看,486DX也应该是和ARM、68K、MIPS和SuperH齐名的5大嵌入式处理器之一。目前市场上的PC104产品基本都是基于x86体系结构,在工业控制领域里面PC104产品的占有量仍然很大。

Motorola 68K是出现比较早的一款嵌入式处理器,采用的是CISC(复杂指令集系统计算机)结构,设计经典,在全球各种嵌入式应用领域中取得巨大成功。Sun微系统公司也把这款处理器应用于早期的工作站中。

arm硬件知识 arm处理器主要内核及其主要区别

ARM处理器当前主要有6个系列产品:ARM7、ARM9、ARM9E、ARM10E、SecurCore 及最新的ARM11 系列。进一步的产品则来自于ARM公司的合作伙伴,如Intel公司的StrongARM产品和XScale微体系结构等,不过Intel公司已经于2006年将该架构出售给Marvell Technology Group Ltd了。ARM公司还把ARM IP Core提供给其他芯片设计公司用于设计ARM+DSP、ARM+FPGA等SOC结构的芯片。现在用得比较多的如TI公司的OMAP,达芬奇系列大部分是含有ARM+DSP双核处理器的产品。Actel公司的带M7标识的ProASIC3E系列芯片则是FPGA+ARM7的SOC系统芯片。这些多功能IC的发展也拓宽了ARM处理器的应用范围。

arm7内核是0.97MIPS/MHz 三级流水线 80MHz 冯·诺伊曼结构 0.06mw/MHz
arm9内核是1.1MIPS/MHz 五级流水线 200MHz 哈佛结构 0.19mw/MHz
arm10内核是1.3MIPS/MHz 六级流水线 300MHz 哈佛结构 0.5mw/MHz
arm11内核是1.2MIPS/MHz 八级流水线 500MHz 哈佛结构 0.4mw/MHz

arm指令集:v4t v5te v5tej v6

arm7,arm966E没有mmu,
arm720T,arm9是有mmu的,
arm940T,arm946E只有Memory protection unit.不是一个完整的MMU。
arm10,arm11是有mmu的。

在ARM处理器内核中有多个功能模块可供生产厂商根据不同用户的不同要求来配置生产。这些模块分别用T、D、M、I、E、J、F、S等来表示,这些模块一般从处理器的内核版本上可以区分出来。
T:表示支持Thumb指令,说明该内核可从16位Thumb指令集扩充到32位ARM指令集。
D:表示支持Debug,说明该内核中放置了用于调试的结构,通常它为一个边界扫描链JTAG,可使CPU进入调试模式,从而方便地进行断点设置、单步调试。
M:表示Multiplier,说明处理器内部带有8位乘法器。
I:表示Embedded ICE Logic,用于实现断点观测及变量观测的逻辑电路部分,其中的TAP控制器可接入到边界扫描链。
除了以上一些特性外,ARM处理器内核中还有一些处理器内核带EJ-S模块。
E:表示DSP Enhancement,即增加了前导零处理和饱和运算等一些常用的DSP运算指令,极大地改善音、视频处理程序的性能。
J:表示Jazelle DBX(Direct Bytecode eXecution),这是ARM公司推出的Java加速解决方案。Jazelle不是一个简单的加速硬件,它是融入于处理器流水线之中的一项专门针对Java指令执行的硬件功能,使得CPU可以直接接收一部分Java指令,并加以译码执行。通过这里的介绍,读者可以试着分析一下ARM926EJ的具体含义。
F:表示向量浮点单元。
S:表示可综合的软核softcore。

冯·诺伊曼结构特点:

哈佛结构特点:

ARM流水线对比

单指令周期流水线:

多指令周期流水线: