﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-franksunny的个人技术空间-随笔分类-硬件开发</title><link>http://www.cppblog.com/franksunny/category/4080.html</link><description>获得人生中的成功需要的专注与坚持不懈多过天才与机会。

                       ——C.W. Wendte</description><language>zh-cn</language><lastBuildDate>Sat, 18 Oct 2008 05:05:41 GMT</lastBuildDate><pubDate>Sat, 18 Oct 2008 05:05:41 GMT</pubDate><ttl>60</ttl><item><title>[转]USB设备枚举</title><link>http://www.cppblog.com/franksunny/archive/2007/08/04/29357.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Sat, 04 Aug 2007 13:33:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/08/04/29357.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/29357.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/08/04/29357.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/29357.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/29357.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;USB设备枚举全纪录&nbsp;在编写这部分程序之前，首先需要了解有关USB协议,重点是USB数据通信结构、11条标准请求命令和标准USB描述符。因为嵌入式设备的软硬件是密切相关的，所以还需做的准备工作是了解选用的USB芯片及主控MCU的性能。&nbsp;一.硬件篇USB芯片作用:1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 管理...&nbsp;&nbsp;<a href='http://www.cppblog.com/franksunny/archive/2007/08/04/29357.html'>阅读全文</a><img src ="http://www.cppblog.com/franksunny/aggbug/29357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-08-04 21:33 <a href="http://www.cppblog.com/franksunny/archive/2007/08/04/29357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430的时钟问题</title><link>http://www.cppblog.com/franksunny/archive/2007/06/07/25773.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Thu, 07 Jun 2007 14:14:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/06/07/25773.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/25773.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/06/07/25773.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/25773.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/25773.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><span lang=EN-US style="FONT-SIZE: 15pt">MSP430</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时钟问题</span><span lang=EN-US style="FONT-SIZE: 15pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">MSP430</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">的时钟周期（振荡周期）、机器周期、指令周期之间的关系<span lang=EN-US><o:p></o:p></span></span></p>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><font face=宋体>通用知识<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold; mso-bidi-font-family: Arial"><font face=宋体>时钟周期也称为振荡周期：定义为时钟脉冲的倒数（时钟周期就是直接供内部<span lang=EN-US>CPU</span>使用的晶振的倒数，例如<st1:chmetcnv UnitName="m" SourceValue="12" HasSpace="False" Negative="False" NumberType="1" TCSC="0" w:st="on"><span lang=EN-US>12M</span></st1:chmetcnv>的晶振，它的时钟周期就是<span lang=EN-US>1/12us</span>），是计算机中的最基本的、最小的时间单位。在一个时钟周期内，<span lang=EN-US>CPU</span>仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲，控制着计算机的工作节奏。时钟频率越高，工作速度就越快。<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-bidi-font-family: Arial">机器周期：在</span></strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold; mso-bidi-font-family: Arial"><font face=宋体>计算机中，常把一条指令的执行过程划分为若干个阶段，每一个阶段完成一项工作。每一项工作称为一个基本操作，完成一个基本操作所需要的时间称为机器周期。<span lang=EN-US>8051</span>系列单片机的一个机器周期由<span lang=EN-US>6</span>个<span lang=EN-US>S</span>周期（状态周期）组成。一个<span lang=EN-US>S</span>周期<span lang=EN-US>=2</span>个时钟周期，所以<span lang=EN-US>8051</span>单片机的一个机器周期<span lang=EN-US>=6</span>个状态周期<span lang=EN-US>=12</span>个时钟周期。<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-bidi-font-family: Arial">指令周期</span></strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold; mso-bidi-font-family: Arial"><font face=宋体>：执行一条指令所需要的时间，一般由若干个机器周期组成。指令不同，所需的机器周期也不同。<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><font face=宋体>专用知识：<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><font face=宋体>在<span lang=EN-US>430</span>中，一个时钟周期 ＝<span lang=EN-US> MCLK</span>晶振的倒数。如果<span lang=EN-US>MCLK</span>是<st1:chmetcnv UnitName="m" SourceValue="8" HasSpace="False" Negative="False" NumberType="1" TCSC="0" w:st="on"><span lang=EN-US>8M</span></st1:chmetcnv>，则一个时钟周期为<span lang=EN-US>1/8us</span>；<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><font face=宋体>一个机器周期 ＝ 一个时钟周期，即<span lang=EN-US>430</span>每个动作都能完成一个基本操作；<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><font face=宋体>一个指令周期 ＝<span lang=EN-US> 1</span>～<span lang=EN-US>6</span>个机器周期，具体根据具体指令而定。<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><font face=宋体>另：指令长度，只是一个存储单位与时间没有必然关系。<span lang=EN-US><o:p></o:p></span></font></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><o:p><font face=宋体>&nbsp;</font></o:p></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><o:p><font face=宋体>&nbsp;</font></o:p></span></h3>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">MSP430</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">根据型号的不同最多可以选择使用<span lang=EN-US>3</span>个振荡器。我们可以根据需要选择合适的振荡频率<span lang=EN-US>,</span>并可以在不需要时随时关闭振荡器<span lang=EN-US>,</span>以节省功耗。这<span lang=EN-US>3</span>个振荡器分别为：<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">（<span lang=EN-US>1</span>）<span lang=EN-US>DCO<span style="mso-spacerun: yes">&nbsp; </span></span>数控<span lang=EN-US>RC</span>振荡器。它在芯片内部<span lang=EN-US>,</span>不用时可以关闭。<span lang=EN-US>DCO</span>的振荡频率会受周围环境温度和<span lang=EN-US>MSP430</span>工作电压的影响<span lang=EN-US>,</span>且同一型号的芯片所产生的频率也不相同。但<span lang=EN-US>DCO</span>的调节功能可以改善它的性能<span lang=EN-US>,</span>他的调节分为以下<span lang=EN-US>3</span>步：<span lang=EN-US>a</span>：选择<span lang=EN-US>BCSCTL1.RSELx</span>确定时钟的标称频率<span lang=EN-US>;b</span>：选择<span lang=EN-US>DCOCTL.DCOx</span>在标称频率基础上分段粗调<span lang=EN-US>;c</span>：选择<span lang=EN-US>DCOCTL.MODx</span>的值进行细调。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_s1026 style="WIDTH: 270pt; HEIGHT: 190.85pt; mso-position-horizontal: absolute; mso-position-horizontal-relative: char; mso-position-vertical: absolute; mso-position-vertical-relative: line" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata><w:wrap type="none"></w:wrap><w:anchorlock></w:anchorlock></v:shape><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">（<span lang=EN-US>2</span>）<span lang=EN-US>LFXT1<span style="mso-spacerun: yes">&nbsp; </span></span>接低频振荡器。典型为接<span lang=EN-US>32768HZ</span>的时钟振荡器<span lang=EN-US>,</span>此时振荡器不需要接负载电容。也可以接<span lang=EN-US>450KHZ~8MHZ</span>的标准晶体振荡器<span lang=EN-US>,</span>此时需要接负载电容。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">（<span lang=EN-US>3</span>）<span lang=EN-US>XT2<span style="mso-spacerun: yes">&nbsp; </span></span>接<span lang=EN-US>450KHZ~8MHZ</span>的标准晶体振荡器。此时需要接负载电容<span lang=EN-US>,</span>不用时可以关闭。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">低频振荡器主要用来降低能量消耗<span lang=EN-US>,</span>如使用电池供电的系统<span lang=EN-US>,</span>高频振荡器用来对事件做出快速反应或者供<span lang=EN-US>CPU</span>进行大量运算。当然高端<span lang=EN-US>430</span>还有</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">锁频环</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">(FLL)</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">及</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">FLL+</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">等模块，但是初步不用考虑那么多。</span><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">MSP430</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">的<span lang=EN-US>3</span>种时钟信号：<span lang=EN-US>MCLK</span>系统主时钟<span lang=EN-US>;SMCLK</span>系统子时钟<span lang=EN-US>;ACLK</span>辅助时钟。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">（<span lang=EN-US>1</span>）<span lang=EN-US>MCLK</span>系统主时钟。除了<span lang=EN-US>CPU</span>运算使用此时钟以外<span lang=EN-US>,</span>外围模块也可以使用。<span lang=EN-US>MCLK</span>可以选择任何一个振荡器所产生的时钟信号并进行<span lang=EN-US>1</span>、<span lang=EN-US>2</span>、<span lang=EN-US>4</span>、<span lang=EN-US>8</span>分频作为其信号源。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">（<span lang=EN-US>2</span>）<span lang=EN-US>SMCLK</span>系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。<span lang=EN-US>SMCLK</span>可以选择任何一个振荡器所产生的时钟信号并进行<span lang=EN-US>1</span>、<span lang=EN-US>2</span>、<span lang=EN-US>4</span>、<span lang=EN-US>8</span>分频作为其信号源。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">（<span lang=EN-US>3</span>）<span lang=EN-US>ACLK</span>辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但<span lang=EN-US>ACLK</span>只能由<span lang=EN-US>LFXT1</span>进行<span lang=EN-US>1</span>、<span lang=EN-US>2</span>、<span lang=EN-US>4</span>、<span lang=EN-US>8</span>分频作为信号源。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">PUC</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">复位后<span lang=EN-US>,MCLK</span>和<span lang=EN-US>SMCLK</span>的信号源为<span lang=EN-US>DCO,DCO</span>的振荡频率默认为<span lang=EN-US>800KHZ</span>。<span lang=EN-US>ACLK</span>的信号源为<span lang=EN-US>LFXT1</span>。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">MSP430</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">内部含有晶体振荡器失效监测电路<span lang=EN-US>,</span>监测<span lang=EN-US>LFXT1</span>（工作在高频模式）和<span lang=EN-US>XT2</span>输出的时钟信号。当时钟信号丢失<span lang=EN-US>50us</span>时<span lang=EN-US>,</span>监测电路捕捉到振荡器失效。如果<span lang=EN-US>MCLK</span>信号来自<span lang=EN-US>LFXT1</span>或者<span lang=EN-US>XT2,</span>那么<span lang=EN-US>MSP430</span>自动把<span lang=EN-US>MCLK</span>的信号切换为<span lang=EN-US>DCO,</span>这样可以保证程序继续运行。但<span lang=EN-US>MSP430</span>不对工作在低频模式的<span lang=EN-US>LFXT1</span>进行监测。<span lang=EN-US><o:p></o:p></span></span></p>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><o:p><font face=宋体>&nbsp;</font></o:p></span></h3>
