EDN首页   博客首页

最新日志

发表于:2008-5-5 16:35:08
标签:无标签

0

关于C6000的引导过程的一点认识

转载自华清远见嵌入式论坛,发帖者:GuanhuaYang

关于C6000的引导过程的一点认识

我是这样认为的(有不对的希望大家指正):
CPU复位后首先把系统程序加载到内部RAM或者外部高速RAM中,然后在RAM中运行,
bootloader就是完成加载的过程。C6000有3钟引导方式(1)无引导(2)ROM引导 (3)主机引导
我只用过ROM引导。ROM引导加载过程:(1)当CPU的Reset引脚处于低电平状态时,BOOTMODE的引脚状态根据预设设定(我的目标版上面有这几个开关可设置),RESET信号处于上升沿的时候,相应加载方式启动。(2)ROM加载方式是通过DMA控制器,将外部ROM的一段固定大小的代码复制到内部RAM中(加载时CPU处于stall状态),对于不同型号芯片,复制的代码大小不同。67X的应该是1KB(3)加载完毕后,CPU开始从0地址执行。
想 象一下,有的程序都很大,1K是不能解决问题的,所以,一般在0地址处建立一个叫做“bootloader”的段(代码小于1KB),这一小段程序也叫 “引导程序”,上电或者重启后首先执行它,完成将其余程序(真正完成用户要求算法的程序)加载,然后跳转到主程序入口地址运行。举例:
我的目标版FLASH地址为0x9000 0000, 在完成源代码编写,编译,连接后生成*.out文件,通过hex6x.exe工具转换成*.hex文件(16进制数据文件),然后使用Flashburn工具烧写到外部Flash Rom中。程序boot.asm ,功能:完成数据大小为FLASH_SIZE 的数据搬移,源地址FLASH_START,目的地址RAM_START,搬移结束后跳转的主程序入口点_c_int00运行FLASH_START .set   0x90000400  ;DMA已经加载可1KB(400H),所以地址从0x90000400开始
RAM_START   .set   0x400
FLASH_SIZE  .set   0x40000  
    .ref _c_int00
    .def start
.sect ".bootload"
start:
mvkl FLASH_START,A4
mvkh FLASH_START,A4

mvkl RAM_START,B4
mvkh RAM_START,B4
    mvkl FLASH_SIZE,B5
    mvkh FLASH_SIZE,B5
    zero A1
loop
    ldw  *A4++,B0
    nop 5
    stw  B0,*B4++
    add  1,A1,A1
    cmplt A1,B5,B0
    nop
[B0] b loop
    nop   5          
    b _c_int00
    nop 5

但是我发现我接手的一个C6201的项目,并没有bootloader,查了下书:
...
但是对于不同的芯片,加载过程还有不同。
对于C620x/C670x,DMA从CE1空间拷贝64K数据到地址0处
对于C621x/C671x/C64x,EDMA从CE1空间拷贝1K数据到地址0处。
...
就是说只有对于C621x/C671x/C64x,才需要bootloader?

点击此处查看原文 >>

系统分类: DSP   |    用户分类:    |    来源: 整理

评论(0) | 阅读(222)
发表于:2008-4-29 10:43:41
标签:DSP  volatile  keyword  

0

关于关键字 volatile

来自CCS的help:
The compiler analyzes data flow to avoid memory accesses whenever possible. If you have code that depends on memory accesses exactly as written in the C/C++ code you must use the volatile keyword to identify these accesses. A variable qualified with a volatile keyword is allocated to an uninitialized section (as opposed to a register). The compiler does not optimize out any references to volatile variables.

In the following example, the loop waits for a location to be read as 0xFF:

unsigned int *ctrl;
while (*ctrl !=0xFF);

In this example, *ctrl is a loop-invariant expression, so the loop is optimized down to a single memory read. To correct this, define *ctrl as:

volatile unsigned int *ctrl;

Here the *ctrl pointer is intended to reference a hardware location, such as an interrupt flag.

来自软工吧论坛
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。

在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:
以下内容为程序代码:
short flag;
void test()
{
 do1();
 while(flag==0);
 do2();
}

这段程序等待内存变量flag的值变为1之后才运行do2()。变量 flag的值由别的程序更改,这个程序可能是某个硬件中断服务程序,例如如果某个按钮按下的话,就会对DSP产生中断,在按键中断程序中修改flag为 1,这样上面的程序就能够得以继续运行。

