<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>Builder的空间</title><link>http://blog.csdn.net/builderchen/</link><description>学习笔记</description><dc:language>zh-CN</dc:language><lastUpdateTime>Tue, 13 Nov 2007 10:45:00 GMT</lastUpdateTime><ttl>60</ttl><item><dc:creator>BuilderChen</dc:creator><title>状态机学习资料</title><link>http://blog.csdn.net/BuilderChen/archive/2007/11/13/1881725.aspx</link><pubDate>Tue, 13 Nov 2007 10:36:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2007/11/13/1881725.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1881725.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2007/11/13/1881725.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1881725.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1881725</trackback:ping><description>6.2.3.2 两段式状态机描述方法（推荐写法）

为了使FSM 描述清晰简介，易于维护，易于附加时序约束，使综合器和布局布线器更好的优化设计，推荐使用两段式FSM 描述方法。

本例的两段式描述代码如下：

//2-paragraph method to describe FSM

//Describe sequential state transition in 1 sequential always block

//State transition conditions in the other combinational always block

//Package state output by task. Then register the output

module state2 ( nrst,clk,

i1,i2,

o1,o2,

err

);

input nrst,clk;

input i1,i2;

output o1,o2,err;

reg o1,o2,err;

reg [2:0]&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1881725.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>VHDL：理解信号与变量、并行语句与顺序语句</title><link>http://blog.csdn.net/BuilderChen/archive/2007/11/08/1873618.aspx</link><pubDate>Thu, 08 Nov 2007 14:16:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2007/11/08/1873618.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1873618.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2007/11/08/1873618.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1873618.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1873618</trackback:ping><description>初学VHDL，对一些问题总是感到困惑。比如，同样的赋值语句，在什么场合是并行的，什么时候又是顺序的？信号与变量有什么区别，为什么在PROCESS 里，对信号赋值的结果要等到进程挂起才起作用，而变量赋值却立刻起作用？其实，从语句产生的电路这个角度，可以更深刻地理解这些问题，下面是我自己摸索的一些理解方法，有不妥之处请大虾们指正！

1、赋值语句。
    同样a &lt;= b的赋值语句，会形成什么电路，起关键作用的是敏感信号。
    a) 如果a &lt;= b是在进程之外，那么隐含的敏感信号就是b，那么，这个赋值语句就形成一条连线。
    b) 如果是在一个同步进程中，如if (rising_edge(CLK)) then a &lt;= b，这时候，就会形成一个触发器，因为敏感信号是时钟边沿。
   c) 如果敏感信号是一个电平信号，那么会形成一个锁存器。如一个不完整的if条件：if (cond = '1') then a &lt;= b;

2、并行语句和顺序语句。
    从形成的电路的角度，并行语句最终会有两种形式：
    a) 并联或不相联的逻辑门或组合电路。因为是并联或&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1873618.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>关于VHDL状态机：不听老人言，吃亏在眼前。</title><link>http://blog.csdn.net/BuilderChen/archive/2007/05/18/1614963.aspx</link><pubDate>Fri, 18 May 2007 13:53:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2007/05/18/1614963.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1614963.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2007/05/18/1614963.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1614963.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1614963</trackback:ping><description>        以前看了不少关于如何写VDHL状态机的文章，都是提倡使用二段式或三段式的写法，都建议避免使用一段式的写法，但看了之后，都没什么体会。象我们写软件出身的，心理上总喜欢一段式的写法，觉得思路比较连贯，而且可以写在一个process里，“内聚性”比较高。软件工程师是最讨厌多个函数共用全局变量的了。
        但对于硬件开发，就不一样了。因为VHDL还是无法完全屏蔽掉硬件的物理特性，不好的布局，会使得写的逻辑错误执行。最近写的一个状态机，就遇到了这个麻烦。因为喜好的缘故，加上状态机里面有计数器，用组合逻辑写比较麻烦，于是我用了一段式的写法。结果实际运行的时候，发现状态机经常无故锁死，用逻辑分析仪看，发现陷入了非法的状态，而且when others语句也无法使状态机回到IDLE状态。开始怀疑逻辑上有错误，折腾几天后，把状态切换部分独立出来放在一个同步process里，问题解决了。虽然偶尔还会发现落入非法状态，但状态机会自动恢复到初始状态，不会锁死了，而程序逻辑没有做如何修改。看来以后还是得规规矩矩用二段或三段式的写法了。为了便于记忆，把二段、三段式的特点终结成几句话：
