### C671x Flash烧写流程详解
#### 一、引言
在嵌入式系统开发中,DSP(Digital Signal Processor)作为一种专门用于信号处理的微处理器,因其高效的处理能力而广泛应用于通信、音频、视频等多个领域。TI(Texas Instruments)作为DSP领域的领军企业,其C6000系列DSP更是受到众多开发者的青睐。本文将详细介绍TI C6713 DSP的Flash烧写流程,旨在帮助开发者更好地理解和掌握这一过程。
#### 二、准备阶段
在进行Flash烧写前,我们需要确保已经完成以下准备工作:
1. **已经使用RAM调试好的程序**:这是烧写前的一个必要条件,意味着程序已经在RAM中调试通过,可以正常运行。
2. **原有的CMD文件**:CMD文件用于定义链接器如何链接程序,包括代码段、数据段等的分配。为了进行Flash烧写,需要准备一个适合Flash烧写的CMD文件。
#### 三、修改与编译
接下来是具体的烧写流程步骤:
1. **加入二次Boot程序并替换CMD文件**:为了实现从Flash启动,我们需要在原有程序中加入二次Boot程序,并替换原有的CMD文件。二次Boot程序主要用于处理从Flash读取主程序的过程。需要注意的是,如果原程序中使用了中断表,则需要保持中断表不变。
2. **重新编译生成.OUT文件**:修改后的源代码需要重新编译,生成适用于Flash烧写的.OUT文件。编译过程中,需要确保所有必要的配置正确无误,例如选择正确的编译器选项和目标设备等。
#### 四、二次Boot程序解析
二次Boot程序是烧写流程中的关键部分,下面详细解析其中的一部分代码示例:
```assembly
;========boot_c671x.s62========
;
.title "Flash boot up utility"
.option D, T
.length 102
.width 140
; global EMIF symbols defined for the c671x family
.include boot_c671x.h62
.sect ".boot_load"
.global_boot
.global_text_size
.global_text_ld_start
.global_text_rn_start
.ref_c_int00_boot:
;************************************************************************
;* DEBUG LOOP - COMMENT OUT B FOR NORMAL OPERATION
;************************************************************************
zero B1
_myloop: ; [!B1] B_myloop
nop 5
_myloopend:
nop
;************************************************************************
;* CONFIGURE EMIF
;************************************************************************
;****************************************************************
;* EMIF_GCTL = EMIF_GCTL_V;
;****************************************************************
mvkl EMIF_GCTL, A4
|| mvkl EMIF_GCTL_V, B4
mvkh EMIF_GCTL, A4
|| mvkh EMIF_GCTL_V, B4
stw B4, *A4
;****************************************************************
;* EMIF_CE0 = EMIF_CE0_V
;****************************************************************
mvkl EMIF_CE0, A4
|| mvkl EMIF_CE0_V, B4
mvkh EMIF_CE0, A4
|| mvkh EMIF_CE0_V, B4
stw B4, *A4
;****************************************************************
;* EMIF_CE1 = EMIF_CE1_V (setup for 8-bit async)
;****************************************************************
mvkl EMIF_CE1, A4
|| mvkl EMIF_CE1_V, B4
mvkh EMIF_CE1, A4
|| mvkh EMIF_CE1_V, B4
stw B4, *A4
;****************************************************************
;* EMIF_CE2 = EMIF_CE2_V (setup for 32-bit async)
;****************************************************************
mvkl EMIF_CE2, A4
|| mvkl EMIF_CE2_V, B4
mvkh EMIF_CE2, A4
|| mvkh EMIF_CE2_V, B4
stw B4, *A4
```
此段代码主要实现了以下几个功能:
- 设置一个Debug循环,可用于测试目的。在实际部署时应注释掉这部分代码。
- 配置EMIF(External Memory Interface),为后续读取Flash做准备。
- `EMIF_GCTL`:设置全局控制寄存器。
- `EMIF_CE0`、`EMIF_CE1`、`EMIF_CE2`:分别配置CE0、CE1、CE2芯片选择寄存器,用于设定不同接口的工作模式。
#### 五、总结
本文详细介绍了TI C6713 DSP的Flash烧写流程,包括准备工作、修改与编译以及二次Boot程序的具体实现。通过对这些步骤的理解和实践,开发者可以更加高效地完成DSP程序的Flash烧写工作,进而推动项目的顺利进展。在未来的工作中,我们还可以进一步探索更多高级的烧写技术和优化方法,以满足不断发展的需求。
1