但是,编译器并不知道flag的值会被别的程序修改,因此在它进行优化的时候,可能会把flag的值先读入某个寄存器,然后等待那个寄存器变为 1。如果不幸进行了这样的优化,那么while循环就变成了死循环,因为寄存器的内容不可能被中断服务程序修改。为了让程序每次都读取真正flag变量的值,就需要定义为如下形式:

volatile short flag;

需要注意的是,没有volatile也可能能正常运行,但是可能修改了编译器的优化级别之后就又不能正常运行了。因此经常会出现debug版本正常,但是release版本却不能正常的问题。所以为了安全起见,只要是等待别的程序修改某个变量的话,就加上volatile关键字。

点击此处查看原文 >>

系统分类: DSP   |    用户分类:    |    来源: 整理

评论(0) | 阅读(255)
发表于:2008-4-9 15:23:41
标签:移位  shift  

1

关于移位运算

移位(bit shifting)
移位只对整数运算起作用。通过移位进行2的整数次幂的乘除法要比直接进行乘法运算快很多(当然比除法运算更快),这是一个基本常识。
为了理解它的用法,考虑下面这几个公式:

x << y = x * 2 y
x >> y = x / 2 y

Andr LaMothe在他的《Tricks of the Game Programming Gurus》一书中大量的阐述了这方面的内容。在某些情况下,这种方法可以带来巨大的回报。思考下面的这段简化了的代码:

i* = 256;

与之对应的

i = i << 8;

在逻辑上它们完全相同。对于这个简单的例子,编译器很可能会自动将第一条语句转换为第二句,但是当你进行更复杂的计算时(比如i = i << 8 + i << 4等于i *= 272),编译器可能就无能为力了。

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 整理

评论(0) | 阅读(302)
发表于:2008-3-6 17:05:13
标签:cadence  capture  

0

Cadence 学习笔记 - Capture CIS 篇 (三)

用表格做元件

SPB15.7中增加了用表格来做原理图元件的功能,对于引脚数较多的元件,这是个比较快捷方便的功能,我试了一下这个功能,下面讲下心得。

1,表格支持拷贝和粘贴,单个拷贝时,虽然框似乎没有被选中,但仍能粘贴。
2,在有下拉选择的列(比如type)中,可以通过选中若干个框,然后统一输入同一类型。
3,Position的排列,对于up和down,都是从左到右排列,对于left和right,都是从上到下排列。而不是通常习惯的逆时针排列。
4,无法在引脚中插入空行,表格中的空行将被忽略。
5,一旦点了save生成元件后,就再也无法回到表格中编辑了。即,这个过程是不可逆的。

如果要用的更爽,建议用excel来做,按照表中的列在excel中做个相同的,可以利用excel强大的排序,拷贝等功能,然后直接把表格粘贴到capture CIS的表格编辑器中。而且还可以把excel表格保存已便于以后修改。

总的来说,这个功能还是挺实用,但是可以做的更好,要是能支持用空格分开引脚就好了,毕竟很少有器件的引脚密密麻麻的挤在一起的。

点击此处查看原文 >>

系统分类: PCB   |    用户分类:    |    来源: 原创

评论(0) | 阅读(532)
发表于:2008-3-6 8:43:45
标签:EDIF  

1

关于EDIF的片言只语

EDIF - Electronic Design Interchange Format

-----------------WiKipedia---------------------------

EDIF was an attempt to solve the problem stemmed from considerable competition among companies in electronic design automation (EDA) industry. These companies produced their own electronic design databases which were highly proprietary. When customers needed to transfer data from one system to another, it was necessary to write translators from one format to other. As the number of formats (N) multiplied, the translator issue became an N-squared problem.

EDIF originated from a discussion of three men, who envisioned a common, neutral format from which all the other formats could be derived, and began work on this neutral format. In November 1983 this effort grew into the EDIF Steering Committee, consisting of representatives of Daisy Systems, Mentor Graphics, Motorola, National Semiconductor, Tektronix, Texas Instruments and the University of California, Berkeley.


-----------------EDACN论坛---------------------------
EDIF 分为EDIF netlist和EDIF schematic. EDIF netlist是描述电路网表,在Tanner的L-edit里面可以作为数字电路Place and Route的一个输入文件,而EDIF schematic 则是描述电路图的。

------------------21IC论坛--------------------------
就是一个网表文件,synplify综合后会生成这样一个网表文件,当然其他的工具也可以。edif网表文件可以用来仿真,也可以用来布线。

muxpusII可接直接调入这一网表文件,进行fitter……

