<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[缘份天空]]></title>
<link>http://www.zjidea.com/blog/</link>
<description><![CDATA[记录我生活与工作中的点滴]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[lzq0323@yahoo.com.cn(相逢萍水)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>缘份天空</title>
	<url>http://www.zjidea.com/blog/images/logos.gif</url>
	<link>http://www.zjidea.com/blog/</link>
	<description>缘份天空</description>
</image>

			<item>
			<link>http://www.zjidea.com/blog/article/english/2010-07-16-english.htm</link>
			<title><![CDATA[电子元件专业英语]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[外语学习]]></category>
			<pubDate>Fri,16 Jul 2010 09:28:39 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=478</guid>
		<description><![CDATA[电压源 voltage source<br/><br/>电流源 current source<br/><br/>理想电压源 ideal voltage source<br/><br/>理想电流源 ideal current source<br/><br/>伏安特性 volt-ampere characteristic<br/><br/>电动势 electromotive force<br/><br/>电压 voltage<br/><br/>电流 current<br/><br/>电位 potential<br/><br/>电位差 potential difference<br/><br/>欧姆 Ohm<br/><br/>伏特 Volt<br/><br/>安培 Ampere<br/><br/>瓦特 Watt<br/><br/>焦耳 Joule<br/><br/>电路 circuit<br/><br/>电路元件 circuit element<br/><br/>电阻 resistance<br/><br/>电阻器 resistor<br/><br/>电感 inductance<br/><br/>电感器 inductor<br/><br/>电容 capacitance<br/><br/>电容器 capacitor<br/><br/>电路模型 circuit model<br/><br/>参考方向 reference direction<br/><br/>参考电位 reference potential<br/><br/>欧姆定律 Ohm’s law<br/><br/>基尔霍夫定律 Kirchhoff’s law<br/><br/>基尔霍夫电压定律 Kirchhoff’s voltage law（KVL）<br/><br/>基尔霍夫电流定律 Kirchhoff’s current law（KCL）<br/><br/>结点 node<br/><br/>支路 branch<br/><br/>回路 loop<br/><br/>网孔 mesh<br/><br/>支路电流法 branch current analysis<br/><br/>网孔电流法 mesh current analysis<br/><br/>结点电位法 node voltage analysis<br/><br/>电源变换 source transformati*****<br/><br/>叠加原理 superposition theorem<br/><br/>网络 network<br/><br/>无源二端网络 passive two-terminal network<br/><br/>有源二端网络 active two-terminal network<br/><br/>戴维宁定理 Thevenin’s theorem<br/><br/>诺顿定理 Norton’s theorem<br/><br/>开路（断路）open circuit<br/><br/>短路 short circuit<br/><br/>开路电压 open-circuit voltage<br/><br/>短路电流 short-circuit current<br/><br/>直流电路 direct current circuit (dc)<br/><br/>交流电路 alt&#101;rnating current circuit (ac)<br/><br/>正弦交流电路 sinusoidal a-c circuit<br/><br/>平均值 average value<br/><br/>有效值 effective value<br/><br/>均方根值root-mean-squire value (rms)<br/><br/>瞬时值 instantaneous value<br/><br/>电抗 reactance<br/><br/>感抗 inductive reactance<br/><br/>容抗 capacitive reactance<br/><br/>法拉 Farad <br/><br/>亨利 Henry<br/><br/>阻抗 impedance<br/><br/>复数阻抗 complex impedance<br/><br/>相位 phase<br/><br/>初相位 initial phase<br/><br/>相位差 phase difference<br/><br/>相位领先 phase lead<br/><br/>相位落后 phase lag<br/><br/>倒相，反相 phase inversion<br/><br/>频率 frequency<br/><br/>角频率 angular frequency<br/><br/>赫兹 Hertz<br/><br/>相量 phasor<br/><br/>相量图 phasor diagram<br/><br/>有功功率 active power<br/><br/>无功功率 reactive power<br/><br/>视在功率 apparent power<br/><br/>功率因数 power factor<br/><br/>功率因数补偿 power-factor compensation<br/><br/>串联谐振 series resonance<br/><br/>并联谐振 parallel resonance<br/><br/>谐振频率 resonance frequency<br/><br/>频率特性 frequency characteristic<br/><br/>幅频特性amplitude-frequency resp*****e characteristic<br/><br/>相频特性 phase-frequency resp*****e characteristic<br/><br/>截止频率 cutoff frequency<br/><br/>品质因数 quality factor<br/><br/>通频带 pass-band<br/><br/>带宽 bandwidth (BW)<br/><br/>滤波器 filter<br/><br/>一阶滤波器 first-order filter<br/><br/>二阶滤波器 second-order filter<br/><br/>低通滤波器 low-pass filter<br/><br/>高通滤波器 high-pass filter<br/><br/>带通滤波器 band-pass filter<br/><br/>带阻滤波器 band-stop filter<br/><br/>转移函数 transfer function<br/><br/>波特图 Bode diagram<br/><br/>傅立叶级数 Fourier series<br/><br/>三相电路 three-phase circuit<br/><br/>三相电源 three-phase source<br/><br/>对称三相电源 symmetrical three-phase source<br/><br/>对称三相负载 symmetrical three-phase load<br/><br/>相电压 phase voltage<br/><br/>相电流 phase current<br/><br/>线电压 line voltage<br/><br/>线电流 line current<br/><br/>三相三线制 three-phase three-wire system<br/><br/>三相四线制 three-phase four-wire system<br/><br/>三相功率 three-phase power<br/><br/>星形连接 star connection(Y-connection)<br/><br/>三角形连接 triangular connection(D- connection ,delta connection)<br/><br/>中线 neutral line<br/><br/>暂态 transient state<br/><br/>稳态 steady state<br/><br/>暂态过程，暂态响应 transient resp*****e<br/><br/>换路定理 low of switch<br/><br/>一阶电路 first-order circuit<br/><br/>三要素法 three-factor method<br/><br/>时间常数 time c*****tant<br/><br/>积分电路 integrating circuit<br/><br/>微分电路 differentiating circuit<br/><br/>磁路与变压器 磁场magnetic field<br/><br/>磁通 flux<br/><br/>磁路 magnetic circuit<br/><br/>磁感应强度 flux density<br/><br/>磁通势 magnetomotive force<br/><br/>磁阻 reluctance<br/><br/>直流电动机 dc motor<br/><br/>交流电动机 ac motor <br/><br/>异步电动机 asynchronous motor<br/><br/>同步电动机 synchronous motor <br/><br/>三相异步电动机 three-phase asynchronous motor <br/><br/>单相异步电动机 single-phase asynchronous motor <br/><br/>旋转磁场 rotating magnetic field <br/><br/>定子 stator <br/><br/>转子 rotor <br/><br/>转差率 slip <br/><br/>起动电流 starting current <br/><br/>起动转矩 starting torque <br/><br/>额定电压 rated voltage <br/><br/>额定电流 rated current <br/><br/>额定功率 rated power <br/><br/>机械特性 mechanical characteristic <br/><br/>按钮 button <br/><br/>熔断器 fuse 开关 switch <br/><br/>行程开关 travel switch <br/><br/>继电器 relay <br/><br/>接触器 contactor <br/><br/>常开(动合)触点 normally open contact <br/><br/>常闭(动断)触点 normally closed contact <br/><br/>时间继电器 time relay <br/><br/>热继电器 thermal overload relay <br/><br/>中间继电器 intermediate relay <br/><br/>可编程控制器 programmable logic controller <br/><br/>语句表 statement list <br/><br/>梯形图 ladder diagram <br/><br/>本征半导体intrinsic semiconductor <br/><br/>掺杂半导体doped semiconductor <br/><br/>P型半导体 P-type semiconductor <br/><br/>N型半导体 N--type semiconductor <br/><br/>自由电子 free electron <br/><br/>空穴 hole <br/><br/>载流子 carriers <br/><br/>PN结 PN junction <br/><br/>扩散 diffusion <br/><br/>漂移 drift <br/><br/>二极管 diode <br/><br/>硅二极管 silicon diode <br/><br/>锗二极管 germanium diode <br/><br/>阳极 anode <br/><br/>阴极 cathode <br/><br/>发光二极管 light-emitting diode (LED) <br/><br/>光电二极管 photodiode <br/><br/>稳压二极管 Zener diode <br/><br/>晶体管（三极管） transistor <br/><br/>PNP型晶体管 PNP transistor <br/><br/>NPN型晶体管 NPN transistor <br/><br/>发射极 emitter <br/><br/>集电极 collector <br/><br/>基极 base <br/><br/>电流放大系数 current amplification coefficient <br/><br/>场效应管 field-effect transistor (FET) <br/><br/>P沟道 p-channel <br/><br/>N沟道 n-channel <br/><br/>结型场效应管 junction FET（JFET） <br/><br/>金属氧化物半导体 metal-oxide semiconductor (MOS) <br/><br/>耗尽型MOS场效应管 depletion mode MOSFET（D-MOSFET） <br/><br/>增强型MOS场效应管 enhancement mode MOSFET（E-MOSFET） <br/><br/>源极 source <br/><br/>栅极 grid <br/><br/>漏极 drain <br/><br/>跨导 transconductance <br/><br/>夹断电压 pinch-off voltage <br/><br/>热敏电阻 thermistor <br/><br/>开路 open <br/><br/>短路 shorted <br/><br/>放大器 amplifier <br/><br/>正向偏置 forward bias <br/><br/>反向偏置 backward bias <br/><br/>静态工作点 quiescent point (Q-point) <br/><br/>等效电路 equivalent circuit <br/><br/>电压放大倍数 voltage gain <br/><br/>总的电压放大倍数 overall voltage gain <br/><br/>饱和 saturation <br/><br/>截止 cut-off <br/><br/>放大区 amplifier region <br/><br/>饱和区 saturation region <br/><br/>截止区 cut-off region <br/><br/>失真 distortion <br/><br/>饱和失真 saturation distortion <br/><br/>截止失真 cut-off distortion <br/><br/>零点漂移 zero drift <br/><br/>正反馈 positive feedback <br/><br/>负反馈 negative feedback <br/><br/>串联负反馈 series negative feedback <br/><br/>并联负反馈 parallel negative feedback <br/><br/>共射极放大器 common-emitter amplifier <br/><br/>射极跟随器 emitter-follower <br/><br/>共源极放大器 common-source amplifier <br/><br/>共漏极放大器 common-drain amplifier <br/><br/>多级放大器 multistage amplifier <br/><br/>阻容耦合放大器 resistance-capacitance coupled amplifier <br/><br/>直接耦合放大器 direct- coupled amplifier <br/><br/>输入电阻 input resistance <br/><br/>输出电阻 output resistance <br/><br/>负载电阻 load resistance <br/><br/>动态电阻 dynamic resistance <br/><br/>负载电流 load current <br/><br/>旁路电容 bypass capacitor <br/><br/>耦合电容 coupled capacitor <br/><br/>直流通路 direct current path <br/><br/>交流通路 alt&#101;rnating current path <br/><br/>直流分量 direct current component <br/><br/>交流分量 alt&#101;rnating current component <br/><br/>变阻器（电位器）rheostat <br/><br/>电阻（器）resistor <br/><br/>电阻（值）resistance <br/><br/>电容（器）capacitor <br/><br/>电容（量）capacitance <br/><br/>电感（器，线圈）inductor <br/><br/>电感（量），感应系数 inductance <br/><br/>正弦电压 sinusoidal voltage <br/><br/>差动放大器 differential amplifier <br/><br/>运算放大器 operational amplifier(op-amp) <br/><br/>失调电压 offset voltage <br/><br/>失调电流 offset current <br/><br/>共模信号 common-mode signal <br/><br/>差模信号 different-mode signal <br/><br/>共模抑制比 common-mode rejection ratio (CMRR) <br/><br/>积分电路 integrator（circuit） <br/><br/>微分电路 differentiator（circuit） <br/><br/>有源滤波器 active filter <br/><br/>低通滤波器 low-pass filter <br/><br/>高通滤波器 high-pass filter <br/><br/>带通滤波器 band-pass filter <br/><br/>带阻滤波器 band-stop filter <br/><br/>波特沃斯滤波器 Butterworth filter <br/><br/>切比雪夫滤波器 Chebyshev filter <br/><br/>贝塞尔滤波器 Bessel filter <br/><br/>截止频率 cut-off frequency <br/><br/>上限截止频率 upper cut-off frequency <br/><br/>下限截止频率 lower cut-off frequency <br/><br/>中心频率 center frequency <br/><br/>带宽 Bandwidth <br/><br/>开环增益 open-loop gain <br/><br/>闭环增益 closed-loop gain <br/><br/>共模增益 common-mode gain <br/><br/>输入阻抗 input impedance <br/><br/>电压跟随器 voltage-follower <br/><br/>电压源 voltage source <br/><br/>电流源 current source <br/><br/>单位增益带宽 unity-gain bandwidth <br/><br/>频率响应 frequency resp*****e <br/><br/>频响特性（曲线）resp*****e characteristic <br/><br/>波特图 the Bode plot <br/><br/>稳定性stability <br/><br/>补偿 compensation <br/><br/>比较器 comparator <br/><br/>迟滞比较器 hysteresis comparator <br/><br/>阶跃输入电压 step input voltage <br/><br/>仪表放大器 instrumentation amplifier <br/><br/>隔离放大器 isolation amplifier <br/><br/>对数放大器 log amplifier <br/><br/>反对数放大器 antilog amplifier <br/><br/>反馈通道 feedback path <br/><br/>反向漏电流 reverse leakage current <br/><br/>相位phase <br/><br/>相移 phase shift <br/><br/>锁相环 phase-locked loop(PLL) <br/><br/>锁相环相位监测器 PLL phase detector <br/><br/>和频 sum frequency <br/><br/>差频 difference frequency <br/><br/>振荡器 oscillator RC<br/><br/>振荡器 RC oscillator <br/><br/>LC振荡器 LC oscillator <br/><br/>正弦波振荡器 sinusoidal oscillator <br/><br/>三角波发生器 triangular wave generator <br/><br/>方波发生器square wave generator <br/><br/>幅度 magnitude <br/><br/>电平level <br/><br/>饱和输出电平（电压） saturated output level <br/><br/>功率放大器 power amplifier <br/><br/>交越失真 cross-over distortion <br/><br/>甲类功率放大器 class A power amplifier <br/><br/>乙类推挽功率放大器class B push-pull power amplifier OTL<br/><br/>功率放大器 output transformerless power amplifier OCL<br/><br/>功率放大器 output capacitorless power amplifier <br/><br/>半波整流 full-wave rectifier <br/><br/>全波整流 half-wave rectifier <br/><br/>电感滤波器 inductor filter <br/><br/>电容滤波器 capacitor filter <br/><br/>串联型稳压电源 series (voltage) regulator <br/><br/>开关型稳压电源 switching (voltage) regulator <br/><br/>集成稳压器 IC (voltage) regulator <br/><br/>晶闸管及可控整流电路晶闸管 thyristor <br/><br/>单结晶体管 unijunction transistor（UJT） <br/><br/>可控整流 controlled rectifier <br/><br/>可控硅 silicon-controlled rectifier <br/><br/>峰点 peak point <br/><br/>谷点 valley point <br/><br/>控制角 controlling angle <br/><br/>导通角 turn-on angle <br/><br/>二进制 binary <br/><br/>二进制数 binary number <br/><br/>十进制 decimal <br/><br/>十六进制 hexadecimal <br/><br/>二-十进制 binary coded decimal （BCD） <br/><br/>门电路 gate <br/><br/>三态门tri-state gate <br/><br/>与门 AND gate <br/><br/>或门 o&#114; gate <br/><br/>非门 NOT gate <br/><br/>与非门 NAND gate <br/><br/>或非门 NOR gate <br/><br/>异或门 exclusive-OR gate <br/><br/>反相器 inverter <br/><br/>布尔代数 Boolean algebra <br/><br/>真值表 truth table <br/><br/>卡诺图 the Karnaugh map <br/><br/>逻辑函数 logic function <br/><br/>逻辑表达式 logic e&#173;xpression <br/><br/>组合逻辑电路 combination logic circuit <br/><br/>译码器 decoder <br/><br/>编码器 coder <br/><br/>比较器 comparator <br/><br/>半加器 half-adder <br/><br/>全加器 full-adder <br/><br/>七段显示器 seven-segment display<br/><br/>时序逻辑电路 sequential logic circuit <br/><br/>R-S 触发器 R-S flip-flop <br/><br/>D触发器 D flip-flop <br/><br/>J-K触发器 J-K flip-flop <br/><br/>主从型触发器 master-slave flip-flop <br/><br/>置位 set <br/><br/>复位 reset <br/><br/>直接置位端direct-set terminal <br/><br/>直接复位端direct-reset terminal <br/><br/>寄存器 register <br/><br/>移位寄存器 shift register <br/><br/>双向移位寄存器bidirectional shift register <br/><br/>计数器 counter <br/><br/>同步计数器 synchronous counter <br/><br/>异步计数器asynchronous counter <br/><br/>加法计数器 adding counter <br/><br/>减法计数器 subtracting counter <br/><br/>定时器 timer <br/><br/>清除（清0）clear <br/><br/>载入 load <br/><br/>时钟脉冲 clock pulse <br/><br/>触发脉冲 trigger pulse <br/><br/>上升沿 positive edge <br/><br/>下降沿 negative edge <br/><br/>时序图 timing diagram <br/><br/>波形图 waveform <br/><br/>单稳态触发器 monostable flip-flop <br/><br/>双稳态触发器 bistable flip-flop <br/><br/>无稳态振荡器 astable oscillator <br/><br/>晶体 crystal <br/><br/>555定时器 555 timer <br/><br/>模拟信号 analog signal <br/><br/>数字信号 digital signal <br/><br/>AD转换器analog -digital converter (ADC) <br/><br/>DA转换器 digital-analog converter (DAC) <br/><br/>半导体存储器 只读存储器 read-only memory（ROM） <br/><br/>随机存取存储器 random-access memory（RAM） <br/><br/>可编程ROM programmable ROM（PROM）]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/diary/2010-07-15-001.htm</link>
			<title><![CDATA[破服务器]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[心情坐标]]></category>
			<pubDate>Thu,15 Jul 2010 10:30:57 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=477</guid>
		<description><![CDATA[现在用的这家服务器感觉真是烂，最近几天每隔几小时就不能访问，气死我了！现在让他们重新换个服务器看下，如果还不行的话，只能换一家了 <img src="http://www.zjidea.com/blog/images/smilies/Face_07.gif" border="0" style="margin:0px 0px -2px 0px" alt=""/><br/><br/>大家如果知道有好一点的提供商，欢迎大家提供个，我参考参考]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/arm/2010-06-01-arm2410.htm</link>
			<title><![CDATA[ARM裸奔--I/O操作1]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[ARM编程]]></category>
			<pubDate>Tue,01 Jun 2010 12:56:22 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=476</guid>
		<description><![CDATA[年初买的ARM开发板，放了半年后，今天终于把它拿出来，重新开始我的ARM征途了！<br/><br/>今天第一个实验就是点亮板子上的LED<br/><br/><br/>一） <strong>硬件</strong><br/><br/>接法如下图<br/><br/><img src="http://www.zjidea.com/blog/attachments/month_1006/y201061114346.jpg" border="0" alt=""/><br/><br/><br/>二）<strong>程序</strong><br/><br/>&nbsp;&nbsp;1）启动代码<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;芯片复位后，在进入C语言的Main()前一般有一段汇编程序来做程序运行前的准备工作，比如各堆栈的设置，复位向量的跳转等等，这些都是由启动代码来做的，详细也可以到网上搜搜相关的文章看看。这里由于程序简单，自己对照着S3C2410的启动代码写了个精简的，功能很简单，就是复位后，设置好操作模式，堆栈指针后就跳入C语言里了，其它的没有作设置。<br/><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.zjidea.com/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><br/>Mode_User&nbsp;&nbsp;&nbsp;&nbsp; equ 0x10<br/>I_Bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; equ 0x80<br/>F_Bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; equ 0x40<br/><br/>_STACK_BASEADDRESS&#160;&#160;&#160;&#160;EQU 0x33ff8000<br/><br/><br/>;The location of stacks<br/>UserStack&nbsp;&nbsp; EQU (_STACK_BASEADDRESS-0x3800)&nbsp;&nbsp;&nbsp;&nbsp; ;0x33ff4800 ~ <br/>SVCStack&nbsp;&nbsp;&nbsp;&nbsp;EQU (_STACK_BASEADDRESS-0x2800)&nbsp;&nbsp;&nbsp;&nbsp; ;0x33ff5800 ~<br/>UndefStack&nbsp;&nbsp;EQU (_STACK_BASEADDRESS-0x2400)&nbsp;&nbsp;&nbsp;&nbsp; ;0x33ff5c00 ~<br/>AbortStack&nbsp;&nbsp;EQU (_STACK_BASEADDRESS-0x2000)&nbsp;&nbsp;&nbsp;&nbsp; ;0x33ff6000 ~<br/>IRQStack&nbsp;&nbsp;&nbsp;&nbsp;EQU (_STACK_BASEADDRESS-0x1000)&nbsp;&nbsp;&nbsp;&nbsp; ;0x33ff7000 ~<br/>FIQStack&nbsp;&nbsp;&nbsp;&nbsp;EQU (_STACK_BASEADDRESS-0x0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0x33ff8000 ~ <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;Init,CODE,READONLY<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ENTRY <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; ResetHandler<br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler for Undefined mode<br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler for SWI interrupt<br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler for PAbort<br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler for DAbort<br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;reserved<br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler for IRQ interrupt <br/>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler for FIQ interrupt<br/><br/><br/>ResetHandler<br/><br/> MSR CPSR_c,#Mode_User|I_Bit|F_Bit;<br/> LDR SP,=UserStack<br/> <br/> IMPORT&nbsp;&nbsp;Main<br/><br/>&nbsp;&nbsp; b Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;跳转到Main()<br/><br/>&nbsp;&nbsp;END<br/><br/></div></div><br/><br/>上面代码保存为Init.s<br/><br/>&nbsp;&nbsp; 2）C语言代码<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.zjidea.com/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><br/>#include &#34;2410addr.h&#34;<br/><br/>int Main(void)<br/>{<br/>&nbsp;&nbsp;rGPFCON = 0x5500;<br/>&nbsp;&nbsp;rGPFUP&nbsp;&nbsp;= 0xff;&nbsp;&nbsp;&nbsp;&nbsp; // The pull up function is disabled GPF[7:0]<br/>&nbsp;&nbsp;rGPFDAT = 0xFF;<br/>&nbsp;&nbsp;rGPGCON = 0;<br/>&nbsp;&nbsp;rGPGUP&nbsp;&nbsp;= 0XFF;<br/>&nbsp;&nbsp;while(1)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT &amp;= ~(1&lt;&lt;4);&nbsp;&nbsp; //点亮D1<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT &amp;= ~(1&lt;&lt;5);&nbsp;&nbsp; //点亮D2<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT &amp;= ~(1&lt;&lt;6);&nbsp;&nbsp; //点亮D3<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT &amp;= ~(1&lt;&lt;7);&nbsp;&nbsp; //点亮D4<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;<br/><br/>}<br/><br/><br/></div></div><br/><br/>通过jtag工具连接开发板，用单步运行时可以看到发光二极管依次点亮。<br/><br/><br/><strong>注意：</strong> ADS设置ARM Linker设置中的layout按下面的设，因为我们的启动代码保存的名字是Init.s<br/><br/><img src="http://www.zjidea.com/blog/attachments/month_1006/c2010611310.jpg" border="0" alt=""/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/arm/2010-05-17.htm</link>
			<title><![CDATA[ARM指令集]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[ARM编程]]></category>
			<pubDate>Mon,17 May 2010 12:41:22 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=475</guid>
		<description><![CDATA[一、ARM 微处理器的指令的分类与格式&nbsp;&nbsp; <br/><br/>ARM微处理器的指令集是加载/存储型的，也即指令集仅能处理寄存器中的数据，而且处理结果都要放回寄存器中，<br/>而对系统存储器的访问则需要通过专门的加载/存储指令来完成。ARM微处理器的指令集可以分为跳转指令、数据处理指令、<br/>程序状态寄存器（PSR）处理指令、加载/存储指令、协处理器指令和异常产生指令六大类。下面是ARM微处理器的基本指令。<br/><br/>助记符&nbsp;&nbsp;&nbsp;&nbsp;指令功能描述<br/><br/>ADC&nbsp;&nbsp;&nbsp;&nbsp;带进位加法指令<br/>ADD&nbsp;&nbsp;&nbsp;&nbsp;加法指令<br/>AND&nbsp;&nbsp;&nbsp;&nbsp;逻辑与指令<br/>B&nbsp;&nbsp;&nbsp;&nbsp;跳转指令<br/>BIC&nbsp;&nbsp;&nbsp;&nbsp;位清零指令<br/>BL&nbsp;&nbsp;&nbsp;&nbsp;带返回的跳转指令<br/>BLX&nbsp;&nbsp;&nbsp;&nbsp;带返回和状态切换的跳转指令<br/>BX&nbsp;&nbsp;&nbsp;&nbsp;带状态切换的跳转指令<br/>CDP&nbsp;&nbsp;&nbsp;&nbsp;协处理器数据操作指令<br/>CMN&nbsp;&nbsp;&nbsp;&nbsp;比较反值指令<br/>CMP&nbsp;&nbsp;&nbsp;&nbsp;比较指令<br/>EOR&nbsp;&nbsp;&nbsp;&nbsp;异或指令<br/>LDC&nbsp;&nbsp;&nbsp;&nbsp;存储器到协处理器的数据传输指令<br/>LDM&nbsp;&nbsp;&nbsp;&nbsp;加载多个寄存器指令<br/>LDR&nbsp;&nbsp;&nbsp;&nbsp;存储器到寄存器的数据传输指令<br/>MCR&nbsp;&nbsp;&nbsp;&nbsp;从ARM 寄存器到协处理器寄存器的数据传输指令<br/>MLA&nbsp;&nbsp;&nbsp;&nbsp;乘加运算指令<br/>MOV&nbsp;&nbsp;&nbsp;&nbsp;数据传送指令<br/>MRC&nbsp;&nbsp;&nbsp;&nbsp;从协处理器寄存器到ARM 寄存器的数据传输指令<br/>MRS&nbsp;&nbsp;&nbsp;&nbsp;传送CPSR 或SPSR 的内容到通用寄存器指令<br/>MSR&nbsp;&nbsp;&nbsp;&nbsp;传送通用寄存器到CPSR 或SPSR 的指令<br/>MUL&nbsp;&nbsp;&nbsp;&nbsp;32 位乘法指令<br/>MLA&nbsp;&nbsp;&nbsp;&nbsp;32 位乘加指令<br/>MVN&nbsp;&nbsp;&nbsp;&nbsp;数据取反传送指令<br/>o&#114;R&nbsp;&nbsp;&nbsp;&nbsp;逻辑或指令<br/>RSB&nbsp;&nbsp;&nbsp;&nbsp;逆向减法指令<br/>RSC&nbsp;&nbsp;&nbsp;&nbsp;带借位的逆向减法指令<br/>SBC&nbsp;&nbsp;&nbsp;&nbsp;带借位减法指令<br/>STC&nbsp;&nbsp;&nbsp;&nbsp;协处理器寄存器写入存储器指令<br/>STM&nbsp;&nbsp;&nbsp;&nbsp;批量内存字写入指令<br/>STR&nbsp;&nbsp;&nbsp;&nbsp;寄存器到存储器的数据传输指令<br/>SUB&nbsp;&nbsp;&nbsp;&nbsp;减法指令<br/>SWI&nbsp;&nbsp;&nbsp;&nbsp;软件中断指令<br/>SWP&nbsp;&nbsp;&nbsp;&nbsp;交换指令<br/>TEQ&nbsp;&nbsp;&nbsp;&nbsp;相等测试指令<br/>TST&nbsp;&nbsp;&nbsp;&nbsp;位测试指令<br/>--------------------------------------------------------------------------------------------------------------------------<br/>二、指令的条件域<br/><br/>当处理器工作在ARM状态时，几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有<br/>条件的执行。当指令的执行条件满足时，指令被执行，否则指令被忽略。<br/>每一条ARM指令包含4位的条件码，位于指令的最高4位[31:28]。条件码共有16种，每种条件码<br/>可用两个字符表示，这两个字符可以添加在指令助记符的后面和指令同时使用。16种条件标志码中只有15种可以使<br/>用，标志码1111 保留不用。<br/><br/>条件码&nbsp;&nbsp;&nbsp;&nbsp;助记符后缀 标 志&nbsp;&nbsp;&nbsp;&nbsp; 含 义<br/>0000&nbsp;&nbsp;&nbsp;&nbsp;EQ&nbsp;&nbsp;&nbsp;&nbsp;Z 置位&nbsp;&nbsp;&nbsp;&nbsp; 相等<br/>0001&nbsp;&nbsp;&nbsp;&nbsp;NE&nbsp;&nbsp;&nbsp;&nbsp;Z 清零&nbsp;&nbsp;&nbsp;&nbsp; 不相等<br/>0010&nbsp;&nbsp;&nbsp;&nbsp;CS&nbsp;&nbsp;&nbsp;&nbsp;C 置位&nbsp;&nbsp;&nbsp;&nbsp; 无符号数大于或等于<br/>0011&nbsp;&nbsp;&nbsp;&nbsp;CC&nbsp;&nbsp;&nbsp;&nbsp;C 清零&nbsp;&nbsp;&nbsp;&nbsp; 无符号数小于<br/>0100&nbsp;&nbsp;&nbsp;&nbsp;MI&nbsp;&nbsp;&nbsp;&nbsp;N 置位&nbsp;&nbsp;&nbsp;&nbsp; 负数<br/>0101&nbsp;&nbsp;&nbsp;&nbsp;PL&nbsp;&nbsp;&nbsp;&nbsp;N 清零&nbsp;&nbsp;&nbsp;&nbsp; 正数或零<br/>0110&nbsp;&nbsp;&nbsp;&nbsp;VS&nbsp;&nbsp;&nbsp;&nbsp;V 置位&nbsp;&nbsp;&nbsp;&nbsp; 溢出<br/>0111&nbsp;&nbsp;&nbsp;&nbsp;VC&nbsp;&nbsp;&nbsp;&nbsp;V 清零&nbsp;&nbsp;&nbsp;&nbsp; 未溢出<br/>1000&nbsp;&nbsp;&nbsp;&nbsp;HI&nbsp;&nbsp;&nbsp;&nbsp;C 置位Z 清零&nbsp;&nbsp;&nbsp;&nbsp;无符号数大于<br/>1001&nbsp;&nbsp;&nbsp;&nbsp;LS&nbsp;&nbsp;&nbsp;&nbsp;C 清零Z 置位&nbsp;&nbsp;&nbsp;&nbsp;无符号数小于或等于<br/>1010&nbsp;&nbsp;&nbsp;&nbsp;GE&nbsp;&nbsp; N 等于V&nbsp;&nbsp;&nbsp;&nbsp;带符号数大于或等于<br/>1011&nbsp;&nbsp;&nbsp;&nbsp;LT&nbsp;&nbsp;&nbsp;&nbsp;N 不等于V&nbsp;&nbsp;&nbsp;&nbsp;带符号数小于<br/>1100&nbsp;&nbsp;&nbsp;&nbsp;GT&nbsp;&nbsp;&nbsp;&nbsp;Z 清零且（N 等于V） 带符号数大于<br/>1101&nbsp;&nbsp;&nbsp;&nbsp;LE&nbsp;&nbsp;&nbsp;&nbsp;Z 置位或（N 不等于V） 带符号数小于或等于<br/>1110&nbsp;&nbsp;&nbsp;&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;忽略&nbsp;&nbsp;&nbsp;&nbsp; 无条件执行<br/>-------------------------------------------------------------------------------------------------------------------------<br/>三、ARM 指令的寻址方式<br/><br/>1、立即寻址&nbsp;&nbsp; 操作数在指令中直接给出<br/><br/>ADD R0，R0，＃1 ；R0←R0＋1<br/>ADD R0，R0，＃0x3f ；R0←R0＋0x3f<br/><br/>2、寄存器寻址&nbsp;&nbsp; 操作数在寄存器<br/><br/>ADD R0，R1，R2 ；R0←R1＋R2<br/><br/>3、寄存器间接寻址 操作数的地址在寄存器<br/><br/>ADD R0，R1，[R2] ；R0←R1＋[R2]<br/>LDR R0，[R1] ；R0←[R1]<br/>STR R0，[R1] ；[R1]←R0<br/><br/>4、基址变址寻址&nbsp;&nbsp; 操作数地址 = 基址寄存器 + 指令中给出的地址偏移<br/><br/>LDR R0，[R1，＃4] ；R0←[R1＋4]<br/>LDR R0，[R1，＃4]！ ；R0←[R1＋4]、R1←R1＋4<br/>LDR R0，[R1] ，＃4 ；R0←[R1]、R1←R1＋4<br/>LDR R0，[R1，R2] ；R0←[R1＋R2]<br/><br/>5、多寄存器寻址&nbsp;&nbsp; 类似寄存器寻址，此处是多个寄存器而已<br/><br/>LDMIA R0，{R1，R2，R3，R4} ；R1←[R0]<br/>&nbsp;&nbsp;&nbsp;&nbsp; ；R2←[R0＋4]<br/>&nbsp;&nbsp;&nbsp;&nbsp; ；R3←[R0＋8]<br/>&nbsp;&nbsp;&nbsp;&nbsp; ；R4←[R0＋12]<br/><br/>6、相对寻址&nbsp;&nbsp; 目标地址 = pc 当前值 + 指令给出的标号偏移地址<br/><br/>BL NEXT ；跳转到子程序NEXT 处执行<br/>......<br/>NEXT<br/>......<br/>MOV PC，LR ；从子程序返回<br/><br/>7、堆栈寻址 <br/><br/>ARM 微处理器支持这四种类型的堆栈工作方式。<br/><br/>－ 满递增堆栈：堆栈指针指向最后压入的数据，且由低地址向高地址生成。<br/>－ 满递减堆栈：堆栈指针指向最后压入的数据，且由高地址向低地址生成。<br/>－ 空递增堆栈：堆栈指针指向下一个将要放入数据的空位置，且由低地址向高地址生成。<br/>－ 空递减堆栈：堆栈指针指向下一个将要放入数据的空位置，且由高地址向低地址生成。<br/>-----------------------------------------------------------------------------------------------------------------------<br/>四、ARM 指令集<br/><br/>1、跳转指令<br/><br/>— 使用专门的跳转指令。&nbsp;&nbsp;&nbsp;&nbsp; 32MB 地址空间<br/>— 直接向程序计数器PC 写入跳转地址值。&nbsp;&nbsp; 4GB 地址空间<br/><br/>— B 跳转指令<br/>— BL 带返回的跳转指令<br/>— BLX 带返回和状态切换的跳转指令<br/>— BX 带状态切换的跳转指令<br/><br/>B{条件} 目标地址 其他的类似<br/><br/>2、数据处理指令<br/>数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。<br/><br/>数据传送指令用于在寄存器和存储器之间进行数据的双向传输。<br/><br/>算术逻辑运算指令完成常用的算术与逻辑的运算，该类指令不但将运算结果保存在目的寄存器<br/>中，同时更新CPSR 中的相应条件标志位。<br/>比较指令不保存运算结果，只更新CPSR 中相应的条件标志位。<br/><br/>数据处理指令包括：<br/><br/>— MOV 数据传送指令&nbsp;&nbsp; MOV{条件}{S} 目的寄存器，源操作数<br/><br/>MOV R1，R0&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R0 的值传送到寄存器R1<br/>MOV PC，R14&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R14 的值传送到PC，常用于子程序返回<br/>MOV R1，R0，LSL＃3&nbsp;&nbsp;&nbsp;&nbsp;；将寄存器R0 的值左移3 位后传送到R1<br/><br/>— MVN 数据取反传送指令&nbsp;&nbsp; MVN{条件}{S} 目的寄存器，源操作数<br/><br/>MVN R0，＃0&nbsp;&nbsp;&nbsp;&nbsp; ；将立即数0 取反传送到寄存器R0 中，完成后R0=-1<br/><br/>— CMP 比较指令&nbsp;&nbsp;&nbsp;&nbsp;CMP{条件} 操作数1，操作数2<br/><br/>CMP R1，R0&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R1 的值与寄存器R0 的值相减，并根据结果设置CPSR 的标志位<br/>CMP R1，＃100&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R1 的值与立即数100 相减，并根据结果设置CPSR 的标志位<br/><br/>— CMN 反值比较指令&nbsp;&nbsp; CMN{条件} 操作数1，操作数2<br/><br/>CMN R1，R0&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R1 的值与寄存器R0 的值相加，并根据结果设置CPSR 的标志位<br/>CMN R1，＃100&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R1 的值与立即数100 相加，并根据结果设置CPSR 的标志位<br/><br/>— TST 位测试指令&nbsp;&nbsp; TST{条件} 操作数1，操作数2<br/><br/>TST R1，＃％1&nbsp;&nbsp;&nbsp;&nbsp; ；用于测试在寄存器R1 中是否设置了最低位（％表示二进制数）<br/>TST R1，＃0xffe&nbsp;&nbsp;&nbsp;&nbsp;；将寄存器R1 的值与立即数0xffe 按位与，并根据结果设置CPSR 的标志位<br/><br/>— TEQ 相等测试指令&nbsp;&nbsp; TEQ{条件} 操作数1，操作数2<br/><br/>TEQ R1，R2&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R1 的值与寄存器R2 的值按位异或，并根据结果设置CPSR 的标志位<br/><br/>— ADD 加法指令&nbsp;&nbsp;&nbsp;&nbsp;ADD{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>ADD R0，R1，R2&nbsp;&nbsp;&nbsp;&nbsp; ； R0 = R1 + R2<br/>ADD R0，R1，#256&nbsp;&nbsp;&nbsp;&nbsp;； R0 = R1 + 256<br/>ADD R0，R2，R3，LSL#1&nbsp;&nbsp;&nbsp;&nbsp;； R0 = R2 + (R3 &lt;&lt; 1)<br/><br/>— ADC 带进位加法指令&nbsp;&nbsp; ADC{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>ADDS R0，R4，R8&nbsp;&nbsp;&nbsp;&nbsp;； 加低端的字<br/>ADCS R1，R5，R9&nbsp;&nbsp;&nbsp;&nbsp;； 加第二个字，带进位<br/>ADCS R2，R6，R10&nbsp;&nbsp;&nbsp;&nbsp;； 加第三个字，带进位<br/>ADC R3，R7，R11&nbsp;&nbsp;&nbsp;&nbsp;； 加第四个字，带进位<br/><br/>— SUB 减法指令&nbsp;&nbsp;&nbsp;&nbsp;SUB{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>SUB R0，R1，R2&nbsp;&nbsp;&nbsp;&nbsp; ； R0 = R1 - R2<br/>SUB R0，R1，#256&nbsp;&nbsp;&nbsp;&nbsp;； R0 = R1 - 256<br/>SUB R0，R2，R3，LSL#1&nbsp;&nbsp;&nbsp;&nbsp;； R0 = R2 - (R3 &lt;&lt; 1)<br/><br/>— SBC 带借位减法指令&nbsp;&nbsp; SBC{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>SUBS R0，R1，R2&nbsp;&nbsp;&nbsp;&nbsp;； R0 = R1 - R2 - ！C，并根据结果设置CPSR 的进位标志位<br/><br/>— RSB 逆向减法指令&nbsp;&nbsp; RSC{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>RSB R0，R1，R2&nbsp;&nbsp;&nbsp;&nbsp; ； R0 = R2 – R1<br/>RSB R0，R1，#256&nbsp;&nbsp;&nbsp;&nbsp;； R0 = 256 – R1<br/>RSB R0，R2，R3，LSL#1&nbsp;&nbsp;&nbsp;&nbsp;； R0 = (R3 &lt;&lt; 1) - R2<br/><br/>— RSC 带借位的逆向减法指令 RSC{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>RSC R0，R1，R2&nbsp;&nbsp;&nbsp;&nbsp; ； R0 = R2 – R1 - ！C<br/><br/>— AND 逻辑与指令&nbsp;&nbsp; AND{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>AND R0，R0，＃3&nbsp;&nbsp;&nbsp;&nbsp;； 该指令保持R0 的0、1 位，其余位清零。<br/><br/>— o&#114;R 逻辑或指令&nbsp;&nbsp; o&#114;R{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>o&#114;R R0，R0，＃3&nbsp;&nbsp;&nbsp;&nbsp;； 该指令设置R0 的0、1 位，其余位保持不变<br/><br/>— EOR 逻辑异或指令&nbsp;&nbsp; EOR{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>EOR R0，R0，＃3&nbsp;&nbsp;&nbsp;&nbsp;； 该指令反转R0 的0、1 位，其余位保持不变。<br/><br/>— BIC 位清除指令&nbsp;&nbsp; BIC{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>BIC R0，R0，＃％1011&nbsp;&nbsp;&nbsp;&nbsp;； 该指令清除 R0 中的位 0、1、和 3，其余的位保持不变。<br/><br/>3、乘法指令与乘加指令<br/><br/>ARM 微处理器支持的乘法指令与乘加指令共有6 条，可分为运算结果为32 位和运算结果为64<br/>位两类，与前面的数据处理指令不同，指令中的所有操作数、目的寄存器必须为通用寄存器，不能<br/>对操作数使用立即数或被移位的寄存器，同时，目的寄存器和操作数1 必须是不同的寄存器。<br/><br/>乘法指令与乘加指令共有以下6 条：<br/><br/>— MUL 32 位乘法指令&nbsp;&nbsp; MUL{条件}{S} 目的寄存器，操作数1，操作数2<br/><br/>MUL R0，R1，R2&nbsp;&nbsp;&nbsp;&nbsp; ；R0 = R1 × R2<br/>MULS R0，R1，R2&nbsp;&nbsp;&nbsp;&nbsp;；R0 = R1 × R2，同时设置CPSR 中的相关条件标志位<br/><br/>— MLA 32 位乘加指令&nbsp;&nbsp; MLA{条件}{S} 目的寄存器，操作数1，操作数2，操作数3<br/><br/>MLA R0，R1，R2，R3&nbsp;&nbsp;&nbsp;&nbsp;；R0 = R1 × R2 + R3<br/>MLAS R0，R1，R2，R3&nbsp;&nbsp;&nbsp;&nbsp;；R0 = R1 × R2 + R3，同时设置CPSR 中的相关条件标志位<br/><br/>— SMULL 64 位有符号数乘法指令 SMULL{条件}{S} 目的寄存器Low，目的寄存器低High，操作数1，操作数2<br/><br/>SMULL R0，R1，R2，R3&nbsp;&nbsp;&nbsp;&nbsp;；R0 = （R2 × R3）的低32 位<br/>&nbsp;&nbsp;&nbsp;&nbsp; ；R1 = （R2 × R3）的高32 位<br/><br/>— SMLAL 64 位有符号数乘加指令 SMLAL{条件}{S} 目的寄存器Low，目的寄存器低High，操作数1，操作数2<br/>SMLAL R0，R1，R2，R3&nbsp;&nbsp;&nbsp;&nbsp;；R0 = （R2 × R3）的低32 位 ＋ R0<br/>&nbsp;&nbsp;&nbsp;&nbsp; ；R1 = （R2 × R3）的高32 位 ＋ R1<br/><br/>— UMULL 64 位无符号数乘法指令 UMULL{条件}{S} 目的寄存器Low，目的寄存器低High，操作数1，操作数2<br/><br/>UMULL R0，R1，R2，R3&nbsp;&nbsp;&nbsp;&nbsp;；R0 = （R2 × R3）的低32 位<br/>&nbsp;&nbsp;&nbsp;&nbsp; ；R1 = （R2 × R3）的高32 位<br/><br/>— UMLAL 64 位无符号数乘加指令 UMLAL{条件}{S} 目的寄存器Low，目的寄存器低High，操作数1，操作数2<br/><br/>UMLAL R0，R1，R2，R3&nbsp;&nbsp; ；R0 = （R2 × R3）的低32 位 ＋ R0<br/>&nbsp;&nbsp;&nbsp;&nbsp; ；R1 = （R2 × R3）的高32 位 ＋ R1<br/>4、程序状态寄存器访问指令<br/><br/>ARM 微处理器支持程序状态寄存器访问指令，用于在程序状态寄存器和通用寄存器之间传送<br/>数据，程序状态寄存器访问指令包括以下两条：<br/><br/>— MRS 程序状态寄存器到通用寄存器的数据传送指令&nbsp;&nbsp;&nbsp;&nbsp;MRS{条件} 通用寄存器，程序状态寄存器（CPSR 或SPSR）<br/><br/>MRS R0，CPSR ；传送CPSR 的内容到R0<br/>MRS R0，SPSR ；传送SPSR 的内容到R0<br/><br/>— MSR 通用寄存器到程序状态寄存器的数据传送指令&nbsp;&nbsp;&nbsp;&nbsp;MSR{条件} 程序状态寄存器（CPSR 或SPSR）_&lt;域&gt;，操作数<br/><br/>MSR CPSR，R0 ；传送R0 的内容到CPSR<br/>MSR SPSR，R0 ；传送R0 的内容到SPSR<br/>MSR CPSR_c，R0 ；传送R0 的内容到SPSR，但仅仅修改CPSR 中的控制位域<br/><br/>5、加载/存储指令<br/><br/>ARM 微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据，加载指令用于将存储<br/>器中的数据传送到寄存器，存储指令则完成相反的操作。常用的加载存储指令如下：<br/><br/>— LDR 字数据加载指令&nbsp;&nbsp; LDR{条件} 目的寄存器，&lt;存储器地址&gt;<br/><br/>LDR R0，[R1]&nbsp;&nbsp;&nbsp;&nbsp; ；将存储器地址为R1 的字数据读入寄存器R0。<br/>LDR R0，[R1，R2]&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1+R2 的字数据读入寄存器R0。<br/>LDR R0，[R1，＃8]&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1+8 的字数据读入寄存器R0。<br/>LDR R0，[R1，R2] ！&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1+R2 的字数据读入寄存器R0，并将新地址R1＋R2 写入R1。<br/>LDR R0，[R1，＃8] ！&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1+8 的字数据读入寄存器R0，并将新地址R1＋8 写入R1。<br/>LDR R0，[R1]，R2&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1 的字数据读入寄存器R0，并将新地址R1＋R2 写入R1。<br/>LDR R0，[R1，R2，LSL＃2]！ ；将存储器地址为R1＋R2×4 的字数据读入寄存器R0，并将新地址R1＋R2×4 写入R1。<br/>LDR R0，[R1]，R2，LSL＃2 ；将存储器地址为R1 的字数据读入寄存器R0，并将新地址R1＋R2×4 写入R1。<br/><br/>— LDRB 字节数据加载指令 LDR{条件}B 目的寄存器，&lt;存储器地址&gt;<br/><br/>LDRB R0，[R1]&nbsp;&nbsp;&nbsp;&nbsp; ；将存储器地址为R1 的字节数据读入寄存器R0，并将R0 的高24 位清零。<br/>LDRB R0，[R1，＃8]&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1＋8 的字节数据读入寄存器R0，并将R0 的高24 位清零。<br/><br/>— LDRH 半字数据加载指令 LDR{条件}H 目的寄存器，&lt;存储器地址&gt;<br/><br/>LDRH R0，[R1]&nbsp;&nbsp;&nbsp;&nbsp; ；将存储器地址为R1 的半字数据读入寄存器R0，并将R0 的高16 位清零。<br/>LDRH R0，[R1，＃8]&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1＋8 的半字数据读入寄存器R0，并将R0 的高16 位清零。<br/>LDRH R0，[R1，R2]&nbsp;&nbsp;&nbsp;&nbsp;；将存储器地址为R1＋R2 的半字数据读入寄存器R0，并将R0 的高16 位清零。<br/><br/>— STR 字数据存储指令&nbsp;&nbsp; STR{条件} 源寄存器，&lt;存储器地址&gt;<br/><br/>STR R0，[R1]，＃8&nbsp;&nbsp;&nbsp;&nbsp;；将R0 中的字数据写入以R1 为地址的存储器中，并将新地址R1＋8 写入R1。<br/>STR R0，[R1，＃8]&nbsp;&nbsp;&nbsp;&nbsp;；将R0 中的字数据写入以R1＋8 为地址的存储器中。<br/><br/>— STRB 字节数据存储指令 STR{条件}B 源寄存器，&lt;存储器地址&gt;<br/><br/>STRB R0，[R1]&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R0 中的字节数据写入以R1 为地址的存储器中。<br/>STRB R0，[R1，＃8]&nbsp;&nbsp;&nbsp;&nbsp;；将寄存器R0 中的字节数据写入以R1＋8 为地址的存储器中。<br/><br/>— STRH 半字数据存储指令 STR{条件}H 源寄存器，&lt;存储器地址&gt;<br/><br/>STRH R0，[R1]&nbsp;&nbsp;&nbsp;&nbsp; ；将寄存器R0 中的半字数据写入以R1 为地址的存储器中。<br/>STRH R0，[R1，＃8]&nbsp;&nbsp;&nbsp;&nbsp;；将寄存器R0 中的半字数据写入以R1＋8 为地址的存储器中。<br/><br/>6、批量数据加载/存储指令<br/><br/><br/>ARM 微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器<br/>之间传送数据，批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器，批量数据存储<br/>指令则完成相反的操作。常用的加载存储指令如下：<br/><br/>— LDM 批量数据加载指令<br/>— STM 批量数据存储指令<br/><br/>LDM（或STM） 指令<br/>LDM（或STM） 指令的格式为：<br/>LDM（或STM） {条件}{类型} 基址寄存器{！}，寄存器列表{∧}<br/>LDM（或STM） 指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄<br/>&nbsp;&nbsp; 存器之间传送数据，该指令的常见用途是将多个寄存器的内容入栈或出栈。其中，{类型}为以下几种情况：<br/><br/>IA 每次传送后地址加1；<br/>IB 每次传送前地址加1；<br/>DA 每次传送后地址减1；<br/>DB 每次传送前地址减1；<br/>FD 满递减堆栈；<br/>ED 空递减堆栈；<br/>FA 满递增堆栈；<br/>EA 空递增堆栈；<br/><br/>{！}为可选后缀，若选用该后缀，则当数据传送完毕之后，将最后的地址写入基址寄存器，否<br/>则基址寄存器的内容不改变。<br/>基址寄存器不允许为R15，寄存器列表可以为R0～R15 的任意组合。<br/><br/>{∧}为可选后缀，当指令为LDM 且寄存器列表中包含R15，选用该后缀时表示：除了正常的数据<br/>传送之外，还将SPSR 复制到CPSR。同时，该后缀还表示传入或传出的是用户模式下的寄存器，而<br/>不是当前模式下的寄存器。<br/><br/>STMFD R13!，{R0，R4-R12，LR} ；将寄存器列表中的寄存器（R0，R4 到R12，LR）存入堆栈。<br/>LDMFD R13!，{R0，R4-R12，PC} ；将堆栈内容恢复到寄存器（R0，R4 到R12，LR）。<br/><br/>7、数据交换指令<br/><br/>ARM 微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。数据交换指令有如下<br/>两条：<br/><br/>— SWP 字数据交换指令&nbsp;&nbsp; SWP{条件} 目的寄存器，源寄存器1，[源寄存器2]<br/><br/>SWP R0，R1，[R2] ；将R2 所指向的存储器中的字数据传送到R0，同时将R1 中的字数据传<br/>送到R2 所指向的存储单元。<br/>SWP R0，R0，[R1] ；该指令完成将R1 所指向的存储器中的字数据与R0 中的字数据交换。<br/><br/>— SWPB 字节数据交换指令 SWP{条件}B 目的寄存器，源寄存器1，[源寄存器2]<br/><br/>SWPB R0，R1，[R2] ；将R2 所指向的存储器中的字节数据传送到R0，R0 的高24 位清零，<br/>同时将R1 中的低8 位数据传送到R2 所指向的存储单元。<br/>SWPB R0，R0，[R1] ；该指令完成将R1 所指向的存储器中的字节数据与R0 中的低8 位数据<br/>交换。<br/><br/>8、移位指令<br/><br/>ARM 微处理器内嵌的桶型移位器（Barrel Shifter），支持数据的各种移位操作，移位操作在<br/>ARM 指令集中不作为单独的指令使用，它只能作为指令格式中是一个字段，在汇编语言中表示为指<br/>令中的选项。例如，数据处理指令的第二个操作数为寄存器时，就可以加入移位操作选项对它进行<br/>各种移位操作。移位操作包括如下6 种类型，ASL 和LSL 是等价的，可以自由互换：<br/><br/>— LSL 逻辑左移&nbsp;&nbsp;&nbsp;&nbsp;通用寄存器，LSL（或ASL） 操作数<br/><br/>MOV R0, R1, LSL#2 ；将R1 中的内容左移两位后传送到R0 中。<br/><br/>— LSR 逻辑右移&nbsp;&nbsp;&nbsp;&nbsp;通用寄存器，LSR 操作数<br/><br/>MOV R0, R1, LSR#2 ；将R1 中的内容右移两位后传送到R0 中，左端用零来填充<br/><br/>— ASR 算术右移&nbsp;&nbsp;&nbsp;&nbsp;通用寄存器，ASR 操作数<br/><br/>MOV R0, R1, ASR#2 ；将R1 中的内容右移两位后传送到R0 中，左端用第31 位的值来填充<br/><br/>— ASL 算术左移&nbsp;&nbsp;&nbsp;&nbsp;通用寄存器，ASR 操作数<br/><br/>MOV R0, R1, ASL#2 ；将R1 中的内容右移两位后传送到R0 中，右端用第2 位的值来填充<br/><br/>— ROR 循环右移&nbsp;&nbsp;&nbsp;&nbsp;通用寄存器，ROR 操作数<br/><br/>MOV R0, R1, ROR#2 ；将R1 中的内容循环右移两位后传送到R0 中。<br/><br/>— RRX 带扩展的循环右移&nbsp;&nbsp; 通用寄存器，RRX 操作数<br/><br/>MOV R0, R1, RRX#2 ；将R1 中的内容进行带扩展的循环右移两位后传送到R0 中。<br/><br/>9、协处理器指令<br/><br/>ARM 微处理器可支持多达16 个协处理器，用于各种协处理操作，在程序执行的过程中，每个<br/>协处理器只执行针对自身的协处理指令，忽略ARM 处理器和其他协处理器的指令。<br/>ARM 的协处理器指令主要用于ARM 处理器初始化ARM 协处理器的数据处理操作，以及在<br/>ARM 处理器的寄存器和协处理器的寄存器之间传送数据，和在ARM 协处理器的寄存器和存储器之<br/>间传送数据。<br/><br/>ARM 协处理器指令包括以下5 条：<br/><br/>— CDP 协处理器数操作指令<br/>— LDC 协处理器数据加载指令<br/>— STC 协处理器数据存储指令<br/>— MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令<br/>— MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令<br/><br/>---CDP 指令<br/><br/>CDP 指令的格式为：<br/><br/>CDP{条件} 协处理器编码，协处理器操作码1，目的寄存器，源寄存器1，源寄存器2，协处理器操作码2。<br/><br/>CDP 指令用于ARM 处理器通知ARM 协处理器执行特定的操作,若协处理器不能成功完成特定的操<br/>作，则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操<br/>作，目的寄存器和源寄存器均为协处理器的寄存器，指令不涉及ARM 处理器的寄存器和存储器。<br/><br/>指令示例：<br/><br/>CDP P3，2，C12，C10，C3，4 ；该指令完成协处理器P3 的初始化<br/><br/>---LDC 指令<br/><br/>LDC 指令的格式为：<br/><br/>LDC{条件}{L} 协处理器编码,目的寄存器，[源寄存器]<br/><br/>LDC 指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中，若协处理器不能成功<br/>完成传送操作，则产生未定义指令异常。其中，{L}选项表示指令为长读取操作，如用于双精度数<br/>据的传输。<br/><br/>指令示例：<br/><br/>LDC P3，C4，[R0] ；将ARM 处理器的寄存器R0 所指向的存储器中的字数据传送到协处理器P3 的寄存器C4 中。<br/><br/>---STC 指令<br/><br/>STC 指令的格式为：<br/><br/>STC{条件}{L} 协处理器编码,源寄存器，[目的寄存器]<br/><br/>STC 指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中，若协处理器不能成功<br/>完成传送操作，则产生未定义指令异常。其中，{L}选项表示指令为长读取操作，如用于双精度数<br/>据的传输。<br/><br/>指令示例：<br/><br/>STC P3，C4，[R0] ；将协处理器P3 的寄存器C4 中的字数据传送到ARM 处理器的寄存器R0 所指向的存储器中。<br/><br/>---MCR 指令<br/><br/>MCR 指令的格式为：<br/><br/>MCR{条件} 协处理器编码，协处理器操作码1，源寄存器，目的寄存器1，目的寄存器2，协处理器操作码2。<br/><br/>MCR 指令用于将ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成<br/>操作，则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的<br/>操作，源寄存器为ARM 处理器的寄存器，目的寄存器1 和目的寄存器2 均为协处理器的寄存器。<br/><br/>指令示例：<br/><br/>MCR P3，3，R0，C4，C5，6 ；该指令将ARM 处理器寄存器R0 中的数据传送到协处理器P3 的寄存器C4 和C5 中。<br/><br/>---MRC 指令<br/><br/>MRC 指令的格式为：<br/><br/>MRC{条件} 协处理器编码，协处理器操作码1，目的寄存器，源寄存器1，源寄存器2，协处理器操作码2。<br/><br/>MRC 指令用于将协处理器寄存器中的数据传送到ARM 处理器寄存器中,若协处理器不能成功完成<br/>操作，则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的<br/>操作，目的寄存器为ARM 处理器的寄存器，源寄存器1 和源寄存器2 均为协处理器的寄存器。<br/><br/>指令示例：<br/><br/>MRC P3，3，R0，C4，C5，6 ；该指令将协处理器P3 的寄存器中的数据传送到ARM 处理器寄存器<br/><br/>10、异常产生指令<br/><br/>ARM 微处理器所支持的异常指令有如下两条：<br/><br/>— SWI 软件中断指令&nbsp;&nbsp;<br/>— BKPT 断点中断指令<br/><br/>---SWI 指令<br/><br/>SWI 指令的格式为：<br/><br/>SWI{条件} 24 位的立即数<br/><br/>SWI 指令用于产生软件中断，以便用户程序能调用操作系统的系统例程。操作系统在SWI 的异常<br/>处理程序中提供相应的系统服务，指令中24 位的立即数指定用户程序调用系统例程的类型，相关<br/>参数通过通用寄存器传递，当指令中24 位的立即数被忽略时，用户程序调用系统例程的类型由通<br/>用寄存器R0 的内容决定，同时，参数通过其他通用寄存器传递。<br/><br/>指令示例：<br/><br/>SWI 0x02 ；该指令调用操作系统编号位02 的系统例程。<br/><br/>---BKPT 指令<br/><br/>BKPT 指令的格式为：<br/><br/>BKPT 16 位的立即数<br/><br/>BKPT 指令产生软件断点中断，可用于程序的调试。<br/>---------------------------------------------------------------------------------------------------------------------------<br/>五、Thumb 指令及应用<br/><br/>为兼容数据总线宽度为16 位的应用系统，ARM 体系结构除了支持执行效率很高的32 位ARM<br/>指令集以外，同时支持16 位的Thumb 指令集。Thumb 指令集是ARM 指令集的一个子集，允许指<br/>令编码为16 位的长度。与等价的32 位代码相比较，Thumb 指令集在保留32 代码优势的同时，大<br/>大的节省了系统的存储空间。<br/>所有的Thumb 指令都有对应的ARM 指令，而且Thumb 的编程模型也对应于ARM 的编程模型，<br/>在应用程序的编写过程中，只要遵循一定调用的规则，Thumb 子程序和ARM 子程序就可以互相调<br/>用。当处理器在执行ARM 程序段时，称ARM 处理器处于ARM 工作状态，当处理器在执行Thumb<br/>程序段时，称ARM 处理器处于Thumb 工作状态。<br/>与ARM 指令集相比较，Thumb 指令集中的数据处理指令的操作数仍然是32 位，指令地址也为<br/>32 位，但Thumb 指令集为实现16 位的指令长度，舍弃了ARM指令集的一些特性，如大多数的Thumb<br/>指令是无条件执行的，而几乎所有的ARM 指令都是有条件执行的；大多数的Thumb 数据处理指令<br/>的目的寄存器与其中一个源寄存器相同。<br/>由于Thumb 指令的长度为16 位，即只用ARM 指令一半的位数来实现同样的功能，所以，要<br/>实现特定的程序功能，所需的Thumb 指令的条数较ARM 指令多。在一般的情况下，Thumb 指令与<br/>ARM 指令的时间效率和空间效率关系为：<br/><br/>— Thumb 代码所需的存储空间约为ARM 代码的60％～70％<br/>— Thumb 代码使用的指令数比ARM 代码多约30％～40％<br/>— 若使用32 位的存储器，ARM 代码比Thumb 代码快约40％<br/>— 若使用16 位的存储器，Thumb 代码比ARM 代码快约40％～50％<br/>— 与ARM 代码相比较，使用Thumb 代码，存储器的功耗会降低约30％<br/><br/>显然，ARM 指令集和Thumb 指令集各有其优点，若对系统的性能有较高要求，应使用32 位的<br/>存储系统和ARM 指令集，若对系统的成本及功耗有较高要求，则应使用16 位的存储系统和Thumb<br/>指令集。当然，若两者结合使用，充分发挥其各自的优点，会取得更好的效果。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/diary/2010-04-24-01.htm</link>
			<title><![CDATA[4月的消沉]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[心情坐标]]></category>
			<pubDate>Sat,24 Apr 2010 15:50:51 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=474</guid>
		<description><![CDATA[4月份已经接近尾声了，回头看看，发现这个月好像没做什么事。。。<br/><br/>原来公司的路灯项目，由于最近跑步机开发项目增多而暂停，对于STM32学习也就放下了，不过感觉还好，基本能弄通，自己编的小程序有惊无险，差不多都是一次性就OK的，现在接下来的任务就是把Zigbee这一部分搞定就差不多了。<br/><br/>今天听到一好消息，公司组织下月海南5日游，而且根据工龄，自己只要出600就可以，看起来蛮不错的样子，兴奋下 ：），&nbsp;&nbsp;：）<br/><br/>加油！]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/arm/2010-03-22_register.htm</link>
			<title><![CDATA[STM32中用到的Cortex-M3寄存器说明]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[ARM编程]]></category>
			<pubDate>Mon,22 Mar 2010 09:00:47 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=473</guid>
		<description><![CDATA[在STM32中用到了Cortex-M3定义的三组寄存器，有关这三组寄存器的说明不在STM32的技术手册中，需要参考ARM公司发布的<a target="_blank" href="http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337g/DDI0337G_cortex_m3_r2p0_trm.pdf" rel="external">Cortex-M3 Technical Reference Manual (r2p0)</a>。<br/><br/>在STM32的固件库中定义了三个结构体与这三个寄存器组相对应，这三个结构体与ARM手册中寄存器的对应关系如下：<br/><br/> <br/><br/><strong>一、NVIC寄存器组</strong><br/><br/>STM32的固件库中有如下定义：<br/><br/><span style="color:Pink">typedef struct<br/>{<br/>&nbsp;&nbsp;vu32 ISER[2];<br/>&nbsp;&nbsp;u32 RESERVED0[30];<br/>&nbsp;&nbsp;vu32 ICER[2];<br/>&nbsp;&nbsp;u32 RSERVED1[30];<br/>&nbsp;&nbsp;vu32 ISPR[2];<br/>&nbsp;&nbsp;u32 RESERVED2[30];<br/>&nbsp;&nbsp;vu32 ICPR[2];<br/>&nbsp;&nbsp;u32 RESERVED3[30];<br/>&nbsp;&nbsp;vu32 IABR[2];<br/>&nbsp;&nbsp;u32 RESERVED4[62];<br/>&nbsp;&nbsp;vu32 IPR[11];<br/>} NVIC_TypeDef;</span><br/><br/>它们对应ARM手册中的名称为<br/><strong>ISER = Interrupt Set-Enable Registers<br/>ICER = Interrupt Clear-Enable Registers<br/>ISPR = Interrupt Set-Pending Register<br/>ICPR = Interrupt Clear-Pending Register<br/>IABR = Active Bit Register<br/>IPR = Interrupt Priority Registers</strong><br/><br/>每个寄存器有240位，以Interrupt Set-Enable Registers说明，ISER[0]对应中断源0~31，ISER[1]对应中断源32~63，STM32只有60个中断源，所以没有ISER[2:7]。<br/><br/>参考STM32技术参考手册中的中断向量表，中断源的位置为：<br/>位置0 - WWDG = Window Watchdog interrupt<br/>位置1 - PVD = PVD through EXTI Line detection interrupt<br/>位置2 - TAMPER = Tamper interrupt<br/>......<br/>位置58 - DMA2_Channel3 = DMA2 Channel3 global interrupt<br/>位置59 - DMA2_Channel4_5 = DMA2 Channel4 and DMA2 Channel5 global interrupts<br/><br/> <br/><br/><strong>二、系统控制寄存器组</strong><br/><br/>STM32的固件库中有如下定义：<br/><br/><span style="color:Pink">typedef struct<br/>{<br/>&nbsp;&nbsp;vuc32 CPUID;<br/>&nbsp;&nbsp;vu32 ICSR;<br/>&nbsp;&nbsp;vu32 VTOR;<br/>&nbsp;&nbsp;vu32 AIRCR;<br/>&nbsp;&nbsp;vu32 SCR;<br/>&nbsp;&nbsp;vu32 CCR;<br/>&nbsp;&nbsp;vu32 SHPR[3];<br/>&nbsp;&nbsp;vu32 SHCSR;<br/>&nbsp;&nbsp;vu32 CFSR;<br/>&nbsp;&nbsp;vu32 HFSR;<br/>&nbsp;&nbsp;vu32 DFSR;<br/>&nbsp;&nbsp;vu32 MMFAR;<br/>&nbsp;&nbsp;vu32 BFAR;<br/>&nbsp;&nbsp;vu32 AFSR;<br/>} SCB_TypeDef; /* System Control Block Structure */</span><br/><br/>它们对应ARM手册中的名称为<br/><br/><strong>CPUID = CPUID Base Register<br/>ICSR = Interrupt Control State Register<br/>VTOR = Vector Table Offset Register<br/>AIRCR = Application Interrupt/Reset Control Register<br/>SCR = System Control Register<br/>CCR = Configuration Control Register<br/>SHPR = System Handlers Priority Register<br/>SHCSR = System Handler Control and State Register<br/>CFSR = Configurable Fault Status Registers<br/>HFSR = Hard Fault Status Register<br/>DFSR = Debug Fault Status Register<br/>MMFAR = Mem Manage Address Register<br/>BFAR = Bus Fault Address Register<br/>AFSR = Auxiliary Fault Status Register</strong><br/><br/> <br/><br/><strong>三、系统时钟寄存器组</strong><br/><br/>STM32的固件库中有如下定义：<br/><br/><span style="color:Pink">typedef struct<br/>{<br/>&nbsp;&nbsp;vu32 CTRL;<br/>&nbsp;&nbsp;vu32 LOAD;<br/>&nbsp;&nbsp;vu32 VAL;<br/>&nbsp;&nbsp;vuc32 CALIB;<br/>} SysTick_TypeDef;</span><br/><br/>它们对应ARM手册中的名称为<br/><br/><strong>CTRL = SysTick Control and Status Register<br/>LOAD = SysTick Reload Value Register<br/>VAL = SysTick Current Value Register<br/>CALIB = SysTick Calibration Value Register</strong>]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/arm/2010-03-22_systick.htm</link>
			<title><![CDATA[STM32中Systick寄存器说明]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[ARM编程]]></category>
			<pubDate>Mon,22 Mar 2010 08:55:43 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=472</guid>
		<description><![CDATA[Systick 部分内容属于NVIC控制部分，一共有4个寄存器<br/>SysTick_CTRL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xE000E010&nbsp;&nbsp;--&nbsp;&nbsp;控制寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认值：0x0000 0004<br/>SysTick_LOAD,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xE000E014&nbsp;&nbsp;--&nbsp;&nbsp;重载寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认值：0x0000 0000<br/>SysTick_VAL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xE000E018&nbsp;&nbsp;--&nbsp;&nbsp;当前值寄存器&nbsp;&nbsp;&nbsp;&nbsp;默认值：0x0000 0000<br/>SysTick_CALIB,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xE000E01C&nbsp;&nbsp;--&nbsp;&nbsp;校准值寄存器&nbsp;&nbsp;&nbsp;&nbsp;默认值：0x0002328<br/><br/>SysTick_CTRL 寄存器内有4个bit具有意义<br/>第0位：ENABLE，Systick 使能位&nbsp;&nbsp;（0：关闭Systick功能；1：开启Systick功能）<br/>第1位：TICKINT，Systick 中断使能位&nbsp;&nbsp;&nbsp;&nbsp;（0：关闭Systick中断；1：开启Systick中断）<br/>第2位：CLKSOURCE，Systick时钟源选择&nbsp;&nbsp;&nbsp;&nbsp;（0：使用HCLK/8 作为Systick时钟；1：使用HCLK作为系统时钟）<br/>第16位：COUNTFLAG，Systick计数比较标志<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/arm/2010-03-12-stm32-1.htm</link>
			<title><![CDATA[配置STM32时钟时应注意设置FLASH等待周期]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[ARM编程]]></category>
			<pubDate>Fri,12 Mar 2010 13:46:08 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=471</guid>
		<description><![CDATA[昨天去杭电一趟了，然后带回来一套J-LINK。这下我可以动手写程序进行仿真了，HOHO~~~<br/><br/>万事开头难啊，写了一个小程序，只是点亮一个LED灯，程序很简单，可就是出了问题，程序会跑飞，仔细检查各个寄存器配置，似乎都没有什么问题，选择外部8M时钟，不分频输入到PLL，设置PLL为9倍频72M，AHB，ABP2不分频，ABP1为2分频，这些都挺下常的，可DEBUG时，运行到选择PLL时钟后程序就跑飞，在程序上改来改去，始终没能解决，后来降低了PLL的频率到48M，程序竟然没有跑飞，这就怪了，百思不得其解啊，郁闷了半天 :-( ,<br/><br/>自己实在没辙，于是上网找找解决方法。在一网站有人提示是否忘记了设置FLASH等待周期？回头一看程序，嘿嘿，我的程序里果然没有这方面的设置，看资料上写的是：<br/><span style="color:Red"><br/>0等待周期，当 0 &lt; SYSCLK &lt; 24MHz <br/>1等待周期，当 24MHz &lt; SYSCLK ≤ 48MHz <br/>2等待周期，当 48MHz &lt; SYSCLK ≤ 72MHz</span><br/><br/>而上电复位后的等待设置为0，所以这里就有问题了！<br/><br/>知道了问题所在，那解决起来就很简单了。在配置时钟之前，我们打开FLASH预取缓冲区，并且设置等待周期为2。再次编译运行程序，我那小可爱---LED终于这起来了:-)<br/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/arm/2010-03-09-stm32-1.htm</link>
			<title><![CDATA[试水STM32]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[ARM编程]]></category>
			<pubDate>Tue,09 Mar 2010 13:04:50 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=470</guid>
		<description><![CDATA[最近公司准备上马一智能路灯，所选的芯片就是STM32。以前我只是在MCU行列混编程语言也还是用汇编，现在让我一下子转到ARM，同时也改用C来写程序，还真有点不知所措，于是最近狂啃STM32的技术资料，希望能以最快的时间基本掌握。<br/><br/><br/>STM32开发需要的工具与资料：<br/><br/><strong>程序编写编译软件</strong>： IAR<br/>&nbsp;&nbsp; IAR请到网站下载<a href="http://www.iar.com" target="_blank" rel="external">http://www.iar.com</a>，如果你的程序量小于32K，你可以下载免费的IAR软件，否则你只能花钱买了。<br/><br/><strong>芯片资料</strong>：<br/><br/>&nbsp;&nbsp;芯片资料网上搜搜应该很多的，你也可以从ST网站下载<a href="http://www.st.com" target="_blank" rel="external">http://www.st.com</a><br/>&nbsp;&nbsp;中文资料：<a href="http://www.stmicroelectronics.com.cn/stonline/mcu/MCU_Pages.htm" target="_blank" rel="external">http://www.stmicroelectronics.com.cn/stonline/mcu/MCU_Pages.htm</a><br/><br/><br/>STM32资料正熟悉中，相信很快就会写些例子进一步掌握，我也会放到网上与大家一起探讨，一起进步！<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.zjidea.com/blog/article/arm/2010-02-11_arm3.htm</link>
			<title><![CDATA[S3C2410启动代码详解(3)]]></title>
			<author>lzq0323@yahoo.com.cn(相逢萍水)</author>
			<category><![CDATA[ARM编程]]></category>
			<pubDate>Thu,11 Feb 2010 11:12:31 +0800</pubDate>
			<guid>http://www.zjidea.com/blog/default.asp?id=468</guid>
		<description><![CDATA[;================================================================================<br/>; ENTRY&nbsp;&nbsp;系统上电后经过一个b ResetHandler就跳转到此处来。在此完成一些相关的软硬件配置工作<br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;屏蔽所有中断，关看门狗。 <br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据工作频率设置PLL寄存器 <br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;初始化存储控制相关寄存器 <br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;初始化各模式下的栈指针 <br/>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置缺省中断处理函数 <br/>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将数据段拷贝到RAM中，将零初始化数据段清零 <br/>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;跳转到C 语言Main入口函数中 <br/>;================================================================================<br/>ResetHandler<br/> ldr r0,=WTCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;watch dog disable 关看门狗<br/> ldr r1,=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/> str r1,[r0]<br/><br/> ldr r0,=INTMSK<br/> ldr r1,=0xffffffff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;all interrupt disable屏蔽所有中断<br/> str r1,[r0]<br/><br/> ldr r0,=INTSUBMSK<br/> ldr r1,=0x3ff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;all sub interrupt disable屏蔽所有子中断<br/> str r1,[r0]<br/><br/> [ {FALSE}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//;是得有些表示了,该点点LED灯了,不过被FALSE掉了. <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; rGPFDAT = (rGPFDAT &amp; ~(0xf&lt;&lt;4)) | ((~data &amp; 0xf)&lt;&lt;4);&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; Led_Display<br/> ldr r0,=GPFCON<br/> ldr r1,=0x5500&nbsp;&nbsp;<br/> str r1,[r0]<br/> ldr r0,=GPFDAT<br/> ldr r1,=0x10<br/> str r1,[r0]<br/> ]<br/> <br/> ;To reduce PLL lock time, adjust the LOCKTIME register. 为了减少PLL的lock time, 调整LOCKTIME寄存器. <br/> ldr r0,=LOCKTIME&nbsp;&nbsp;&nbsp;&nbsp; //LOCKTIME为锁定计数定时器，即设置PLL稳定过渡时间，一般大于150uS<br/> ldr r1,=0xffffff<br/> str r1,[r0]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>；=================================================================================<br/><br/>上电复位时的时钟行为。晶振在几毫秒内开始振荡。当OSC时钟稳定后，PLL根据默认PLL设置开始生效，但是通常这个时候是不稳定的，因此在软件重新配置PLLCON寄存器之前FCLK直接使用Fin而不是MPLL，即使用户不希望改变PLLCON的默认值，用户也应该执行一边写PLLCON操作。<br/><br/>;这里介绍一下计算公式<br/>;Fpllo=(m*Fin)/(p*2^s)<br/>;m=MDIV+8,p=PDIV+2,s=SDIV<br/>;Fpllo必须大于20Mhz小于66Mhz<br/>;Fpllo*2^s必须小于170Mhz<br/>;如下面的PLLCON设定中的M_DIV P_DIV S_DIV是取自option.h中M_DIV=0x5c=92 P_DIV=0x4&nbsp;&nbsp;S_DIV=0x2<br/><br/>所以Fpllo=(m*Fin)/(p*2^s)=（92+8）*12M/（4+2）*2^2=50M<br/><br/><br/>；==================================================================================&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; [ PLL_ON_START<br/> ;Configure MPLL<br/> ldr r0,=MPLLCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//M_DIV=0x5c=92 P_DIV=0x4&nbsp;&nbsp;S_DIV=0x2<br/> ldr r1,=((M_MDIV&lt;&lt;12)+(M_PDIV&lt;&lt;4)+M_SDIV)&nbsp;&nbsp;;Fin=12MHz,Fout=50MHz<br/> str r1,[r0]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;Configure UPLL<br/> ldr r0,=UPLLCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> ldr r1,=((U_MDIV&lt;&lt;12)+(U_PDIV&lt;&lt;4)+U_SDIV)&nbsp;&nbsp;;Fin=12MHz,UPLLout=48MHz<br/> str r1,[r0]<br/> ]<br/><br/> ;Check if the boot is caused by the wake-up from POWER_OFF mode.<br/> ldr r1,=GSTATUS2<br/> ldr r0,[r1]<br/> tst r0,#0x2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;In case of the wake-up from POWER_OFF mode, go to POWER_OFF_WAKEUP handler. <br/> bne WAKEUP_POWER_OFF<br/><br/> EXPORT StartPointAfterPowerOffWakeUp<br/>StartPointAfterPowerOffWakeUp<br/><br/> ；====================================================================================<br/><br/>//设置内存控制器等寄存器的值,因为这些寄存器是连续排列的,所以采用如下办法对这些 ;寄存器进行连续设置.其中用到了SMRDATA的数据,这在代码后面有定义 ;Set memory control registers<br/><br/>；=====================================================================================<br/><br/>ldr r0,=SMRDATA<br/> ldr r1,=BWSCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;BWSCON Address<br/> add r2, r0, #52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;End address of SMRDATA，共13个DCD，52个字节<br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/> ldr r3, [r0], #4&nbsp;&nbsp;&nbsp;&nbsp;<br/> str r3, [r1], #4&nbsp;&nbsp;&nbsp;&nbsp;<br/> cmp r2, r0&nbsp;&nbsp;<br/> bne %B0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //上面这段小程序将后面定义的数据复制到相关内存控制寄存器<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; ;Initialize stacks<br/> bl InitStacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用堆栈初始化子程序<br/> ；==================================================================================<br/><br/>关于异常中断系统：异常中断矢量表（每个表项占4个字节） 下面是中断向量表 一旦系统运行时有中断发生 即使移植了操作系统 如linux 处理器已经把控制权交给了操作系统 一旦发生中断 处理器还是会跳转到从0x0开始<br/>;中断向量表中某个中断表项（依据中断类型）开始执行;具体中断向量布局请参考s3c44b0 spec 例如 adc中断向量为 0x000000c0下面对应表中第49项位置 向量地址0x0+4*(49-1)=0x000000c0<br/>2410异常中断系统中有两张中断转移表，经过二重转移才跳到中断处理程序。第一张中断向量表由硬件决定，所在区域为ROM（flash），地址空间从0X00开始，其中0X00-0X1C为异常向量入口地址。另一张中断向量表在RAM 中，可以随便改，其位置在程序连接后才定。ARM7的内核实际上只有8个（1个保留）异常向量，对于其他所有众多的中断源，ARM7 的内核是通过IRQ或FRQ 的软件查询中断状态寄存器的位来获得ISR的起始地址。<br/>；===================================================================================<br/>&nbsp;&nbsp; ; Setup IRQ handler&nbsp;&nbsp;//;设置缺省中断处理函数<br/> ldr r0,=HandleIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //;This routine is needed;//使用ldr伪指令装载HandleIRQ的地址到r0中<br/> ldr r1,=IsrIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//If there isn&#39;t &#39;subs pc,lr,#4&#39; at 0x18, 0x1c;//使用ldr伪指令装载IsrIRQ的地址到r1中<br/> str r1,[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把r1的值写到r0指向的存储地址中，把IsrIRQ这个函数的地址写入到HandleIRQ存储单元里面<br/><br/> <br/><br/>；======================================================================================<br/><br/> ;Copy and paste RW data/zero initialized data<br/><br/>//以下程序段将加载哉中的数据段RW拷贝到运行域的ram中 将ZI段中的零初始化数据段清零 <br/><br/>//跳入C语言的main函数执行到这步结束bootloader初步引导结束&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>程序先把 ROM 里|Image$$RO$$Limt|开始的 RW 初始数据拷贝到 RAM 里面|Image$$RW$$Base|开始的地址，当RAM这边的目标地址到达|Image$$ZI$$Base|后就表示RW区的结束和ZI区的开始，接下去就对这片ZI区进行清零操作，直到遇到结束地址|Image$$ZI$$Limit|。<br/><br/>；======================================================================================<br/> ldr r0, =|Image$$RO$$Limit|&nbsp;&nbsp;&nbsp;&nbsp; //Get pointer to ROM data，rom中的RW数据源的起始地址<br/> ldr r1, =|Image$$RW$$Base|&nbsp;&nbsp; //and RAM copyRW区在RAM里的执行区起始地址<br/> ldr r3, =|Image$$ZI$$Base|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ZI区在RAM里面的起始地址<br/> <br/> ;Zero init base =&gt; top of initialised data检查装载地址和执行地址是否相同<br/> cmp r0, r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; Check that they are different<br/> beq %F2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//若相等则跳转到2,相同，则不拷贝该区间，初始化零数据区<br/>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/> cmp r1, r3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; Copy init data;//如果r0不等于r1，r1和r3比较，Copy init data,不相同，将装载区拷贝到执行区<br/> ldrcc r2, [r0], #4&nbsp;&nbsp;&nbsp;&nbsp;;--&gt; LDRCC r2, [r0] + ADD r0, r0, #4&nbsp;&nbsp; 当无符号数r1&lt;r3时，读取r0地址处的内容&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> strcc r2, [r1], #4&nbsp;&nbsp;&nbsp;&nbsp;;--&gt; STRCC r2, [r1] + ADD r1, r1, #4<br/> bcc %B1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;//若相等则跳转到1,相同，则不拷贝该区间，初始化零数据区<br/><br/>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/> ldr r1, =|Image$$ZI$$Limit|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; Top of zero init segment，ZI区在RAM里面的结束地址后面的一个地址<br/> mov r2, #0<br/>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/> cmp r3, r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; Zero init<br/> strcc r2, [r3], #4&nbsp;&nbsp;&nbsp;&nbsp; //当ZI区的起始地址未达等于结束地址时，继续清0<br/> bcc %B3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//当无符号数r3&lt;r1时,跳转到3处，这样做就完成了zi区的初始化清0<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;[ :LNOT:THUMBCODE<br/>&nbsp;&nbsp;&nbsp;&nbsp; bl Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Don&#39;t use main() because ......跳到Main()主函数，注意大小写<br/>&nbsp;&nbsp;&nbsp;&nbsp; b .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;[ THUMBCODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;for start-up code for Thumb mode<br/>&nbsp;&nbsp;&nbsp;&nbsp; o&#114;r lr,pc,#1<br/>&nbsp;&nbsp;&nbsp;&nbsp; bx lr<br/>&nbsp;&nbsp;&nbsp;&nbsp; CODE16<br/>&nbsp;&nbsp;&nbsp;&nbsp; bl Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Don&#39;t use main() because ......<br/>&nbsp;&nbsp;&nbsp;&nbsp; b .<br/>&nbsp;&nbsp;&nbsp;&nbsp; CODE32<br/>&nbsp;&nbsp;&nbsp;&nbsp;]<br/><br/><br/>;function initializing stacks<br/>InitStacks<br/> ;Don&#39;t use DRAM,such as stmfd,ldmfd......<br/> ;SVCstack is initialized before<br/> ;Under toolkit ver 2.5, &#39;msr cpsr,r1&#39; can be used instead of &#39;msr cpsr_cxsf,r1&#39;<br/> mrs r0,cpsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//读取CPSR的值，R0=CPSR,CPSR为当前程序状态寄存器<br/> bic r0,r0,#MODEMASK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;//R0=R0&amp;(~MODEMASK),MODEMASK=0X1F,也就是低五位清0<br/> o&#114;r r1,r0,#UNDEFMODE|NOINT&nbsp;&nbsp;;//R1=R0|(MODEMASK|NONINT),R1为未定义模式，也就是低八位为11X11011<br/> msr cpsr_cxsf,r1&nbsp;&nbsp;;UndefMode&nbsp;&nbsp; ;//写把R1的值写到状态寄存器cpsr_cxsf（也就是CPSR）,UndefMode<br/> ldr sp,=UndefStack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//设置未定义模式下的堆栈指针<br/> <br/> o&#114;r r1,r0,#ABORTMODE|NOINT<br/> msr cpsr_cxsf,r1&nbsp;&nbsp;;AbortMode<br/> ldr sp,=AbortStack<br/><br/> o&#114;r r1,r0,#IRQMODE|NOINT<br/> msr cpsr_cxsf,r1&nbsp;&nbsp;;IRQMode<br/> ldr sp,=IRQStack<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/> o&#114;r r1,r0,#FIQMODE|NOINT<br/> msr cpsr_cxsf,r1&nbsp;&nbsp;;FIQMode<br/> ldr sp,=FIQStack<br/><br/> bic r0,r0,#MODEMASK|NOINT<br/> o&#114;r r1,r0,#SVCMODE<br/> msr cpsr_cxsf,r1&nbsp;&nbsp;;SVCMode<br/> ldr sp,=SVCStack<br/> <br/> //USER mode has not be initialized.注意：不要切换到User模式进行User模式的堆栈设置，因为进入User模式后就<br/><br/>//不能再操作CPSR回到别的模式了，可能会对接下去的程序执行造成影响<br/> <br/> mov pc,lr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //堆栈初始化完成返回<br/> ;The LR register won&#39;t be valid if the current mode is not SVC mode.<br/><br/><br/> ;以下是上面提到的对存储寄存器初始化的数据map，共13个DCD<br/><br/> LTORG<br/><br/>SMRDATA DATA<br/>; Memory configuration should be optimized for best performance <br/>; The following parameter is not optimized.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>; Memory access cycle parameter strategy<br/>; 1) The memory settings is&nbsp;&nbsp;safe parameters even at HCLK=75Mhz.<br/>; 2) SDRAM refresh period is for HCLK=75Mhz. <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD (0+(B1_BWSCON&lt;&lt;4)+(B2_BWSCON&lt;&lt;8)+(B3_BWSCON&lt;&lt;12)+(B4_BWSCON&lt;&lt;16)+(B5_BWSCON&lt;&lt;20)+(B6_BWSCON&lt;&lt;24)+(B7_BWSCON&lt;&lt;28))&nbsp;&nbsp;//BAN1,6,7为32位数据完，其他除0外为16<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B0_Tacs&lt;&lt;13)+(B0_Tcos&lt;&lt;11)+(B0_Tacc&lt;&lt;8)+(B0_Tcoh&lt;&lt;6)+(B0_Tah&lt;&lt;4)+(B0_Tacp&lt;&lt;2)+(B0_PMC))&nbsp;&nbsp; ;GCS0；BANK0的相关访问模式及各访问周期设置， 各位定义可参考memcfg.inc文件<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B1_Tacs&lt;&lt;13)+(B1_Tcos&lt;&lt;11)+(B1_Tacc&lt;&lt;8)+(B1_Tcoh&lt;&lt;6)+(B1_Tah&lt;&lt;4)+(B1_Tacp&lt;&lt;2)+(B1_PMC))&nbsp;&nbsp; ;GCS1 <br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B2_Tacs&lt;&lt;13)+(B2_Tcos&lt;&lt;11)+(B2_Tacc&lt;&lt;8)+(B2_Tcoh&lt;&lt;6)+(B2_Tah&lt;&lt;4)+(B2_Tacp&lt;&lt;2)+(B2_PMC))&nbsp;&nbsp; ;GCS2<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B3_Tacs&lt;&lt;13)+(B3_Tcos&lt;&lt;11)+(B3_Tacc&lt;&lt;8)+(B3_Tcoh&lt;&lt;6)+(B3_Tah&lt;&lt;4)+(B3_Tacp&lt;&lt;2)+(B3_PMC))&nbsp;&nbsp; ;GCS3<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B4_Tacs&lt;&lt;13)+(B4_Tcos&lt;&lt;11)+(B4_Tacc&lt;&lt;8)+(B4_Tcoh&lt;&lt;6)+(B4_Tah&lt;&lt;4)+(B4_Tacp&lt;&lt;2)+(B4_PMC))&nbsp;&nbsp; ;GCS4<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B5_Tacs&lt;&lt;13)+(B5_Tcos&lt;&lt;11)+(B5_Tacc&lt;&lt;8)+(B5_Tcoh&lt;&lt;6)+(B5_Tah&lt;&lt;4)+(B5_Tacp&lt;&lt;2)+(B5_PMC))&nbsp;&nbsp; ;GCS5<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B6_MT&lt;&lt;15)+(B6_Trcd&lt;&lt;2)+(B6_SCAN))&nbsp;&nbsp;&nbsp;&nbsp;;GCS6<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((B7_MT&lt;&lt;15)+(B7_Trcd&lt;&lt;2)+(B7_SCAN))&nbsp;&nbsp;&nbsp;&nbsp;;GCS7<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD ((REFEN&lt;&lt;23)+(TREFMD&lt;&lt;22)+(Trp&lt;&lt;20)+(Trc&lt;&lt;18)+(Tchr&lt;&lt;16)+REFCNT)&nbsp;&nbsp;&nbsp;&nbsp;//;设置刷新周期<br/><br/> <br/><br/> DCD 0x32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; ;SCLK power&nbsp;&nbsp;saving mode, ARM&nbsp;&nbsp;core burst disable, BANKSIZE 128M/128M <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD 0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR6 CL=3clk CL：CAS latency<br/>&nbsp;&nbsp;&nbsp;&nbsp; DCD 0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR7<br/>;&nbsp;&nbsp;&nbsp;&nbsp; DCD 0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR6 CL=2clk<br/>;&nbsp;&nbsp;&nbsp;&nbsp; DCD 0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR7<br/><br/>&nbsp;&nbsp;<br/><br/>//下面是对ram区域map的定义;这里定义了处理器工作于各模式的堆栈区在ram中map.<br/><br/> ALIGN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//字对齐<br/>&nbsp;&nbsp;&nbsp;&nbsp; AREA RamData, DATA, READWRITE<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;&nbsp; _ISR_STARTADDRESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //^=map<br/>HandleReset&nbsp;&nbsp;#&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //#=field<br/>HandleUndef&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleSWI&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandlePabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleDabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleReserved&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleIRQ&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleFIQ&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/><br/>;Don&#39;t use the label &#39;IntVectorTable&#39;,<br/>;The value of IntVectorTable is different with the address you think it may be.<br/>;IntVectorTable<br/>HandleEINT0&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleEINT1&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleEINT2&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleEINT3&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleEINT4_7 #&nbsp;&nbsp; 4<br/>HandleEINT8_23 #&nbsp;&nbsp; 4<br/>HandleRSV6 #&nbsp;&nbsp; 4<br/>HandleBATFLT&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleTICK&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleWDT #&nbsp;&nbsp; 4<br/>HandleTIMER0&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleTIMER1&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleTIMER2&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleTIMER3&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleTIMER4&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleUART2&nbsp;&nbsp; #&nbsp;&nbsp; 4<br/>HandleLCD&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleDMA0 #&nbsp;&nbsp; 4<br/>HandleDMA1 #&nbsp;&nbsp; 4<br/>HandleDMA2 #&nbsp;&nbsp; 4<br/>HandleDMA3 #&nbsp;&nbsp; 4<br/>HandleMMC #&nbsp;&nbsp; 4<br/>HandleSPI0 #&nbsp;&nbsp; 4<br/>HandleUART1 #&nbsp;&nbsp; 4<br/>HandleRSV24 #&nbsp;&nbsp; 4<br/>HandleUSBD #&nbsp;&nbsp; 4<br/>HandleUSBH #&nbsp;&nbsp; 4<br/>HandleIIC&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleUART0&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleSPI1&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleRTC&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/>HandleADC&nbsp;&nbsp;#&nbsp;&nbsp; 4<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br/><br/>]]></description>
		</item>
		
</channel>
</rss>
