DSP2812启动过程
- 格式:doc
- 大小:4.75 MB
- 文档页数:32
第1章 TMS320F2812/2810综述1.1 TMS320F28x系列DSP的特点z高性能静态CMOS技术-150MHZ振荡频率(6.67ns指令周期)-低功耗设计(1.8V内核@135MHZ, 1.9V内核@ 150MHZ, 3.3V的I/O引脚)- 3.3V的Flash电压z JTAG边界扫描功能z高性能32位CPU-16×16位和32×32位乘加操作-哈佛总线结构-快速中断响应和处理-统一的存储器规划-4M的线性程序地址-4M的线性数据地址-高效的代码(C/C++和汇编语言)-TMS320F24x/LF240x处理器源代码兼容z片内存储器-Flash(闪存):可达128K×16的Flash(4个8K×16和6个16K×16的区间)-ROM(只读存储器):可达128K×16的ROM-1K×16的OTP(一次性可编程)ROM-L0和L1:两块4K×16的单存取RAM(SARAM)-H0:1块8K×16的SARAM-M0和M1:两块1K×16的SARAMz引导ROM(4K×16)-软件引导模式-标准数学表z外部接口(仅2812)-可达1M的存储器空间-可编程的等待状态-可编程的读/写选通定时-三个独立的片选z时钟和系统控制-支持动态改变锁相环(PLL)的参数值-片内振荡器-看门狗定时器模块z外围中断扩展功能可支持45个外围中断z128位安全密码钥匙/锁-保护Flash/ROM/OTP和L0/L1存储器-防止固件反向工程z三个32位CPU定时器z电机控制外围-两个事件管理器(EV A和EVB)-和240xA兼容z串行接口外围-串行外围接口(SPI)-两个串行通信接口(SCI),标准UART接口-增强型CAN总线(eCAN)-SPI模式的多通道缓冲串口(McBSP)z12位AD转换器,16个通道-2×8通道的输入多路选择器-两个采样保持器-单/同时转换模式-快速转换时间:80ns/每秒12.5兆次转换z可达56个独立可编程的多路通用输入/输出(GPIO)管脚z先进的仿真特性-分析和断点功能-硬件实时调试z支持工具包括-ANSI C/C++ 编译/汇编/连接器-支持TMS320C24x/240x指令-代码设计师工作室(CCS)IDE平台-基于DSP的基本输入输出系统(DSP/BIOS)-JTAG扫描控制器-第三方数字化电机控制算法z低功耗模式和功率节省-支持IDLE、STANDBY、HALT模式-可以关断单个外围时钟z封装-179脚GHH MicroStar BGA(2812)-176脚PGF LQFP(2812)-128脚PBK LQFP(2810、2811)z温度范围-A:-40℃到85℃(GHH、PGF、PBK)-S:-40℃到125℃(GHH、PGF、PBK)图1.1为TMS320F2812的176脚PGF LQFP管脚封装图。
TMS320F28121 上电注意1)TMS320LF24xx:TPS7333QD,5V变3.3V,最大500mA2)JTAG中有四条地线,和P1(哈丁48输入ADC)中5v的地是联通的说明是由5v 供电的3)JTAG中的两条TCK是相同的4)P1中的每个输入有一个备用的5)电源连接后一定要检测,确保正、负极正确连接6)上电后不用示波器或者万用表点测,否则极易短路,如需,则上电之前用线焊上连出,将示波器探头连好7)送电之前一定用万用表测量电源和地是否短路8)连线务必焊接牢固,防止虚焊,否则易有过冲9)确保连出的线头不会短路,操作过程中不会互相碰触10)所有线头挂锡,否则相连太近的线头毛刺易短路10)仿真器不能热插拔11)加入的信号一定要确保在板子的额定之内,如AD电压不超过3V等2 仿真器驱程安装和ccs设置仿真器型号:USB2.0操作系统:WIN98,WINNT,WIN2000CPU:C2000,C5000,C6000口地址:0x240安装过程如下:1.首先安装USB驱动,与安装其它硬件类似。
2. 安装其它程序,运行SETUP即可。
1)仿真器作用:主要是通过仿真器将DSP开发板与电脑连接,这样所编写的程序才能写入DSP芯片,以及在计算机上通过软件(CCS软件)调试DSP开发板,没有仿真器几乎做不了什么(高手可能出外),现在仿真器一般都是USB接口的,比如XDS510DSP仿真器等等,可以对各种系列DSP使用。
开发板按照板上的DSP芯片信号又分为:2000系列(一般自动控制用),5000系列(一般数字信号处理用),6000系列(一般图像处理用)2)USB 仿真器的安装及设置(1)点击光盘中文件Techusb USB 仿真器安装“USB——SETUP.EXE”.(2)点击下一步;(3)点击下一步;(4)USB驱动安装了,再检测USB与计算机连接是否正常,点击“USB20EMURST.EXE”按“RESET(R)”键,出现如上图标则表示正确。
实验1 :CCS环境下的程序设计一.实验目的1.掌握Code Composer Studio 3.3的配置过程;2.掌握DSP开发系统及计算机与目标系统的连接方法;3.了解Code Composer Studio 3.3软件的操作环境和基本功能,了解TMS320F2812软件开发过程;4.学习用标准C语言编制程序,了解常用的C语言程序设计方法和组成部分;5.熟悉使用软件仿真方式调试程序。
二.实验设备1.PC机一台,操作系统为WindowsXP;2.SEED-DEC2812开发板、XDS510PLUS仿真器。
三.实验内容应用CCS集成开发环境在软件仿真方式下,建立、配置、编译、下载和运行一个简单工程:应用C语言编写程序,完成z=x+y功能,并且通过“Memory”窗口观察x、y、z 值的变化。
四.实验原理1.开发TMS320C28xx应用系统一般需要以下几个调试工具来完成:软件集成开发环境(Code Composer Studio 3.3):完成系统的软件开发,进行软件和硬件仿真调试。
它也是硬件调试的辅助手段。
仿真器(XDS510PLUS等):实现硬件仿真调试时与硬件系统的通信,控制和读取硬件系统的状态和数据。
开发板(DEC-F2812等):提供软件运行和调试的平台和用户系统开发的参照。
2.Code Composer Studio3.3主要完成系统的软件开发和调试。
它提供一整套的程序编制、维护、编译、调试环境,能将汇编语言和C语言程序编译连接生成COFF (公共目标文件)格式的可执行文件,并能将程序下载到目标DSP上运行调试。
3.用户系统的软件部分可以由CCS建立的工程文件进行管理,工程一般包含以下几种文件:源程序文件:C语言或汇编语言文件(*.ASM或*.C)头文件(*.H)命令文件(*.CMD)库文件(*.LIB)五.实验步骤1.实验准备:由于本实验采用软仿真模式,可以不用连接仿真器及开发板。
TMS320F2812的PWM程序全中文解析免费内容://######################################################################### ##//// 文件名: Example_281xEvPwm.c//// 说明:// 设置事件管理器的定时器(TIMER1, TIMER2, TIMER3 and TIMER4)// 来产生T1PWM, T2PWM, T3PWM, T4PWM 和PWM1-12 波形(16路PWM波)。
////######################################################################### ###include "DSP281x_Device.h" // DSP281x 设备包含文件#include "DSP281x_Examples.h" // DSP281x 例程包含文件// 函数原型声明void init_eva(void);void init_evb(void);void main(void) //主函数{// 第1步:初始化系统控制量:PLL,看门狗,使能外围时钟InitSysCtrl();//系统初始化程序,原型在DSP281x_SysCtrl.c中// 第2步:初始化GPIO:EALLOW; //使能保护寄存器GpioMuxRegs.GPAMUX.all = 0x00FF; // 将EVA PWM 1-6 引脚配置成通用I/OGpioMuxRegs.GPBMUX.all = 0x00FF; // 将EVB PWM 7-12 引脚配置成通用I/OEDIS; //禁止修改保护寄存器// 第3步:清除所有中断,初始化PIE向量表DINT; //关闭总中断IER = 0x0000;//关闭外设中断IFR = 0x0000;//清除中断标志InitPieCtrl();//初始化PIE控制寄存器InitPieVectTable();//初始化PIE向量表// 第4步:初始化所有外围设备init_eva(); // 初始化事件管理器Ainit_evb(); //初始化事件管理器B// 第5步:IDLE循环,采用示波器可以观察波形for(;;);}void init_eva(){// 初始化EVA Timer1EvaRegs.T1PR = 0xFFFF; // 定时器1 周期值EvaRegs.T1CMPR = 0x3C00; // 定时器1 比较值EvaRegs.T1CNT = 0x0000; // 定时器1 计数器初值EvaRegs.T1CON.all = 0x1042; //控制方式:连续增减;定时器使能,比较使能// 初始化EVA Timer2EvaRegs.T2PR = 0x0FFF; // 定时器2 周期值EvaRegs.T2CMPR = 0x03C0; // 定时器2 比较值EvaRegs.T2CNT = 0x0000; // 定时器2 计数器初值EvaRegs.T2CON.all = 0x1042; //控制方式:连续增减;定时器使能,比较使能// 设置T1PWM and T2PWMEvaRegs.GPTCONA.bit.TCMPOE = 1; //比较逻辑驱动T1/T2PWM EvaRegs.GPTCONA.bit.T1PIN = 1; //定时器1比较器极性设置为低电平有效EvaRegs.GPTCONA.bit.T2PIN = 2; //定时器2比较器极性设置为高电平有效//使能PWM1-PWM6比较功能EvaRegs.CMPR1 = 0x0C00; //比较单元比较器1设值EvaRegs.CMPR2 = 0x3C00; //比较单元比较器2设值EvaRegs.CMPR3 = 0xFC00; //比较单元比较器3设值EvaRegs.ACTRA.all = 0x0666;//输出引脚1、3、5高有效,2、4、6低有效CONA.all = 0xA600; //允许比较输出;下溢或等于周期值时重载EvaRegs.DBTCONA.all = 0x0000; // 禁止死区}void init_evb(){// 初始化EVB Timer3// Timer3 控制T3PWM and PWM7-12EvbRegs.T3PR = 0xFFFF; // Timer3 周期值EvbRegs.T3CMPR = 0x3C00; // Timer3 比较值EvbRegs.T3CNT = 0x0000; // Timer3 计数器初值// TMODE = 连续增减// Timer 使能// Timer 比较使能EvbRegs.T3CON.all = 0x1042;// 初始化EVB Timer4// Timer4 控制T4PWMEvbRegs.T4PR = 0x00FF; // Timer4 周期值EvbRegs.T4CMPR = 0x0030; // Timer4 比较值EvbRegs.T4CNT = 0x0000; // Timer4 计数初值// TMODE = 连续增减// Timer 使能// Timer 比较使能EvbRegs.T4CON.all = 0x1042;// 设置T3PWM and T4PWM// 由比较逻辑来驱动T3/T4 PWMEvbRegs.GPTCONB.bit.TCMPOE = 1;// T3PWM的比较极性=低有效EvbRegs.GPTCONB.bit.T3PIN = 1;// T4PWM的比较极性= 高有效EvbRegs.GPTCONB.bit.T4PIN = 2;//使能PWM7-PWM12比较功能EvbRegs.CMPR4 = 0x0C00;EvbRegs.CMPR5 = 0x3C00;EvbRegs.CMPR6 = 0xFC00;EvbRegs.ACTRB.all = 0x0666; // 比较动作控制,动作在一个比较情况下发生// 输出管脚1 CMPR4 - 高有效// 输出管脚2 CMPR4 - 低有效// 输出管脚3 CMPR5 - 高有效// 输出管脚4 CMPR5 - 低有效// 输出管脚5 CMPR6 - 高有效// 输出管脚6 CMPR6 - 低有效CONB.all = 0xA600; //允许比较输出;下溢或等于周期值时重载EvbRegs.DBTCONB.all = 0x0000; //禁止死区}// 此例程没有使用ISR(中断服务子程序)。
DSP 2812 的串行通讯摘要:本文首先介绍了TMS320F2812DSP与PC机进行串行通信是的硬件连接,对F2812串行通信接口SCI进行概述。
然后简单介绍数字信号处理器串行通信接口SCI 构成RS232和RS485 串口通信,最后,详细阐述了从机通信程序和主机通信模块的软件设计。
其通信程序协议采用了一种通用工业标准Modbus 协议。
关键词:串行通信RS232 RS485 软件设计第1章TMS320F2812芯片SCI介绍1.1 TMS320F2812串行通信接口SCI概述串行通信接口SCI是一个采用发送、接收双线的异步串行通信接口,即通常所说的UART口,它支持16级的接收发送FIFO,从而降低了串口通信时CPU 的开销。
SCI模块支持CPU和其他使用非归零制的外围设备之间的数字通信。
在不使用FIFO的情况下,SCI接收器和发送器采用双级缓冲模式,此时SCI接收器和发送器都有独立的使能和中断位,也都可以设置成独立操作或同时进行的全双工通信模式。
为了保证数据的完整,SCI模块对接收到得数据进行间断检测、奇偶校验、超限检测以及帧的错误检测。
通过对16位的波特率控制寄存器进行编程,可以配置不同的SCI通信速率。
SCI 的串行通信接口包括SCIRXD(串行通信数据接收)和SCITXD(串行通信数据发送),在不使用SCI 时,这两个引脚也可作通用I/O 口。
发送和接收的操作可以利用状态标志位通过中断驱动或查询算法来完成。
与之相关的主要寄存器:发送缓冲寄存器SCITXBUF、接收缓冲寄存器SCIRCBUF、接收仿真缓冲寄存器SCIRXEMU;通信控制寄存器SCICCR、中断使能和内部时钟使能SCICTL1 和SCICTL2 、波特率选择高字节寄存器SCIHBAUD、波特率选择低字节寄存器SCILBAUD、优先级控制寄存器SCIPRI、引脚控制功能SCIPC2 以及反映通信状态SCIXST 等。
根据信息的传送方向,串行通信可以分为单工、半双工和全双工三种,其各自定义如下图所示。
第2章F2812-A评估板硬件使用指导2.1 F2812-A评估板技术指标主处理芯片:TMS320F2812,运行速度为150M;工作速度可达150MIPS;片上RAM 18k*16bit;片上扩展RAM存贮空间64K×16Bit;自带16路12bit A/D,最大采样速率12.5msps;4路的DAC7617转换,100K/S,12Bit;两路UART串行接口,符合RS232标准;16路PWM输出;1路CAN接口通讯;片上128*16bit FLASH,自带128位加密位;设计有用户可以自定义的开关和测试指示灯;4组标准扩展连接器,为用户进行二次开发提供条件;具有IEEE1149.1相兼容的逻辑扫描电路,该电路仅用于测试和仿真; +5V电源输入,内部+3.3V、+1.6V电源管理;4层板设计工艺,工作稳定可靠;具有自启动功能设计,可以实现脱机工作;可以选配多种应用接口板,包括语音板,网络板等。
2.2 F2812 –A 评估板原理图和实物图一. F2812-A 评估板实物图图2.2.2 F2812-A 器件分布图图2.2.1 F2812-A 评估板实物图二. F2812-A 器件分布图图1.2 ICETEK-F2812-A 器件分布图三.F2812-A评估板原理框图图2.2.3 F2812-A评估板原理框图2.3 F2812-A评估板接口说明以下将详细说明这些外围接口的功能和特征定义。
首先,表2-3-1 归纳总结了这些跳线和功能分类,接口位置请参考图2.2.1表2-3-1:接口和功能分类下面将分别介绍这些接口:1. +5v 电源插座: 这个接口用于接入为整个板子供电的电源,电源电压为+5V ,标准配置的电源电流为1A ,如果不使用随板提供的电源,请注意电源的正负极性和电流的大小。
下面是这个接口的插孔示意图:+5V地(GND图2.3.1 电源插孔示意图2. 标准RS-232: 9针D 型连接器,异步串口连接器,符合RS-232规范,输出电平为正负12V .下面是9针连接器的管脚定义:图2.3.2 异步串口连接器示意图3.P1扩展插座:34芯扩展总线接口。
dsp2812流水灯实验报告1.设计任务:1.1基于dsp2812的Led显示控制系统设计要求:(1)绘制系统框图(VISIO);(2)包括复位电路设计、JTAG接口设计、时钟电路设计、电源设计等,并且用Protel软件绘制原理图;(3)编写程序,实现流水灯;(4)系统理论分析和设计陈述;(5)设计过程、源代码和注释、设计说明书。
2.实验目的:⑴学习并了解DSP开发版的基本原理;⑵学习并了解dsp2812芯片的基本结构和原理;⑶熟悉流水灯的软件实现原理和硬件设计;⑷熟悉Emulator方式下的程序调试规程,并最终能够熟练掌握在DSP软硬件环境下的程序开发流程;能够对现有器件进行简单地编程,实现各种简单地显示控制。
3.设计内容:(1)使用Altium Designer软件绘制原理图。
(2)使用VISIO 软件绘制系统框图和软件流程图。
(3)使用CCStudio v3.3软件设计程序实现流水灯。
4.实验原理:4.1 DSP(2812)性能概述(1)F2812 DSP芯片采用高性能静态CMOS技术1 主频高达150MHz,每个时钟周期为6.67ns。
2采用低电压供电,当主频为135MHz时,内核电压为1.8V,主频150MHz时内核电压为1.9V,I/O引脚电压为3.3V。
(2)支持JTAG在线仿真接口(3)32位高性能处理器1 支持16bX16b和32bX32b的乘法加法运算。
2 支持16bX16b双乘法运算。
3 采用哈佛总线结构模式。
4 快速的中断响应和中断处理能力。
5 统一的存储设计模式。
6 兼容C/C++语言以及汇编语言。
(4) 片内存储空间1片内FLASH空间大小为128KX16b,分为4个8KX16b和6个16KX16b存储段。
2 OTP ROM空间大小1KX16b。
3 L0、L1两块4KX16b单地址寻址随机存储器(SARAM)。
4 H0:一块8KX16b随机存储器(SARAM)。
5 M0、M1:两块1KX16bSARAM。
dspf28335启动过程1.DSP reset后运行的起始地址是多少?0x3FFFC02.仿真器烧写程序的步骤是?根据cmd文件把程序烧到指定位置,然后执行。
3.DSP的Flash启动过程是什么?首先硬件配置GPIO84~87上拉为1,即处于Flash启动过程。
当DSP复位后,会从复位向量0x3FFFC0处取得复位向量,并跳转到InitBoot处开始执行,InitBoot会读GPIO84~87的值发现全为1判断为Flash启动方式。
然后会跳到0x33FFF6处执行。
在CCS5.2工程的cmd文件中有如下代码:MEMORY{PAGE 0 :BEGIN : origin = 0x33FFF6, length = 0x000002 /* Boot to M0 will go here */...}SECTIONS{...codestart : > BEGIN PAGE = 0...}即表示把codestart段放到0x33FFF6位置处,文件“DSP2833x_CodeStartBranch.asm”中有codestart段的定义,实际上codestart段只是包含了一个跳转指令,是程序跳转到_c_int00处,_c_int00在boot.asm in RTS library中有定义,_c_int00的代码最终会调用c的main 函数,之后就是main函数的执行。
总的就是:Reset(0x3fffc0)—>initBoot()—>判断启动方式—>codestart(0x33fff6)—>_c_int00—>main函数4.F28335如何烧写代码到flash中并运行?首先使用添加C:\ti\controlSUITE\device_support\f2833x\v133\DSP2833x_com mon\cmd\F28335.cmd。
此文件即为配置代码到flash中的TI官方配置文件。
* * 2812的内部Flash启动过程
2812的内部flash启动过程 2812从内部flash启动的详细流程说明: a) 程序硬件复位或者软件复位 b) 判断mp/mc是否为0 c) 为0则从boot rom启动,否则从外部启动 d) 到boot rom的0x3F FFC0处取出复位向量,跳到boot函数 e) 采集IO管脚状态, f) 根据IO状态选择boot方式 g) 如果是flash,程序退出boot函数,跳转到0x3F 7FF6 h) 取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT00处 i) 在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该函数在c的库函数内 j) 进入main函数
从上电到我们的主函数运行之间这段时间里2812到底做了些什么?2812是怎样引导程序运行的?下面叙述其启动过程。 在2812中引脚XMP/~MC,当该引脚的为高电平时表示是微处理器模式(microprocessor),为低电平时表示微机算计模式(microcomputer),当为微处理器模式时,2812内部的bootrom被禁止,通过zone7(0x3F C000)从外部调引导程序启动。2812复位以后,其复位向量是固定的0x3FFFC0,如果为微处理器模式,那么复位后的复位向量指向的外部的地址,即0x3FFFC0是zone7处的地址,若为微机算计模式,那么* * 0x3FFFC0指向的是2812的片内FLASH的地址。下面就以微机算计模式加以说明其过程。 上电复位后,复位向量是指向片内Flash的0x3F FFC0,2812有一块flash地址从0x3F F000-0x3F FFFF在出厂时已经固化好了引导程序。在0x3F FFC0处是一条跳转指令,跳到iniboot(地址0x3F FC00)函数处执行iniboot代码,该iniboot代码就是TI在dsp出厂时固化在flash中的。InitBoot assembly Routine将选择SelectBootMode function启动模式函数。这个函数由GPIO 引脚的状态决定启动类型。 引导模式选择 GPIOF4 GPIOF12 GPIOF3 GPIOF2 (SCITXDA) (MDXA) (SPISTEA) (SPICLK)
PU No PU No PU No PU Mode Selected
1 X X X 跳转到地址为0x3F7FF6的Flash,用户必须在这里编写分支语句优先于复位,以按需要重新定位代码的执行. 0 1 X X 调用SPI_Boot 以从外部的EEPROM载入 0 0 1 1 调用SCI_Boot 以从SCI-A载入 0 0 1 0 J跳转到 H0 SARAM 0x3F 8000 0 0 0 1 跳转到OTP地址 0x3D 7800
0 0 0 0 调用Parallel_Boot从GPIO 端口B载入
一旦启动结束,选择启动模式函数返回一入口地址给InitBoot函数。入口地址是退出bootloader之后代码开始执行的起始点。InitBoot接着将会调用ExitBoot子程序,把CPU寄存器的状态恢复到复位状态。比如flash boot模式,那么initboot执行完后跳转到0x3F 7FF6处(codestart处),此位置刚好在128位(CSM)密码位置之前,你要在0x3F 7FF6处放置跳转指令,以跳转到你要去的地方,比如是boot loader或应用代码,通常的跳转去处是_c_int00。在0x3F 7FF6 处放置跳转指令的方法如下(DSP281x_CodeStartBranch.asm中): .sect "codestart" * * code_start: .if WD_DISABLE == 1 LB wd_disable ;Branch to watchdog disable code .else LB _c_int00 ;Branch to start of boot.asm in RTS library .endif .if WD_DISABLE == 1 .text wd_disable: SETC OBJMODE EALLOW MOVZ DP, #7029h>>6 MOV @7029h, #0068h EDIS LB _c_int00 .endif .end MEMERY { Page 0: ……….. RAML0 : origin = 0x008000, length = 0x001000 /* on-chip RAM block L0 */ * * OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */ FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */ FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */ FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH */ CSM_RSVD : origin = 0x3F7F80, length = 0x000076 BEGIN : origin = 0x3F7FF6, length = 0x000002 ……….. } SECTIONS { ………. /* Allocate program areas: */ .cinit : > FLASHA PAGE = 0 .pinit : > FLASHA, PAGE = 0 .text : > FLASHC PAGE = 0 codestart : > BEGIN PAGE = 0 ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0 csmpasswds : > CSM_PWL PAGE = 0 * * csm_rsvd : > CSM_RSVD PAGE = 0 /* Allocate uninitalized data sections: */ .stack : > RAMM0 PAGE = 1 .ebss : > RAML1 PAGE = 1 .esysmem : > RAML1 PAGE = 1 /* For SDFlash to program these, they must be allocated to page 0 */ .econst : > FLASHA PAGE = 0 .switch : > FLASHA PAGE = 0 ………. } 上面代码执行后跳到C初始化的入口_c_int00(0x3F6000) ,在C初始化的入口,_c_int00对一些变量,堆栈和寄存器进行必要的设置,这个函数在运行支持库(rts.lib)中,_c_int00函数为
建立C运行环境,需完成以下工作: a. 为系统堆栈产生.stack块,并初始化堆栈指针; b. 从.cinit块将初始化数据拷贝到.bss块中相应的变量; c. 对寄存器进行必要的配置,调用main函数开始运行C程序; 没有过多的资料介绍_c_int00这块,无法知道它的具体功能实现以及怎样跳转到主函数的,用户可以对c_int00函数进行修改,但修改后的函数必须完成以上任务。 * * TMS320F2812 flash运行时的启动过程 2812启动过程与2407所用的传统单片机的Vectors启动模式不同,且仿真运行与脱离仿真器运行时差别较大,所以一开始比较难理解。其启动过程可以分为Flash启动、SPI_Boot、SCI_Boot、H0_Boot、Parallel_Boot等几种模式,而最常用的就是内部Flash运行,也就是将程序编译好后通过JTAG口将程序 xx.out文件下载到芯片内部falsh中运行,所以此处就这种运行方式的启动过程作一说明。 * * (1)
(2)(3) 图1 2812内部地址图 首先要搞清楚的就是2812的内部地址,如图1所示,(1)为放中断向量表的RAM,中断向量表在初始化中由用户完成设置;(2)为放程序的Flash,其中最底的128Bits* * (8Words)存放Password用;(3)为BootRom,即专门为DSP启动所设立的一块ROM,其中内容为厂家固化。由图2可以更清晰地看到BootRom的内容,其中0x3F F000~0x3F FC00 放置的是IQmath库中用到的函数表,0x3F FC00~0x3F FFC0放置的是Bootloader functions,最底部分放置的是VectorTable。内部Flash运行的启动过程如图3所示:
BA 图2 2812内部BootRom地址图