EDN首页   博客首页

1

关于投票
VC33及常用外设封装库

这是我做DSP+CPLD的那块板子的一些器件封装,我做了一下总结,包括DSP、SRAM、FLASH及其他器件等等,有的朋友苦于DSP的封装没处下,这里提供大家一个平台。

rar

系统分类: DSP
用户分类: DSP技术
标签: VC33 封装
来源: 原创
发表评论 阅读全文(503) | 回复(1)

1

关于投票
VC33的流水线操作透析

VC33有两个特点:流水线操作、并发I/O和CPU操作。

流水线操作是体现VC33高性能的主要特征。任何一条指令都要经过取指令、译码、读操作数、执行等4个过程,对同一条指令不能同时进行上述4个过程的操作,但可以对不同的指令同时进行这4种操作,即每一个CPU周期中,有4条指令分别处于取指令、译码、读操作数和执行阶段。这种作业方式就称为流水线操作。流水线作业不仅提高了运算和处理速度,同时也减少了总线拥挤的现象,提高了CPU的吞吐量。

VC33流水线结构的四个主要单元和他们的功能如下:

(1)取指令单元(F):从寄存器中取指令字并更新程序计数器(PC)。

(2)译码单元(D):译码指令字并产生地址。而且,在间接寻址中译码单元控制ARn寄存器的修改,当发生栈操作时(PUSH/POP)修改栈指针。

(3)读操作数单元(R):从存储器或寄存器中读操作数。

(4)执行单元(E):从存储器或寄存器中读出操作数后,执行相应的操作,并向目的地址写结果。

点击看大图

上面这个图说明了流水线的结构,其中X、Y、W、Z代表具体的指令。我们从图中可以看出,在第m个周期,这四个阶段完全处于并行状态,即完全重叠在一起,从而进入了正常的流水线作业过程。

流水线操作中,DMA可能也要工作,这时,优先级顺序由高到低为:执行、读操作数、译码、取指令、DMA。尽管DMA控制器的优先级最低,但可以通过合适的数据结构使DMA与CPU的冲突最少甚至消除,这时因为DMA有它自己的数据和地址线。

我们可以看到,流水线操作真正工作是在第m个周期,即完全重叠。但是如果遇到了跳转和资源竞争等特殊情况,那么流水线操作就有可能不能完全处于重叠,这种冲突往往导致一个或几个CPU周期中没有任何一条指令处于被执行的状态。

那么流水线都有哪些冲突呢?我们应该怎样来避免呢??我们以后再讨论。

 

系统分类: DSP
用户分类: DSP技术
标签: VC33 流水线
来源: 原创
发表评论 阅读全文(785) | 回复(0)

1

关于投票
VC33的BootLoader详解

由于VC33的资料很少,将VC33的BootLoader讲得很详细的几乎没有,大家很多看了的都不明白怎么回事,我将介绍VC33 BootLoader的详细步骤,大家按照这个步骤来就OK了^_^。

我们的目的是自启动点亮LED灯,那么我们得有两个工程文件,一个为led.mak,另一个为flash.mak,这里可以视flash工程文件为一个工具,仅仅将led工程中的某种文件导入到flash中,然后掉电重启后由flash装入RAM中运行,实现自启动。所以我们需要做的只是要生成某种文件即bin文件。先说明一下大体的步骤。

1、在led工程中编写hex.cmd文件;

2、通过hex30工具将.out文件转化为.hex文件;

3、通过hexbin工具将.hex文件转化为.bin文件。

下面给出具体的操作:

第一步:我们首先要明白hex.cmd文件里面包含哪些内容,我们应该怎么来写。下面是一个完整的hex.cmd文件。

led.out                                    //输入coff文件
-o led.hex                               //输出hex文件
-map led.mxp                         //输出mxp文件
-i                                             //设置为Intel格式的hex文件
-boot                                      
-bootorg 0
-cg 10f8h                               //设置全局控制寄存器
-romwidth 8                           //ROM字宽
-memwidth 8                          //Flash字宽
-e 0x8001af                            //程序入口地址

可以看出,输入的是led.out文件,输出的文件有led.hex和led.mxp。这里几乎是固定的写法,我们仅仅需要做的是查看程序的入口地址,然后改过来就可以了。

如何查看程序入口地址?

在led工程文件中,执行Project—>Option—>linker,输入生成的map文件名led.map

点击看大图

接下来,我们led工程中打开led.map文件

点击看大图

可以看到,led程序的入口地址为80002e,所以只需要将上述hex.cmd中最后一项改为-e 80002e就行了。

第二步:将out文件转化为hex文件。

使用命令提示符,输入命令进行如下操作:

点击看大图

这时我们看led工程中已经生成了led.hex文件了。

第三步:将hex文件转化为bin文件。

接着第二步输入如下命令:

点击看大图

回车后:

点击看大图

这时我们看到已经生成了led.bin文件了。

第四步:最后一步就是将bin文件烧到Flash中,以实现自启动。

下面的一个工程文件包含一个完整的Flash烧写程序,Flash型号为29LV800BA,如果大家的Flash型号也是这个或兼容的,可以下载运行,当出现“Please Input your file:”的提示时输入“led.bin”,烧写完毕出现提示“OK”。

rar

这样就将VC33的BootLoader过程详细做了一下介绍,有什么问题给我留言。

系统分类: DSP
用户分类: DSP技术
标签: VC33 BootLoader
来源: 原创
发表评论 阅读全文(1162) | 回复(0)
总共 , 当前 /