<h3 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt; mso-bidi-font-weight: bold"><font face=宋体>为了实现具体的时钟可以设置跟时钟相关的寄存器，在低端<span lang=EN-US>430</span>中是<span lang=EN-US>DCOCTL</span>、<span lang=EN-US>BCSCTL1</span>和<span lang=EN-US>BCSCTL2</span>三个寄存器。而对于高端的<span lang=EN-US>430</span>，则要考虑<span lang=EN-US>SCFI0</span>、<span lang=EN-US>SCFQCTL</span>、<span lang=EN-US>FLL_CTL0</span>、<span lang=EN-US>FLL_CTL1</span>和<span lang=EN-US>BTCTL</span>等几个寄存器。具体设置，参看<span lang=EN-US>DataSheet</span>。<span lang=EN-US><o:p></o:p></span></font></span></h3>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p align=center>&nbsp;</p>
上传上来的时候，发现图片没有显示出来，不好意思
<img src ="http://www.cppblog.com/franksunny/aggbug/25773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-06-07 22:14 <a href="http://www.cppblog.com/franksunny/archive/2007/06/07/25773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于变量的存储问题</title><link>http://www.cppblog.com/franksunny/archive/2007/06/01/25277.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Fri, 01 Jun 2007 07:00:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/06/01/25277.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/25277.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/06/01/25277.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/25277.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/25277.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;关于变量的存储问题&nbsp;以前从事上位机程序代码的编写，压根不用很具体的考虑变量的具体存放位置，只知道以下概念就行了：1. 堆区（ heap ）：由程序员申请分配和释放，属动态内存分配方式，变量存放于动态存储区，若程序员不释放，程序结束时可能会由 OS 回收。不过这个内存分配很容易引起问题，如果申请的内存不释放就会造成内存泄漏；如果释放的不是所要释放的内存，则轻者引...&nbsp;&nbsp;<a href='http://www.cppblog.com/franksunny/archive/2007/06/01/25277.html'>阅读全文</a><img src ="http://www.cppblog.com/franksunny/aggbug/25277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-06-01 15:00 <a href="http://www.cppblog.com/franksunny/archive/2007/06/01/25277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430入门</title><link>http://www.cppblog.com/franksunny/archive/2007/04/18/22221.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Wed, 18 Apr 2007 08:04:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/04/18/22221.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/22221.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/04/18/22221.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/22221.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/22221.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center; mso-char-indent-count: 2.0" align=center><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 32.15pt; TEXT-ALIGN: center; mso-char-indent-count: 2.0" align=center><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 宋体">MSP430</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 宋体">入门<span lang=EN-US><o:p></o:p></span></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center; mso-char-indent-count: 2.0" align=center><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">本人学习和使用<span lang=EN-US>msp430</span>一个月，偶在微控论坛看到一笔记，记载的蛮好的，现转载到自己博客以做备忘。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 28.1pt; TEXT-ALIGN: center; mso-char-indent-count: 2.0" align=center><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">硬件初步<span lang=EN-US><o:p></o:p></span></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">这只是我在学习<span lang=EN-US>TI</span>公司生产的<span lang=EN-US>16</span>位超的功耗单片机<span lang=EN-US>MSP430</span>的随笔，希望能对其他朋友有所借鉴，不对之处还请多指教。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">下面，开始<span lang=EN-US>430</span>之旅。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">讲解<span lang=EN-US>430</span>的书现在也有很多了，不过大多数都是详细说明底层硬件结构的，看了不免有些空洞和枯燥，我认为了解一个<span lang=EN-US>MCU</span>的操作首先要对其基础特性有所了解，然后再仔细研究各模块的功能。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">1.</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">首先你要知道<span lang=EN-US>msp430</span>的存储器结构。典型微处理器的结构有两种：冯。诺依曼结构<span lang=EN-US>——</span>程序存储器和数据存储器统一编码；哈佛结构<span lang=EN-US>——</span>程序存储器和数据存储器；<span lang=EN-US>msp430</span>系列单片机属于前者，而常用的<span lang=EN-US>mcs51</span>系列属于后者。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">0</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">－<span lang=EN-US>0xf</span>特殊功能寄存器；<span lang=EN-US>0x10</span>－<span lang=EN-US>0x1ff</span>外围模块寄存器；<span lang=EN-US>0x200</span>－？根据不同型号地址从低向高扩展；<span lang=EN-US>0x1000</span>－<span lang=EN-US>0x<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="107" UnitName="F">107f</st1:chmetcnv> seg_b0x1080_0x10ff seg_a </span>供<span lang=EN-US>flash</span>信息存储剩下的从<span lang=EN-US>0xffff</span>开始向下扩展，根据不同容量，例如<span lang=EN-US>149</span>为<span lang=EN-US>60KB</span>，<span lang=EN-US>0xffff</span>－<span lang=EN-US>0x1100<o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">2.</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">复位信号是<span lang=EN-US>MCU</span>工作的起点，<span lang=EN-US>430</span>的复位信号有两种：上电复位信号<span lang=EN-US>POR</span>和上电清除信号<span lang=EN-US>PUC</span>。<span lang=EN-US>POR</span>信号只在上电和<span lang=EN-US>RST/NMI</span>复位管脚被设置为复位功能，且低电平时系统复位。而<span lang=EN-US>PUC</span>信号是<span lang=EN-US>POR</span>信号产生，以及其他如看门狗定时溢出、安全键值出现错误是产生。但是，无论那种信号触发的复位，都会使<span lang=EN-US>msp430</span>在地址<span lang=EN-US>0xffff</span>处读取复位中断向量，然后程序从中断向量所指的地址开始执行。复位后的状态不写了，详见参考书，嘿嘿。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">3.</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">系统时钟是一个程序运行的指挥官，时序和中断也是整个程序的核心和中轴线。<span lang=EN-US>430</span>最多有三个振荡器，<span lang=EN-US>DCO</span>内部振荡器；<span lang=EN-US>LFXT1</span>外接低频振荡器，常见的<span lang=EN-US>32768HZ</span>，不用外接负载电容；也可接高频<span lang=EN-US>450KHZ</span>－<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="8" UnitName="m"><span lang=EN-US>8M</span></st1:chmetcnv>，需接负载电容；<span lang=EN-US>XT2</span>接高频<span lang=EN-US>450KHZ</span>－<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="8" UnitName="m"><span lang=EN-US>8M</span></st1:chmetcnv>，加外接电容。（经验中发现，接<span lang=EN-US>XT2</span>时，需要注意</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">自己开启</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">XT2</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">，并延时</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">50us</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">等待</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">XT2</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">起振，然后手工清除</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">IFG1</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">中的</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">OFIFG</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">位，其操作顺序为：打开</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">XT2-&gt;</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">等待</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">XT2</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">稳定</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">-&gt;</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">切换系统时钟为</span><span lang=EN-US style="COLOR: black; FONT-FAMILY: ˎ̥; mso-bidi-font-size: 10.5pt">XT2</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">）<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">430</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">有三种时钟信号：<span lang=EN-US>MCLK</span>系统主时钟，可分频<span lang=EN-US>1 2 4 8</span>，供<span lang=EN-US>cpu</span>使用，其他外围模块在有选择情况下也可使用；<span lang=EN-US>SMCLK</span>系统子时钟，供外围模块使用，可选则不同振荡器产生的时钟信号；<span lang=EN-US>ACLK</span>辅助时钟，只能由<span lang=EN-US>LFXT1</span>产生，供外围模块。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">4.</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">中断是<span lang=EN-US>430</span>处理器的一大特色，因为几乎每个外围模块都能产生，<span lang=EN-US>430</span>可以在没有任务时进入低功耗状态，有事件时中断唤醒<span lang=EN-US>cpu</span>，处理完毕再次进入低功耗状态。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">整个中断的响应过程是这样的，当有中断请求时，如果<span lang=EN-US>cpu</span>处于活动状态，先完成当前命令；如果处于低功耗，先退出，将下一条指令的<span lang=EN-US>pc</span>值压入堆栈；如果有多个中断请求，先响应优先级高的；执行完后，等待中断请求标志位复位，要注意，单中断源的中断请求标志位自动复位，而多中断的标志位需要软件复位；然后系统总中断允许位<span lang=EN-US>SR.GIE</span>复位，相应的中断向量值装入<span lang=EN-US>pc</span>，程序从这个地址继续执行。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">这里要注意，中断允许位<span lang=EN-US>SR.GIE</span>和中断嵌套问题。如果当你执行中断程序过程中，希望可以响应更高级别的中断请求时，必须在进入第一个中断时把<span lang=EN-US>SR.GIE</span>置位。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">其实，其他的外围模块时钟沿着时钟和中断这个核心来执行的。具体的结构我也不罗索了，可以参考<span lang=EN-US>430</span>系列手册。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 28.1pt; TEXT-ALIGN: center; mso-char-indent-count: 2.0" align=center><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">C</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">语言编程起步<span lang=EN-US><o:p></o:p></span></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">因为常用的<span lang=EN-US>430</span>编程开发是<span lang=EN-US>c</span>语言，所以下面讲解<span lang=EN-US>C</span>语言对<span lang=EN-US>430</span>编程的整体结构。基本上属于框架结构，即整体的模块化编程，其实这也是硬件编程的基本法则拉（可不是我规定的法则哦）。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">首先是程序的头文件，包括<span lang=EN-US>#include &lt;MSP430x14x.h&gt;,</span>这是<span lang=EN-US>14</span>系列，因为常用<span lang=EN-US>149</span>；其他型号可自己修改。还可以包括<span lang=EN-US>#include "data.h" </span>等数据库头文件，或函数变量声明头文件，都是你自己定义的哦。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">接着就是函数和变量的声明<span lang=EN-US> void Init_Sys(void)</span>，即系统初始化。系统初始化是个整体的概念，广义上讲包括所有外围模块的初始化，你可以把外围模块初始化的子函数写到<span lang=EN-US>Init_Sys</span>（）中，也可以分别写各个模块的初始化。但结构的简洁，最好写完系统的时钟初始化后，其他所用到的模块（包括一些中断初始化）也在这里初始化。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">void Init_Sys()<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;unsigned int i;<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;BCSCTL1&amp;=~XT2OFF; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">打开<span lang=EN-US>XT2</span>振荡器<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;do<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;{<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;IFG1 &amp;= ~OFIFG; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;// </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">清除振荡器失效标志<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;for (i = 0xFF; i &gt; 0; i--); <span style="mso-spacerun: yes">&nbsp;</span>// </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">延时，等待<span lang=EN-US>XT2</span>起振<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">while ((IFG1 &amp; OFIFG) != 0); &nbsp; &nbsp;// </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">判断<span lang=EN-US>XT2</span>是否起振<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">BCSCTL2 =SELM_2+SELS; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;//</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">选择<span lang=EN-US>MCLK</span>、<span lang=EN-US>SMCLK</span>为<span lang=EN-US>XT2<o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">//</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">以下对各种模块、中断、外围设备等进行初始化<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">........................................<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">_EINT(); //</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">打开全局中断控制<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">这里涉及到时钟问题，通常我们选择<span lang=EN-US>XT2</span>为<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="8" UnitName="m"><span lang=EN-US>8M</span></st1:chmetcnv>晶振，也即系统主时钟<span lang=EN-US>MCLK</span>为<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="8" UnitName="m"><span lang=EN-US>8M</span></st1:chmetcnv><span lang=EN-US>,cpu</span>执行命令以此时钟为准；但其他外围模块可以在相应的控制寄存器中选择其他的时钟，<span lang=EN-US>ACLK</span>；当你对速度要求很低，定时时间间隔大时，就可以选择<span lang=EN-US>ACLK</span>，例如在定时器<span lang=EN-US>Timea</span>初始化中设置。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">主程序： <span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">void main( void )<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;WDTCTL = WDTPW + WDTHOLD;//</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">关闭看门狗<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes">&nbsp;</span>&nbsp; InitSys(); &nbsp; <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp; //</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">初始化<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">//</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">自己任务中的其他功能函数<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp;</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">。。。。。。。。。。。。。。。。。。。。。 <span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp;while(1);<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">主程序之后我要讲讲中断函数，中断是你做单片机任务中不可缺少的部分，也可以说是灵魂了（夸张吗）。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">/***********************************************************************<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">各中断函数，可按优先级依次书写<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">***********************************************************************/<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">举个定时中断的例子：<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">//</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">初始化<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">void Init_Timer_A(void)<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">&nbsp;<span style="mso-spacerun: yes">&nbsp; </span>&nbsp;TACTL = TASSEL0 + TACLR; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; // ACLK, clear TAR<br>&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;CCTL0 = CCIE; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// CCR0 </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">中断使能<span lang=EN-US><br>&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;CCR0=32768; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; //</span>定时<span lang=EN-US>1s<br>&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;TACTL|=MC0; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; //</span>增计数模式<span lang=EN-US><br>&nbsp; &nbsp; }<br>// &nbsp; &nbsp; </span>中断服务 <span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">#pragma vector=TIMERA0_VECTOR<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">__interrupt void TimerA0()<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">{<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 44.95pt; mso-char-indent-count: 4.28"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">// </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">你自己要求中断执行的任务<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">}<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">当然，还有其他的定时，和多种中断，各系列芯片的中断向量个数也不同。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">学完并懂得以上知识后，接下去推荐看微控论坛上的<span lang=EN-US>msp430</span>常用模块应用原理。</span><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<img src ="http://www.cppblog.com/franksunny/aggbug/22221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-04-18 16:04 <a href="http://www.cppblog.com/franksunny/archive/2007/04/18/22221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>