&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1614963.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>Quartus II v6.0 的波形仿真器</title><link>http://blog.csdn.net/BuilderChen/archive/2007/03/26/1541090.aspx</link><pubDate>Mon, 26 Mar 2007 09:37:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2007/03/26/1541090.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1541090.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2007/03/26/1541090.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1541090.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1541090</trackback:ping><description>      用Quartus II v6.0 的波形仿真器仿真模块内部信号，有时候总会出现错误的结果。非常简单的逻辑，也是仿真结果不对，反复检查代码，实在找不出哪个地方不对。被这个事困饶挺久了。有点怀疑Quartus的仿真部分有问题，使用外部EDA工具ModelSim来做仿真，也是一样的结果。最后，干脆在ModelSim新建项目，整个代码都使用ModelSim来编译和仿真，居然结果就对了！看来，应该是Quartus II输出给ModelSim的输出文件中就有问题了。以后用Quartus II仿真查看内部信号的时候，要小心啊！
&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1541090.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>dm642的EDMA</title><link>http://blog.csdn.net/BuilderChen/archive/2007/02/15/1510403.aspx</link><pubDate>Thu, 15 Feb 2007 09:59:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2007/02/15/1510403.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1510403.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2007/02/15/1510403.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1510403.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1510403</trackback:ping><description>dm642的EDMA功能非常强，其概念也比其他的DMA复杂点，但了解了下面这些词也就不难了。

Element：    EDMA 传送的最小单位，可以是8、16、32bit。
Frame：       多个element组成一个Frame，Frame中的Element可以是间隔的或连续的。
Array：          多个连续的Element组成一个Array。注意必须是连续的，这是Array与Frame的区别。
Block：         多个Frame或Array组成一个Block。
1D Transfer： 多个Frame组成的Block叫1D Block，1D Block的传送就是1D Transfer。
2D Transfer： 多个Array组成的Block叫2D Block，其传送就是2D Transfer。
Frame Index： 用于计算下一个Frame或Array的始地址。上一个Frame或Array的最后一个Element地址
                           加上Frame Index，就得到下一个Frame或Arr&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1510403.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>Nios II中DMA设备的使用</title><link>http://blog.csdn.net/BuilderChen/archive/2007/01/10/1478698.aspx</link><pubDate>Wed, 10 Jan 2007 09:42:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2007/01/10/1478698.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1478698.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2007/01/10/1478698.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1478698.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1478698</trackback:ping><description>        Nios II的标准设备软IP中有一个DMA设备，在SoPC系统开发中是一个非常常用的设备。但在Nios II的文档对该设备的说明里，一些概念和说明方式跟一般有些不同，容易造成初次接触的人一些理解上的混乱。
        DMA的概念其实挺简单，无非就是把一定长度的数据从源地址传送到目标地址。其中有一点比较重要的是对于地址的操作方式，一种是地址自增，另一种是地址固定。就是说DMA控制器读或写完一个数据后，对地址是自动增加，下次读写下一个地址，还是不变，下次还是读写同一个地址。由于地址固定模式一般是用在外设，所以在Nios的文档中，使用地址固定模式的一方就称为设备（Peripheral），而使用地址自增模式的一方则称为内存（Memory）。
        在HAL的API中，对于地址自增一方，需要打开一个接收或发送的Channel，然后配置地址；而如果是地址固定的一方，则不需要打开一个 Channel，只需要用alt_dma_rxchan_ioctl()的ALT_DMA_RX_ONLY_ON或ALT_DMA_TX_ONLY_ON 参数设置，并配置地址即可。下面是三&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1478698.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>linker与loader,x86与单片机</title><link>http://blog.csdn.net/BuilderChen/archive/2006/12/21/1451812.aspx</link><pubDate>Thu, 21 Dec 2006 14:32:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/12/21/1451812.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1451812.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/12/21/1451812.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1451812.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1451812</trackback:ping><description>
linker主要完成的工作：
        重定位：目标模块被创建时假设的目标地址都从0开始，linker把同名的section合并起来，然后为各个section规划run-time时刻的地址。linker假设run-time时刻的开始地址也是从0开始。
        符号解析：处理多个模块之间符号的引用。

loader主要完成的工作：
        程序加载：linker生成的可运行文件(如ELF, COFF)中，已经包含了各个section的运行地址、在文件中的位置(offset)和section的属性(read, write等)等信息，loader根据这些信息将各个段拷贝到指定的内存中准备运行。
        重定位：loader在加载时有可能进行再一次重定位，最终确定程序在run-time时刻的绝对地址。注意linker总是假设run-time空间是从0开始的。