-------------------ALTERA官方网站-------------------------
EDIF Input File (.edf) Definition

An EDIF version 2 0 0 netlist file (with the extension (.edf), generated by any standard EDIF netlist writer. The Quartus II software also supports EDIF Input files with the extensions (.edif) or (.edn).

When you compile an EDIF Input File, the Compiler uses one or more Library Mapping Files (.lmf) to map cells in an EDIF Input File to corresponding Quartus II logic functions, including Library of Parameterized Modules (LPM) functions, as well as to user-defined functions.

All logic functions in an EDIF Input File must be mapped to the Quartus II software logic functions in a Library Mapping File (.lmf). If you wish to use a function that is not mapped in a Altera-provided LMF, you must create a customized LMF. You can map EDIF cells to Altera-provided functions or to any design file created with the Quartus II software.

The Compiler processes EDIF Input Files automatically, generating a Compiler Netlist Extractor (.cnf) file for every cell in an EDIF Input File. You can also specify EDIF Input settings to help the Compiler interpret EDIF Input Files by specifying optional LMFs and non-default VCC and GND signal names.

A single EDIF Input File can be used to define all logic in a project, or can be incorporated at any hierarchy level in a hierarchical project.

The Quartus II software automatically creates a Block Symbol File (.bsf) that represents an EDIF Input File when you open the file in the Text Editor and create the default symbol for the current file. This symbol and the logic it represents can be incorporated into a Block Design File (.bdf).

You can also use EDIF Input File logic in an AHDL Text Design File (.tdf) by including a Function Prototype and inserting an instance of the function into the TDF.

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 整理

评论(2) | 阅读(684)
发表于:2008-2-29 16:18:41
标签:无标签

0

Cadence 学习笔记 - Allegro 篇 (二)

针对设计文件(*.brd)上只移动Symbol的「PIN」方法

转自莎益博(古怪的名字)的论坛

图就不贴了,想看图就点击上面的连接。

一、摘要:
Allegro的初始设置,是不能移动设计文件(*.brd)中Symbol的「PIN」。

可以通过以下方法对单个Symbol的「PIN」进行移动

二、操作方法:

1、 从菜单,选择「Edit 」-「Properties…」。<参照:图1-①,②>
2、 在控制面板的「Find」栏选择「All Off」,并只打开「Symbols」。<参照:图2-③,④>
3、 选择想要使「Pin」移动的Symbol 。(选择后,如「图3」一样高亮显示。)
4、 在「Edit Property」对话框内的「Available Properties」栏内选择「Unfixed_Pins」,「Apply」-「OK」结束。<参照:图4-⑤~⑧>
5、 从菜单选择「Move」。<参照:图5>
6、 在控制面板的「Find」栏选择「All Off」,并只打开「Pins」。<参照:图6>
7、 在设计画面上,单击移动对象的Pin移动到任意的位置。<参照:「图7」表示Symbol Pin的移动途中。>

点击此处查看原文 >>

系统分类: PCB   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(708)
发表于:2008-2-22 15:07:00
标签:cadence  capture  

0

Cadence 学习笔记 - Capture CIS 篇 (二)

今天碰到一个问题,尚未解决:

对于多个part组成的compent,比如双运放,其电源脚如何设置?在Protel中可以置为一个part上有电源脚而另一个没有,但是Capture中好像不行,2个part都必须有,这样的话在图纸中放置这个双运放,每个part都会有电源脚,而且每个part的电源脚都必须接在一起,否则出网络表时会出错。原理上来说没啥不对,不过怎么看着那么别扭~

必须要傻傻的把电源脚都连起来?


点击此处查看原文 >>

系统分类: PCB   |    用户分类:    |    来源: 原创

评论(1) | 阅读(553)
发表于:2008-2-21 13:20:31
标签:PCB  Allegro  Cadence  

0

Cadence 学习笔记 - Allegro 篇 (一)

以下开始记录在Cadence的学习过程中碰到的问题及解决方法,或心得或归纳。

以SPB15.7为准,分 Capture CIS 和 Allegro 两部分。

=================================================

Allegro 名词解释

Groups

是将 1 个或1 个以上的对象设定为同一群组

Comps

Component是带有零件序号(RefDes)Allegro 零件

Symbols

是指所有板中的 Allegro 零件,不管其是否带有零件序号(RefDes)

Functions

是指 Component 中的 Gate,例如:排阻中的一个电阻

Nets

是指 1 条讯号线

Pins

是指零件脚

Vias

是指贯孔、贯穿孔或称导通孔

Clines

是指带有电气特性的走线 ( 其范围是 Pin To PinPin To ViaVia To Via 之间的 1 条走线 )

Lines

是指没有电气特性的一般线段,例如:板外框、

Shapes

是指任意多边形的 Shape、空心的长方形及实心的长方形

Voids

是指任意多边形 Shape 中的挖空部份

Cline Segs

Cline Segment 是指 Cline 1 条没有转折的线段

Other Segs

Line Segment 是指 Line 1 条没有转折的线段

Figures

是指图形符号,例如:钻孔符号

DRC Errors

是指出违反设计规范的位置及其相关信息

Text

是指文字

Ratsnests

是指鼠线 ( 即讯号线未完成的联机关系 )

Rat Ts

Ratsnest T-point 是指 T 点,为呈 T 型的Ratsnest



点击此处查看原文 >>

系统分类: PCB   |    用户分类:    |    来源: 整理

评论(1) | 阅读(777)
发表于:2008-2-21 13:18:04
标签:cadence  capture  

0

Cadence 学习笔记 - Capture CIS 篇 (一)


以下开始记录在Cadence的学习过程中碰到的问题及解决方法,或心得或归纳。

以SPB15.7为准,分 Capture CIS 和 Allegro 两部分。

=================================================

关于update  cache

如果画原理图过程中,修改了库元件,放置修改后的元件会出现如下警告:

Part xxx is out of date with respect to the design cache.Use Upate Cache to synchronize the part in the cache with the library.

但是这个update cache在哪里呢?菜单里的这个命令是虚的,看了帮助才知道。

必须到project manager窗口中的design cache中找到这个part,右键选择update cache才行。或者直接cleanup cache也行。


点击此处查看原文 >>

系统分类: PCB   |    用户分类:    |    来源: 原创

评论(0) | 阅读(704)
发表于:2008-2-15 8:29:06
标签:allegro  orcad  pcb  

2

CONCEPT HDL和CAPTURE CIS的区别

整理自PCBBBS论坛

[讨论]CONCEPT HDL和CAPTURE CIS的区别

之前一直用PROTEL,现在开始学习CADENCE,前几天装了CADENCE SPB 15.7。学习中有几个问题不明。
SPB中包含了CONCEPT HDL和CAPTURE CIS,不知这两个原理图设计软件的主要区别在哪里?
他们的原理图库可以共用吗?
在CONCEPT HDL中,工具栏的的ANOLOG器件库系统是否自带?若没有如何获取并载入?

---HsuMeiFan2005---
对PCB 布线来说:
Concept HDL 是原先的Allegro的原理图工具,是主要妻子。
Capture (CIS)是原先的OrCAD原理图工具。 它的PCB工具是Layout。
Cadence 买入 Orcad之后,把 Orcad Capture (CIS) 作为一件 除了Concept HDL以外的原理图工具,是二奶。
他们的原理图库是不可以共用。
Concept HDL也  自带很多 器件库。
Concept HDL是为高端的用户。

---ddwu---
ALLEGRO的Part Developer提供了这两种库的互转!

---玩玩---
总的来说,Concept和Allegro配合更好,原理图库不可共用,但可以转换。
在原理仿真上它们的库有一部份是共用的(模型),两者的操作性上都可以,但Concept更好主要是可定制,但可定制就意味着上手难些,Concept掌握后用起来很方便,但通用性很差,难以转换使其它软件可用,autocad也不支持。capture是应用最广泛的EDA软件(全世界使用率的NO.1),操作性虽差了点,但没有Concept难以转换的缺陷,其它功能并不比Concept少,尤其是可以转换到Mentor和PADS,当然做PCB切换到Allegro是其最强的,用它自带的 Layout Plus的可能不多,它的PCB功能很弱,当然用其capture->Allegro或Capture->POWERPCB就强了。

---dcd---
CONCEPT HDL 做原理图,ALLEGRO做PCB,原配做搭档,肯定是最好的两个EAD.

但是很不好的是CONCEPT HDL 做原理图想用好就不是那么容易的事情,图纸也不如ORCAD美观,用的人更是少得看不到。(我认识的人中是没有会用的)。调出的元件还要是指定的值(VALUE).很多还要自已做,做起来也挺复杂的.

点击此处查看原文 >>

系统分类: PCB   |    用户分类:    |    来源: 整理

评论(0) | 阅读(1126)
2下一页总共 , 当前 /