<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>So 豆腐!</title>
	<atom:link href="http://soundofu.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://soundofu.com/wordpress</link>
	<description>专注于DSP与单片机开发</description>
	<lastBuildDate>Wed, 14 Sep 2011 13:26:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>更新服务器</title>
		<link>http://soundofu.com/wordpress/2011/09/14/update-new-serve/</link>
		<comments>http://soundofu.com/wordpress/2011/09/14/update-new-serve/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 13:26:15 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://soundofu.com/wordpress/?p=93</guid>
		<description><![CDATA[最近更新了服务器，整体构架由原来的LAMP变为LNMP，其中的Apache变为Nginx。系统资源消耗更少，但是配置起来不是很得心应手。 由于变更了服务器地址，响应速度可能会有些影响。]]></description>
			<content:encoded><![CDATA[<p>最近更新了服务器，整体构架由原来的LAMP变为LNMP，其中的Apache变为Nginx。系统资源消耗更少，但是配置起来不是很得心应手。</p>
<p>由于变更了服务器地址，响应速度可能会有些影响。</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/09/14/update-new-serve/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>我的浮点心 &#8211; CLA简介(上)</title>
		<link>http://soundofu.com/wordpress/2011/06/29/control-law-accelerator-intro/</link>
		<comments>http://soundofu.com/wordpress/2011/06/29/control-law-accelerator-intro/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 03:30:58 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[CLA]]></category>
		<category><![CDATA[intro]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=90</guid>
		<description><![CDATA[在TI的产品线中，F2803x Piccolo™系列处理器主打低成本高效控制的路线。在数据计算部分，虽然有IQMath这个伪浮点数计算库，但是在平均最高60MHz的处理速度下，仍然后很多工作无法胜任。为了提高性价比，TI在其中引入了一个新的概念：控制率加速器(Control Law Accelerator, 简称CLA)，主要功能是：在原有的CPU构架外，新增一个支持浮点运算的并行处理核心，实现“双核”控制。 什么时候需要用CLA? 1. 有大量的浮点数学运算，CPU在计算之余，还需要去响应各种外设的请求。 由于CLA是与原有的CPU并行进行计算，因此在原有的CPU中只需要设置好交换的数据并使能对应的CLA任务，CPU就可以去运行其它的任务，CLA运行完毕后会自动将规定好的数据传回。就好象对自己的助手说：“嘿，张三，帮我把这个表格按照公司的格式生成统计结果”，张三做完后会把数据送回来，而这段时间里你可以继续做其它的事情。 2. 采用IQMath库的时候，无法同时满足“精度”和“范围”的需求。 在IQMath库中，CPU将浮点运算转换成定点运算，因此有时无法在精度和范围两方面灵活互补，而CLA采用了浮点数，系统会自动对计算的精度和范围进行调整，达到最优的效果。 3. 程序需要对运行速度进行深度优化。 CLA运行的程序只能使用对应的汇编语言进行编程，用户可以在程序执行的流水线等待阶段插入不影响结果的语句，充分利用强大的计算能力，榨干处理器的每一点计算能力。 什么时候不适合使用CLA? 1. 有大量的判断、跳转语句(if&#8230;else&#8230; for&#8230; while&#8230;)需要运行。 由于CLA采用8级流水线结构，数据的计算能力非常强大，但是在判断和跳转语句中会造成后续的流水线失败，因此，大量的判断和跳转操作最好放在CPU中进行。 2. 需要访问复杂的外设。 CLA虽然和CPU共用大多数资源，但是前者只能访问PWM和ADC的有限的寄存器，其它的寄存器访问需要间接的向CPU请求，由此也可以看出来，CLA的存在，主要是为了强化基于PWM控制的运算，而CPU可以更轻松的控制丰富的外设。 CLA的有什么不足? 1. 与CPU共用内存资源 CLA没有自己的内存资源，因此必须从CPU中划分出对应的内存区域供CLA的程序和数据使用。 2. 没有只有乘法器和加法器 CLA只有乘法器和加法器，没有硬件除法器，因此除法运算需要的周期还是远大于乘法。 以上是关于选用CLA使用的一些简介。]]></description>
			<content:encoded><![CDATA[<p>在TI的产品线中，F2803x Piccolo™系列处理器主打低成本高效控制的路线。在数据计算部分，虽然有IQMath这个伪浮点数计算库，但是在平均最高60MHz的处理速度下，仍然后很多工作无法胜任。为了提高性价比，TI在其中引入了一个新的概念：控制率加速器(Control Law Accelerator, 简称CLA)，主要功能是：在原有的CPU构架外，新增一个支持浮点运算的并行处理核心，实现“双核”控制。</p>
<p><strong>什么时候需要用CLA?</strong><br />
1. 有大量的浮点数学运算，CPU在计算之余，还需要去响应各种外设的请求。<br />
由于CLA是与原有的CPU并行进行计算，因此在原有的CPU中只需要设置好交换的数据并使能对应的CLA任务，CPU就可以去运行其它的任务，CLA运行完毕后会自动将规定好的数据传回。就好象对自己的助手说：“嘿，张三，帮我把这个表格按照公司的格式生成统计结果”，张三做完后会把数据送回来，而这段时间里你可以继续做其它的事情。<br />
2. 采用IQMath库的时候，无法同时满足“精度”和“范围”的需求。<br />
在IQMath库中，CPU将浮点运算转换成定点运算，因此有时无法在精度和范围两方面灵活互补，而CLA采用了浮点数，系统会自动对计算的精度和范围进行调整，达到最优的效果。<br />
3. 程序需要对运行速度进行深度优化。<br />
CLA运行的程序只能使用对应的汇编语言进行编程，用户可以在程序执行的流水线等待阶段插入不影响结果的语句，充分利用强大的计算能力，榨干处理器的每一点计算能力。</p>
<p><strong>什么时候不适合使用CLA?</strong><br />
1. 有大量的判断、跳转语句(if&#8230;else&#8230; for&#8230; while&#8230;)需要运行。<br />
由于CLA采用8级流水线结构，数据的计算能力非常强大，但是在判断和跳转语句中会造成后续的流水线失败，因此，大量的判断和跳转操作最好放在CPU中进行。<br />
2. 需要访问复杂的外设。<br />
CLA虽然和CPU共用大多数资源，但是前者只能访问PWM和ADC的有限的寄存器，其它的寄存器访问需要间接的向CPU请求，由此也可以看出来，CLA的存在，主要是为了强化基于PWM控制的运算，而CPU可以更轻松的控制丰富的外设。</p>
<p><strong>CLA的有什么不足?</strong><br />
1. 与CPU共用内存资源<br />
CLA没有自己的内存资源，因此必须从CPU中划分出对应的内存区域供CLA的程序和数据使用。<br />
2. 没有只有乘法器和加法器<br />
CLA只有乘法器和加法器，没有硬件除法器，因此除法运算需要的周期还是远大于乘法。</p>
<p>以上是关于选用CLA使用的一些简介。</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/06/29/control-law-accelerator-intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android的同步</title>
		<link>http://soundofu.com/wordpress/2011/06/18/android-phone-sync/</link>
		<comments>http://soundofu.com/wordpress/2011/06/18/android-phone-sync/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 09:06:09 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=63</guid>
		<description><![CDATA[用了HTC Desire一年了，一直刷的官方的ROM，最近尝试一下基于CM Mod的MIUI版ROM，发现明显比港行官方ROM修改出来的版本要省电，功能也更平易近人一些。 可是发生了一个悲剧的事件：无法与Outlook同步联系人! 因为工作原因，平时使用的邮件客户端是Outlook。以前是HTC的ROM，通过HTC Sync可以与Outlook双向同步联系人；但是MIUI里面并没有HTC Sync的功能，因此再也无法更新联系人，导致很多联系人发生了改变之后只能通过手工两边修改成同样的内容，随着时间，这项工作越来越繁重，生怕两边有些许不同。 之所以买手机之后没有立即使用Google账户来同步联系人，是因为Gmail已经使用了很久，列表中的联系人嫉妒杂乱无章，属于各种随意使用之后的后遗症。 后来忍无可忍，先清理了一下Gmail联系人列表，然后把Outlook导出到Google Contact中去。然后开启了Google Contacts的同步，基本上实现了联系人的“云端”存储]]></description>
			<content:encoded><![CDATA[<p>用了HTC Desire一年了，一直刷的官方的ROM，最近尝试一下基于CM Mod的MIUI版ROM，发现明显比港行官方ROM修改出来的版本要省电，功能也更平易近人一些。</p>
<p>可是发生了一个悲剧的事件：无法与Outlook同步联系人!</p>
<p>因为工作原因，平时使用的邮件客户端是Outlook。以前是HTC的ROM，通过HTC Sync可以与Outlook双向同步联系人；但是MIUI里面并没有HTC Sync的功能，因此再也无法更新联系人，导致很多联系人发生了改变之后只能通过手工两边修改成同样的内容，随着时间，这项工作越来越繁重，生怕两边有些许不同。</p>
<p>之所以买手机之后没有立即使用Google账户来同步联系人，是因为Gmail已经使用了很久，列表中的联系人嫉妒杂乱无章，属于各种随意使用之后的后遗症。</p>
<p>后来忍无可忍，先清理了一下Gmail联系人列表，然后把Outlook导出到Google Contact中去。然后开启了Google Contacts的同步，基本上实现了联系人的“云端”存储</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/06/18/android-phone-sync/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>28035内部温度传感器的使用</title>
		<link>http://soundofu.com/wordpress/2011/04/21/28035%e5%86%85%e9%83%a8%e6%b8%a9%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8%e7%9a%84%e4%bd%bf%e7%94%a8/</link>
		<comments>http://soundofu.com/wordpress/2011/04/21/28035%e5%86%85%e9%83%a8%e6%b8%a9%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8%e7%9a%84%e4%bd%bf%e7%94%a8/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 05:49:56 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[ADC]]></category>
		<category><![CDATA[temperature sensor]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=69</guid>
		<description><![CDATA[在TMS320F28035的Analog-to-Digital Convert (ADC)模块中，内置了一个温度传感器，在进行ADC的时候可以设置ADCINA5通道为内部温度传感器，并且对其进行采样。 1. 需要将设置ADCCTL1[Bit0:TEMPCONV]设置为1，以开启内部的温度传感器。 2. 根据说明，读取出厂预标定值，包括斜率(slope)和偏移(offset)。 0x3D7E82 &#8211; Slope (ºC / LSB, fixed-point Q15 format) 0x3D7E85 &#8211; Offset (0 ºC LSB value) 3. 设置转换。 以最快转换速度进行转换(ACQPS = 6; // 7 ADC Clock @ 60MHz)：需要连续两次转换，并且读取后一次的值为准； 以超过550ns的速度进行转换(ACQPS &#62;= 32; // 33 ADC &#8230; <a href="http://soundofu.com/wordpress/2011/04/21/28035%e5%86%85%e9%83%a8%e6%b8%a9%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8%e7%9a%84%e4%bd%bf%e7%94%a8/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在TMS320F28035的Analog-to-Digital Convert (ADC)模块中，内置了一个温度传感器，在进行ADC的时候可以设置ADCINA5通道为内部温度传感器，并且对其进行采样。</p>
<p>1. 需要将设置ADCCTL1[Bit0:TEMPCONV]设置为1，以开启内部的温度传感器。<br />
2. 根据说明，读取出厂预标定值，包括斜率(slope)和偏移(offset)。<br />
0x3D7E82 &#8211; Slope (ºC / LSB, fixed-point Q15 format)<br />
0x3D7E85 &#8211; Offset (0 ºC LSB value)<br />
3. 设置转换。<br />
以最快转换速度进行转换(ACQPS = 6; // 7 ADC Clock @ 60MHz)：需要连续两次转换，并且读取后一次的值为准；<br />
以超过550ns的速度进行转换(ACQPS &gt;= 32; // 33 ADC Clock @ 60MHz )，可只读取一次。<br />
4. 以公式进行转换<br />
Temperature = (sensor &#8211; Offset) * Slop<br />
5. 你会发现转换后的值不对。</p>
<p>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</p>
<p>经试验，在室温20摄氏度的时候，采集到的值约为2190，slope 约等于 0.217，offset 为1750，计算得到的值为126摄氏度。<br />
使用Fluke561红外温度监测仪进行扫描，CPU外壳部分温度约为30～34摄氏度，与计算得到的值相差较大。<br />
将计算得到的温度值：126作为华氏度转换为摄氏度后，温度约为52.2摄氏度。考虑到温度传感器所采集的位置为结温，会高于外壳温度，因此，得出结论：<br />
TMS320F28035处理器的ADC模块内部温度传感器所采到的值应该是华氏度，而不是摄氏度。</p>
<p>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
华氏度 &#8211; 摄氏度转换公式：</p>
<p>华氏度＝32＋摄氏度×1.8<br />
摄氏度＝（华氏度－32）÷1.8</p>
<p>相关文档：<br />
【<a href="http://focus.ti.com.cn/cn/lit/ug/spruge5b/spruge5b.pdf">TMS320x2802x, 2803x Piccolo Analog-to-Digital<br />
Converter (ADC) and Comparator Reference Guide</a>】<br />
【<a href="http://focus.ti.com.cn/cn/lit/er/sprz295e/sprz295e.pdf">TMS320F2803x Piccolo MCU Silicon Errata</a>】<br />
【<a href="http://focus.ti.com/lit/ds/sprs523f/sprs523f.pdf">TMS320x2802x, 2803x Piccolo Datasheet</a>】</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/04/21/28035%e5%86%85%e9%83%a8%e6%b8%a9%e5%ba%a6%e4%bc%a0%e6%84%9f%e5%99%a8%e7%9a%84%e4%bd%bf%e7%94%a8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>增加分类”MCU”</title>
		<link>http://soundofu.com/wordpress/2011/04/21/%e5%a2%9e%e5%8a%a0%e5%88%86%e7%b1%bbmcu/</link>
		<comments>http://soundofu.com/wordpress/2011/04/21/%e5%a2%9e%e5%8a%a0%e5%88%86%e7%b1%bbmcu/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 05:19:53 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=65</guid>
		<description><![CDATA[最近有一部分工作是使用mcu，因此增设MCU分类。 接触到的芯片为STM32F100C8, 属于Cortex-M3内核。]]></description>
			<content:encoded><![CDATA[<p>最近有一部分工作是使用mcu，因此增设MCU分类。</p>
<p>接触到的芯片为<a href="http://www.st.com/internet/mcu/product/216839.jsp">STM32F100C8</a>, 属于<a href="http://www.arm.com/products/processors/cortex-m/cortex-m3.php">Cortex-M3</a>内核。</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/04/21/%e5%a2%9e%e5%8a%a0%e5%88%86%e7%b1%bbmcu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I2C模块的从机接收</title>
		<link>http://soundofu.com/wordpress/2011/03/18/i2c%e6%a8%a1%e5%9d%97%e7%9a%84%e4%bb%8e%e6%9c%ba%e6%8e%a5%e6%94%b6/</link>
		<comments>http://soundofu.com/wordpress/2011/03/18/i2c%e6%a8%a1%e5%9d%97%e7%9a%84%e4%bb%8e%e6%9c%ba%e6%8e%a5%e6%94%b6/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 09:19:55 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[I2C]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=64</guid>
		<description><![CDATA[今日在使用TMS320F28035的时候用到了I2C模块，两个同样的处理器通过I2C总线进行通讯。 在使用的过程中，”主-&#62;从”方向的通讯没有问题，但是在&#8220;请求 &#8211; 响应&#8221;的双向通讯中，总是出现问题。 具体表现为： 主机发送的 7-bit 从机地址之后的R/W位总是保持写入的状态（0），导致从机无法正常响应通讯的数据，总线保持繁忙状态。 程序参考了：2803x C/C++ Header Files and Peripheral Examples&#160;sprc892.zip 以及：PMBus&#160;sprabj6-Software Implementation of PMBus Over I2C.pdf &#160;]]></description>
			<content:encoded><![CDATA[<p>今日在使用TMS320F28035的时候用到了I2C模块，两个同样的处理器通过I2C总线进行通讯。</p>
<p>在使用的过程中，”主-&gt;从”方向的通讯没有问题，但是在&ldquo;请求 &#8211; 响应&rdquo;的双向通讯中，总是出现问题。</p>
<p>具体表现为：</p>
<p>主机发送的 7-bit 从机地址之后的R/<span style="text-decoration: underline;">W</span>位总是保持写入的状态（0），导致从机无法正常响应通讯的数据，总线保持繁忙状态。</p>
<p>程序参考了：<span style="border-collapse: collapse; color: #525252; font-family: 'Arial Unicode', Helvetica, sans-serif; font-size: 13px;">2803x C/C++ Header Files and Peripheral Examples&nbsp;</span><a href="http://www.ti.com/cn/litv/zip/sprc892">sprc892.zip</a></p>
<p>以及：PMBus&nbsp;<a href="http://www.ti.com/cn/litv/pdf/sprabj6">sprabj6-Software Implementation of PMBus Over I2C.pdf</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/03/18/i2c%e6%a8%a1%e5%9d%97%e7%9a%84%e4%bb%8e%e6%9c%ba%e6%8e%a5%e6%94%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GPIO用做输入的问题</title>
		<link>http://soundofu.com/wordpress/2011/01/11/gpio%e7%94%a8%e5%81%9a%e8%be%93%e5%85%a5%e7%9a%84%e9%97%ae%e9%a2%98/</link>
		<comments>http://soundofu.com/wordpress/2011/01/11/gpio%e7%94%a8%e5%81%9a%e8%be%93%e5%85%a5%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 07:48:04 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[TMS320F28035]]></category>
		<category><![CDATA[内部上拉]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=56</guid>
		<description><![CDATA[今天在使用TMS320F28035这款MCU的时候，出现了一个问题： 被用做输入的端口无法真实反映出外部的高低电平状态。 排除了外部的因素后，发现GPIO用做输入的时候，MCU内部的上拉电路仍然在起作用，并且影响着输入信号的电平状态。 解决方法： 由于GPIO端口（除了可以用作ePWM的端口）默认开启了内部上拉功能，因此： 用做输入端口时一定要关闭对应管脚内部的上拉功能。 涉及到的寄存器为：GPAPUD / GPBPUD。]]></description>
			<content:encoded><![CDATA[<p>今天在使用TMS320F28035这款MCU的时候，出现了一个问题：</p>
<blockquote><p>被用做输入的端口无法真实反映出外部的高低电平状态。</p></blockquote>
<p>排除了外部的因素后，发现GPIO用做输入的时候，MCU内部的上拉电路仍然在起作用，并且影响着输入信号的电平状态。</p>
<p>解决方法：</p>
<p>由于GPIO端口（除了可以用作ePWM的端口）默认开启了内部上拉功能，因此：</p>
<p>用做<strong>输入端口</strong>时一定要<strong>关闭对应管脚内部的上拉功能</strong>。</p>
<p>涉及到的寄存器为：<strong>GPAPUD</strong> / <strong>GPBPUD</strong>。</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/01/11/gpio%e7%94%a8%e5%81%9a%e8%be%93%e5%85%a5%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>28035之时钟选择</title>
		<link>http://soundofu.com/wordpress/2011/01/05/28035%e4%b9%8b%e6%97%b6%e9%92%9f%e9%80%89%e6%8b%a9/</link>
		<comments>http://soundofu.com/wordpress/2011/01/05/28035%e4%b9%8b%e6%97%b6%e9%92%9f%e9%80%89%e6%8b%a9/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 03:13:08 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[PLL]]></category>
		<category><![CDATA[TMS320F28035]]></category>
		<category><![CDATA[时钟]]></category>
		<category><![CDATA[晶振]]></category>
		<category><![CDATA[锁相环]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=29</guid>
		<description><![CDATA[TMS320F28035这款DSP（现在应该是MCU了）具有2个片内时钟振荡器，同时具有1个晶振输入和1个外部时钟输入。 INTOSC1：片内时钟振荡器1（10MHz），可以为看门狗、系统内核、CPU定时器2提供时钟基准。 INTOSC2：片内时钟振荡器2（10MHz），可以为看门狗、系统内核、CPU定时器2提供时钟基准。 Crystal / Resonator：采用外部晶振作为时钟基准（XTAL），硬件上连接在X1 / X2脚。 External Clock Source：外部时钟源（XCLK – GPIO19 / GPIO38），如果没有使用外部晶振，那么可以使用一个外部的时钟源接入到XCLKIN管脚上，提供时钟基准。 默认情况下，系统内核时钟是由INTOSC1提供的，经过实际使用下来，片内的INTOSC1和INTOSC2并不是很精确，并且受温度影响较大。如果使用外部晶振，应该如何切换呢？ 1. 启用编辑受保护的寄存器； 1 EALLOW; 2. 将CLKCTL[XTALOSCOFF]设置为0，启用外部晶振；并将CLKCTL[XCLKINOFF]设置为1，禁用外部时钟输入； 参考操作: 2 SysCtrlRegs.CLKCTL.all = 0x2400; 3. 将CLKCTL[OSCCLKSRCSEL] 设置为1，使用外部晶振作为系统时钟源；此时，系统时钟无分频和倍频，需要重新设置PLLCR； 参考操作: 3 SysCtrlRegs.CLKCTL.all = 0x2401; 4. 重新设置PLLCR，并等待设置完毕； 参考操作: 4 5 &#8230; <a href="http://soundofu.com/wordpress/2011/01/05/28035%e4%b9%8b%e6%97%b6%e9%92%9f%e9%80%89%e6%8b%a9/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>TMS320F28035这款DSP（现在应该是MCU了）具有2个片内时钟振荡器，同时具有1个晶振输入和1个外部时钟输入。</p>
<p><strong>INTOSC1</strong>：片内时钟振荡器1（10MHz），可以为看门狗、系统内核、CPU定时器2提供时钟基准。</p>
<p><strong>INTOSC2</strong>：片内时钟振荡器2（10MHz），可以为看门狗、系统内核、CPU定时器2提供时钟基准。</p>
<p><strong>Crystal / Resonator</strong>：采用外部晶振作为时钟基准（XTAL），硬件上连接在X1 / X2脚。</p>
<p><strong>External Clock Source</strong>：外部时钟源（XCLK – GPIO19 / GPIO38），如果没有使用外部晶振，那么可以使用一个外部的时钟源接入到XCLKIN管脚上，提供时钟基准。</p>
<p>默认情况下，系统内核时钟是由<strong>INTOSC1</strong>提供的，经过实际使用下来，片内的<strong>INTOSC1</strong>和<strong>INTOSC2</strong>并不是很精确，并且受温度影响较大。如果使用外部晶振，应该如何切换呢？</p>
<p>1. 启用编辑受保护的寄存器；</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">EALLOW<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>2. 将CLKCTL[XTALOSCOFF]设置为0，启用外部晶振；并将CLKCTL[XCLKINOFF]设置为1，禁用外部时钟输入；<br />
参考操作:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>2
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">SysCtrlRegs.<span style="color: #202020;">CLKCTL</span>.<span style="color: #202020;">all</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x2400</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>3. 将CLKCTL[OSCCLKSRCSEL] 设置为1，使用外部晶振作为系统时钟源；此时，系统时钟无分频和倍频，需要重新设置PLLCR；<br />
参考操作:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>3
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">SysCtrlRegs.<span style="color: #202020;">CLKCTL</span>.<span style="color: #202020;">all</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x2401</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>4. 重新设置PLLCR，并等待设置完毕；<br />
参考操作:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SysCtrlRegs.<span style="color: #202020;">PLLSTS</span>.<span style="color: #202020;">bit</span>.<span style="color: #202020;">MCLKSTS</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    SysCtrlRegs.<span style="color: #202020;">PLLSTS</span>.<span style="color: #202020;">bit</span>.<span style="color: #202020;">MCLKOFF</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    SysCtrlRegs.<span style="color: #202020;">PLLSTS</span>.<span style="color: #202020;">bit</span>.<span style="color: #202020;">DIVSEL</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    SysCtrlRegs.<span style="color: #202020;">PLLCR</span>.<span style="color: #202020;">bit</span>.<span style="color: #202020;">DIV</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x000C</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>SysCtrlRegs.<span style="color: #202020;">PLLSTS</span>.<span style="color: #202020;">bit</span>.<span style="color: #202020;">PLLLOCKS</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        SysCtrlRegs.<span style="color: #202020;">WDKEY</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x0055</span><span style="color: #339933;">;</span>
        SysCtrlRegs.<span style="color: #202020;">WDKEY</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x00AA</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    SysCtrlRegs.<span style="color: #202020;">PLLSTS</span>.<span style="color: #202020;">bit</span>.<span style="color: #202020;">MCLKOFF</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    DelayUs<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">20</span><span style="color: #339933;">/</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    SysCtrlRegs.<span style="color: #202020;">PLLSTS</span>.<span style="color: #202020;">bit</span>.<span style="color: #202020;">DIVSEL</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x2</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
    asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; ESTOP0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>5. 关闭内部晶振INTOSC1；<br />
参考操作:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>22
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">SysCtrlRegs.<span style="color: #202020;">CLKCTL</span>.<span style="color: #202020;">all</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x2501</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>6. 禁止编辑受保护的寄存器；</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>23
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">EDIS<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>这样DSP可以工作在一个相对稳定和精确地时钟基准下。<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
参考文档：<br />
P43 &#8211; TMS320x2803x Piccolo System Control and Interrupts Reference Guide (Rev. B)<br />
<a href="http://focus.ti.com/lit/ug/sprugl8b/sprugl8b.pdf">From Ti.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2011/01/05/28035%e4%b9%8b%e6%97%b6%e9%92%9f%e9%80%89%e6%8b%a9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于DSP供电GND的问题</title>
		<link>http://soundofu.com/wordpress/2010/09/29/%e5%85%b3%e4%ba%8edsp%e4%be%9b%e7%94%b5gnd%e7%9a%84%e9%97%ae%e9%a2%98/</link>
		<comments>http://soundofu.com/wordpress/2010/09/29/%e5%85%b3%e4%ba%8edsp%e4%be%9b%e7%94%b5gnd%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 12:33:00 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[TMS320F2812]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=28</guid>
		<description><![CDATA[今天在调试DSP的时候连续烧毁了3块2812，都很诡异，很无奈，很纠结。 鼓起勇气再试一次的时候，终于发现了问题所在： 每次在CCS连接仿真器的时候，+5V供电的电流就会突然升高，DSP的内核部分+1.8V和外设部分+3.3V的阻值&#60;50Ω。初步认为是+5VGnd对保护地的压差&#62;54V，连接仿真器的瞬间产生一个很大的冲击，将DSP内核烧掉。 问题待解决。]]></description>
			<content:encoded><![CDATA[<p>今天在调试DSP的时候连续烧毁了3块2812，都很诡异，很无奈，很纠结。</p>
<p>鼓起勇气再试一次的时候，终于发现了问题所在：</p>
<p>每次在CCS连接仿真器的时候，+5V供电的电流就会突然升高，DSP的内核部分+1.8V和外设部分+3.3V的阻值&lt;50Ω。初步认为是+5VGnd对保护地的压差&gt;54V，连接仿真器的瞬间产生一个很大的冲击，将DSP内核烧掉。</p>
<p>问题<strong>待解决</strong>。</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2010/09/29/%e5%85%b3%e4%ba%8edsp%e4%be%9b%e7%94%b5gnd%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于EALLOW之类的汇编宏定义</title>
		<link>http://soundofu.com/wordpress/2010/09/22/%e5%85%b3%e4%ba%8eeallow%e4%b9%8b%e7%b1%bb%e7%9a%84%e6%b1%87%e7%bc%96%e5%ae%8f%e5%ae%9a%e4%b9%89/</link>
		<comments>http://soundofu.com/wordpress/2010/09/22/%e5%85%b3%e4%ba%8eeallow%e4%b9%8b%e7%b1%bb%e7%9a%84%e6%b1%87%e7%bc%96%e5%ae%8f%e5%ae%9a%e4%b9%89/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 01:05:29 +0000</pubDate>
		<dc:creator>soundofu</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[ASM]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[TMS320F28035]]></category>
		<category><![CDATA[TMS320F2812]]></category>

		<guid isPermaLink="false">http://soundofu.net/?p=7</guid>
		<description><![CDATA[今天，在编写TMS320F28035程序的时候，添加了某个配置功能，但必须要Rude Retry才能运行，否则无法采用Realtime Mode来运行程序。 后来，恢复到上一个运行正常的版本后，一点点加入之前添加的内容，终于发现了问题。原来是配置寄存器的时候调用了DRTM，但是配置完后没有使能ERTM。在配置寄存器之后，补上了一个ERTM就解决了问题。一时的疏忽大意，导致查找了将近半个小时的错误。 总结一下TI在TMS320F28xx标准库里定义的一些汇编语言： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // 全局中断使能 #define EINT asm(&#34; clrc INTM&#34;) &#160; // 全局中断禁止 #define DINT asm(&#34; setc &#8230; <a href="http://soundofu.com/wordpress/2010/09/22/%e5%85%b3%e4%ba%8eeallow%e4%b9%8b%e7%b1%bb%e7%9a%84%e6%b1%87%e7%bc%96%e5%ae%8f%e5%ae%9a%e4%b9%89/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>今天，在编写TMS320F28035程序的时候，添加了某个配置功能，但必须要Rude Retry才能运行，否则无法采用Realtime Mode来运行程序。<br />
后来，恢复到上一个运行正常的版本后，一点点加入之前添加的内容，终于发现了问题。原来是配置寄存器的时候调用了DRTM，但是配置完后没有使能ERTM。在配置寄存器之后，补上了一个ERTM就解决了问题。一时的疏忽大意，导致查找了将近半个小时的错误。</p>
<p>总结一下TI在TMS320F28xx标准库里定义的一些汇编语言：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// 全局中断使能</span>
<span style="color: #339933;">#define  EINT   asm(&quot; clrc INTM&quot;)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 全局中断禁止</span>
<span style="color: #339933;">#define  DINT   asm(&quot; setc INTM&quot;)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Enable RealTime Mode， 使能实时模式</span>
<span style="color: #339933;">#define  ERTM   asm(&quot; clrc DBGM&quot;)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Disable RealTime Mode， 禁止实时模式</span>
<span style="color: #339933;">#define  DRTM   asm(&quot; setc DBGM&quot;)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// E Allow， 解除保护，使能特殊寄存器的修改</span>
<span style="color: #339933;">#define  EALLOW asm(&quot; EALLOW&quot;)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// E Disable，恢复保护，禁止特殊寄存器的修改</span>
<span style="color: #339933;">#define  EDIS   asm(&quot; EDIS&quot;)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Emulator Stop，停止仿真，程序在此处会停住</span>
<span style="color: #666666; font-style: italic;">// 类似端点的的功能</span>
<span style="color: #339933;">#define  ESTOP0 asm(&quot; ESTOP0&quot;)</span></pre></td></tr></table></div>

<p>当DRTM后，处理器是不能进入实时模式的，除非勾选了Rude Retry。</p>
]]></content:encoded>
			<wfw:commentRss>http://soundofu.com/wordpress/2010/09/22/%e5%85%b3%e4%ba%8eeallow%e4%b9%8b%e7%b1%bb%e7%9a%84%e6%b1%87%e7%bc%96%e5%ae%8f%e5%ae%9a%e4%b9%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