x86与单片机之间linker和loader的不同：
        对于x86与mcu，linker的作用基本是一样的，但loader有较大不同。在x86中，loader就是从外存(&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1451812.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>别针换别墅：童话的破灭</title><link>http://blog.csdn.net/BuilderChen/archive/2006/12/08/1434734.aspx</link><pubDate>Fri, 08 Dec 2006 13:13:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/12/08/1434734.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1434734.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/12/08/1434734.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1434734.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1434734</trackback:ping><description>        昨天，一位朋友发了一个网址过来，打开一看，说的是一个“别针换别墅”的童话。一个叫艾晴晴的女孩，受了一个外国小伙子的启发，于是决定用一个曲别针开始，通过与陌生人的物物交换，最终换到一栋别墅。经过几天的努力，她已换过了手机、照片、项链等东西，现在已经换到了两瓶价值8000元的名酒。

        真是一个很美好的童话。可惜很快，童话就破灭了。

        在许戈辉的梦工厂节目中，一个小女孩试图用她画的别墅来交换艾晴晴手里的价值8000块的酒，送给她生日的爷爷。她拒绝了。事后她辩解说她怀疑画是工作人员画的。问题是，要是你怀疑的话，你可以要求见见那位小女孩，当面跟她交换呀！网友夜公子说得好，她已经遗忘了童话的美好，已经太懂得计算了。这一刻，我知道童话已经破灭了。

        在我看来，真正完美的童话，是艾晴晴最终换到了别墅，然后又用这座别墅，换回一个漂亮的曲别针。艾晴晴，will you？

 &lt;img src ="http://blog.csdn.net/builderchen/aggbug/1434734.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>PCI卡的WDM驱动开发笔记</title><link>http://blog.csdn.net/BuilderChen/archive/2006/11/09/1375433.aspx</link><pubDate>Thu, 09 Nov 2006 13:32:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/11/09/1375433.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1375433.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/11/09/1375433.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1375433.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1375433</trackback:ping><description>        八、九 月份的时候为一块PCI卡驱动程序增加了bus master DMA和中断服务功能，到现在有一段时间没弄，一些细节有些记不大起来了，赶紧把一些要点记录一下，以免日子久了都忘记了。
&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1375433.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>VHDL经验点滴</title><link>http://blog.csdn.net/BuilderChen/archive/2006/11/02/1362003.aspx</link><pubDate>Thu, 02 Nov 2006 08:33:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/11/02/1362003.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1362003.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/11/02/1362003.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1362003.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1362003</trackback:ping><description>一些学到的或自己总结的VHDL经验点滴，纪录下来，以免以后忘记了。因为有些是自己总结的，肯定有错误或不周之处，欢迎高手指正！内容逐步补充中。

1。如何判断一个process综合结果是组合逻辑还是时序逻辑？
A：一个比较简单的办法是看敏感信号和条件语句的条件，如果是电平触发的，很可能是时序逻辑；如果是边缘触发的，则是时序逻辑。


2。采用二进程状态机比单进程状态机好，把同步时序和组合逻辑分开，有利于综合器优化代码。碰到需要对时钟计数的时候，可能会觉得用单进程方便点，如果要用双进程结构的话，可以把计数放在同步进程里，给出一个计数值，而组合进程用这个值作为输入，这样保证组合进程仍然是组合逻辑（里面不含边沿触发条件）。


&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1362003.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>第一个VHDL程序</title><link>http://blog.csdn.net/BuilderChen/archive/2006/09/29/1306797.aspx</link><pubDate>Fri, 29 Sep 2006 15:30:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/09/29/1306797.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/1306797.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/09/29/1306797.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/1306797.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1306797</trackback:ping><description>        今天挺开心，偶的第一个VHDL的模块完成了。这是一个使用Altera的CycloneII EP2C20F256的FPGA，通过HPI接口向TI的DSP(TMS320DM642)内存中写入数据的模块，实现了HPI的控制时序控制，支持地址自增模式，
，时序仿真和实际运行时的逻辑分析都令人满意。
        为了写一个32位的数据到DSP内存中，需要写4次HPI寄存器，因为HPI使用16位接口，两次将目标地址写入PICA寄存器，另两次将数据内容写入 HPID寄存器中（每次16位），才可以完成一个32位数据的写入。模块中使用了两个PROCESS，辅助进程实现写HPI寄存器的时序，供主进程使用；主进程则控制辅助进程写4次HPI寄存器，以完成一个32位数据的写入。
        辅助进程是一个状态机，大概转换过程是：就绪状态 =&gt; 步骤1 =&gt; ... =&gt; 步骤n =&gt; 完成状态。当控制信号被拉高时，辅助进程即开始工作，完成后停止在完成状态。只有主进程将控制信号拉低，辅助进程才回到就绪状态，然后控制信号再被拉高时，开始下一次操作。这是为了防止控制信号被一直拉高，而辅助&lt;img src ="http://blog.csdn.net/builderchen/aggbug/1306797.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>几种建立http-tunnel的方法</title><link>http://blog.csdn.net/BuilderChen/archive/2006/07/07/887979.aspx</link><pubDate>Fri, 07 Jul 2006 08:48:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/07/07/887979.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/887979.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/07/07/887979.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/887979.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=887979</trackback:ping><description>基本概念不多解释了，直入主题。GNU HTTP Tunnel (http://www.nocrew.org/software/httptunnel.html)是一个开源的http-tunnel项目，包括了tunnel server(hts命令)和tunnel client(htc命令)，有(x)nix和windows版本。我们就用它来建立自己的tunnel。
1。静态tunnel。
        http-tunnel是一个完全透明的通道，直接将你的连接forward给目标服务端口，因此当你连接tunnel的本地侦听端口时，就相当于直接连接到目标服务端口。例如你要建立一条可以访问外部POP3服务器的隧道，可以建立如下连接：

                    htc  ------------&gt; http proxy ------------------------&gt; hts ------------------------------&gt; POP3 serve
        (localhost:8888)             (proxyhost:3128) &lt;img src ="http://blog.csdn.net/builderchen/aggbug/887979.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>一个不错的matlab入门教程</title><link>http://blog.csdn.net/BuilderChen/archive/2006/06/20/816413.aspx</link><pubDate>Tue, 20 Jun 2006 16:52:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/06/20/816413.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/816413.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/06/20/816413.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/816413.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=816413</trackback:ping><description>一个不错的matlab入门教程：
http://libai.math.ncu.edu.tw/bcc16/B/matlab/index.shtml&lt;img src ="http://blog.csdn.net/builderchen/aggbug/816413.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>在Windows CE增加自定义中断处理</title><link>http://blog.csdn.net/BuilderChen/archive/2006/05/25/754639.aspx</link><pubDate>Thu, 25 May 2006 14:03:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/05/25/754639.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/754639.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/05/25/754639.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/754639.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=754639</trackback:ping><description>基于S3C2410，Windows CE4.2，BSP是smdk2410。WinCE的中断处理是三个映射关系：

ISQ --&gt; Interrupt ID(逻辑中断号)  --&gt; Event对象。

当中断发生时，ISR（中断服务例程）返回该中断号对应的逻辑中断号，然后尽可能快地返回；随后CE就set该逻辑中断号对应的Event对象（如果有的话），以唤醒在该Event等待的IST（中断服务线程），大部分工作都是由IST来完成。一般来说IST是存在驱动程序里，单其实放在普通的应用程序里也可以，尤其是对应只有一个应用程序使用的特殊硬件更方便。因为对应CE来说其实驱动程序也只是一个普通的DLL，也是运行在用户空间。

为了简单起见我们就直接修改BSP包的ISR部分，IST也直接在应用程序里实现，步骤如下：

1、在BSP的oalintr.h里定义自定义中断的逻辑中断值，如：
            #define SYSINTR_MYINTR  (SYSINTR_FIRMWARE + 10)

2、修改KERNEL\HAL\cfw.c中的以下三个函数，增加对自定义中断的&lt;img src ="http://blog.csdn.net/builderchen/aggbug/754639.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>BuilderChen</dc:creator><title>继续blog，继续coding......</title><link>http://blog.csdn.net/BuilderChen/archive/2006/05/17/742573.aspx</link><pubDate>Wed, 17 May 2006 13:29:00 GMT</pubDate><guid>http://blog.csdn.net/BuilderChen/archive/2006/05/17/742573.aspx</guid><wfw:comment>http://blog.csdn.net/builderchen/comments/742573.aspx</wfw:comment><comments>http://blog.csdn.net/BuilderChen/archive/2006/05/17/742573.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/builderchen/comments/commentRss/742573.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=742573</trackback:ping><description>四月份换了份工作，有一段时间没有写blog了。新公司做ARM平台的开发，目前用的是uCOS，有打算以后迁移到WinCE上，所以目前正研究把WinCE在S3C2410上跑起来。
&lt;img src ="http://blog.csdn.net/builderchen/aggbug/742573.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>