收藏 分享(赏)

DSP开始.doc

上传人:jinchen 文档编号:7225055 上传时间:2019-05-10 格式:DOC 页数:9 大小:187.50KB
下载 相关 举报
DSP开始.doc_第1页
第1页 / 共9页
DSP开始.doc_第2页
第2页 / 共9页
DSP开始.doc_第3页
第3页 / 共9页
DSP开始.doc_第4页
第4页 / 共9页
DSP开始.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、从 DSP 开始1. CLKIN 作为系统时钟输入,传到 SYSCLKOUT 作为系统时钟 . 在启动外围时钟时,会有两个系统时钟的延迟,因此在访问外围 configuration registers 时要注意.2. 在访问 PLLCR 时,要关闭看门狗.PLL 在复位时有三种工作模式.PLL 旁路,PLL 关闭,PLL 启动. PLL 关闭时,要首先将 PLL 旁路.然后设置 PLLOFF bit in the PLLSTS.此时 CLKIN=XCLKIN. PLL 旁路时, PLLCR=0.此时 PLL并未关闭.这两种模式,系统时钟由 PLLSTSDIVSEL决定. SYSCLKOUT=C

2、LKIN/2/4.当 PLL 启动时, SYSCLKOUT=CLKIN*n/2/4 了.即倍频后在分固定的 2/4 分频.3. 在 PLL 旁路或打开时,系统时钟会消失 131072 时钟周期.此时将由系统的 Rc 时钟工作. 但是在上电时, 系统的 Rc 并不工作. 只有在检测到系统时钟正常工作后,在系统时钟又消失时,才会工作.此时watchdog 的计数器不会减少.同时系统会检测到时钟丢失 MCLKSTS=1.4. DSP 有三种工作模式:IDLE,Standby,HALT. WDINT 可以在 IDLE,Standby 时将 DSP 唤醒. Standby :全部的外围设备关闭.只有 W

3、DT 在工作.时钟由内部的 RC 提供. SYSCLKOUT 停止.IDLE:WDT 通过 PIE 中断将 DSP 唤醒. SYSCLKOUT 正常工作.HALT:所有的时钟关闭.只有外部 RESET,PORTA 信号,XNMI 唤醒.在退出低功耗模式时,信号要有一定的低电平宽度. GPIOLPMSEL 将选择哪些信号可以唤醒DSP.5. 外部接口:(XINTF)采用异步非复用模式总线,外部接口映射到三个固定的存储区.Zone0,Zone6,Zone7.每个区有固定的片选信号. XZCS0, XZCS6, XZCS7.有 20 位地址和 32 位数据线.C28f335 有 256K*16 的内

4、部 Flash,分为 32K 一段.有 1K的 OTP ROM。1K 的 M1 和 M0 RAM.复位时堆栈指针指向 M1.L0,L1L7 共 8 个 4K*16 位的 RAM.L4,L5,L6,L7允许 DMA 访问.Flash 的 pipeline mode 能优化程序的性能,同时 Flash wait-state 能用参数控制. zero wait state, if 0 SYSCLK 24 MHzone wait state, if 24 MHz SYSCLK 48 MHztwo wait states, if 48 MHz SYSCLK 72 MHz 对任何外部空间读写操作的时序都可

5、以分成 3 部分:建立、激活和保持,时序如图 1 和图 2 所示。在建立(lead)阶段,访问存储空间的片选信号变为低电平并且地址被送到地址总线(XA)上。默认情况下该阶段的时间设置为最大,为 6 个 XTIMCLK 周期。在激活(active)阶段,对外部设备进行读写,相应的读写信号(XRD 和 XWD)变为低电平,同时数据被送到数据总线(XD)上。默认情况下读写该阶段的时间均设置为 14 个 XTIMCLK 周期。跟踪(trail)阶段是指读写信号变为高电平,但片选信号仍保持低电平的一段时间周期,默认情况下该阶段时间设置为 6 个 XTIMCLK 周期。因此,在编程时要根据外部设备的接口时

6、序来设置 XINTF 的时序,从而正确地对外设读写。建立,活动,结束时间由 XTIMING 决定.ZONE0 为 0x00000 - 0x00FFF.共 4K.6. DSP 启动次序a)程序硬件复位或者软件复位b)判断 mp/mc 是否为 0,微计算机模式( 为 1,当为微处理器模式时,2812 内部的bootrom 被禁止,通过 zone7 从外部调引导程序启动。)c)为 0 则从 boot rom 启动,否则从外部启动(0x3F FC00 )d)到 boot rom 的 0x3F FC00 处取出复位向量,跳到 boot 函数:2812 有一块 flash 地址从0x3F F000-0x3

7、F FFFF 在出厂时 ti 已经固化好了引导程序 iniboot:Iniboot 函数判断几个GPIO 引脚来判断使用哪一种引导模式,比如 flash boot 模式,检测SPICLKA,SCITXA ,GPIO34 的电平,当都为高电平时表明是片内 flash boot 模式,那么initboot 执行完后跳转到 0x3F 7FF6 处)e)采集 io 管脚状态,确定启动模式。28335 提供几种启动模式:f)根据 io 状态选择 boot 方式g)如果是 flash,程序退出 boot 函数,跳转到 0x3F 7FF6(codestart)h)取出跳转指令,跳转到自己的指定地址或者 C

8、初始化的入口_C_INT00(0x3F6000)处(DSP281x_CodeStartBranch.asm 中)最后,BOOtROM 执行 exitboot 函数。执行这个函数包括:置 CPU 状态为缺省,将 SP 指向 0x400,跳转到程序起点等工作。exitboot 执行后 CPU 状态为:ACC=0,RPC=0,P= 0,XT=0,ST=0,XAR0=XAR7=0,SP=0x400,ST1=0x0A0B。以上是 BootROM 完成的工作。从 entrypoint 开始,就进入用户程序区了。对于汇编程序,可以在程序起点处写一条跳转到 Start(如果程序起点是 Start)的指 令。汇

9、编情况比较简单,跳转到 Start 后,各项初始化代码工作都由自己完成。对于 C 语言程序,通常的做法是在程序起点处放置一条跳转指令,转到 _c_init0。然后程序的执行分为使用或不使用BIOS 两种情况。从 rts.src 中提取 boot28.inc 文件,其中包括对于不使用 BIOS 的情况下,启动后从_c_init0 到 main 函数中间所做的工作。因为这 段代码是由 C 编译器自动运行的,因而常被初学者忽视,以致对其后自己编写的 C 代码的运行环境不清楚。这一段程序主要完成以下工作: 分配 C 堆栈; 建立 C 运行环境(CPU 寄存器和模式寄存器的配置); 复制 cinit、p

10、init 表、.const、.econst 常量到工作区; 跳转到 main 函数。7. DSP 有 128 位的秘码.低 64 位全为 1 时,表示没有秘码.当有密码时,0x33ff80-0x33ffef.必须设为 0. 128 位的秘码 0x33fff8-0x33ffff,不能为 0.否则将永远锁上设备.8. DSP 有八个可屏蔽的外部中断.XINT1-XINT7,XNMI.96 个 PIE 中断.PIE 中断 8 个为一组.分为 12 个 INT1-INT12.有三个 CPU 定时器.cup-timer2 为 dos/bios 中断.连接到INT14.CPU-timer1 连接到 INT

11、13.CPU-Timer0 连接到 PIE INT0.1 个外设复用的中断有5 个开关控制:外设本身的中断使能控制位、对应的PIE 中断使能控制位、PIEACK 响应控制位、IMR 寄存器中的使能位和总的使能控制位。例如:定时器1 周期中断( TIPINT) ,CUP 级中断对应的是INT2 ; PIE 级中断标志寄存器相应位是PieCt rl .PIEIFR2. bit . INTx4 ,中断使能寄存器相应位是PieCt rl .PIEIER2. bit . INTx4 , 响应寄存器相应位是PieCt rl .PIEACK. bit . ACK2 ; 外设级中断标志寄存器相应位是EvaRe

12、gs. EVAIFRA. bit . T1PINT ,中断使能寄存器相应位是EvaRegs. EVAIMRA. bit . T1PINT。参考程序如下:# include “DSP28_Device. h“ / 3 定义了所需寄存器3 /void main (void) / 3 主函数3 /InitSysCt rl () ; / 3 初始化系统3 /DINT ; / 3 屏蔽全局中断( IN TM = 1) 3 /IER = 0x0000 ; / 3 禁止所有的CPU 级中断3 /IFR = 0x0000 ; / 3 清除CPU 级中断标志位3 / 3 初始化PIE 控制寄存器3 /PieCt

13、 rl. PIEIER2. bit . IN Tx4 = 1 ;/ 3 使能PIE级中断(PIEIER2. 4 = 1) 3 /PieCt rl. PIEIFR2. bit . IN Tx4 = 0 ;/ 3 清除PIE 级中断标志位( PIE2IFR2. 4 = 0) 3 /PieCt rl. PIECRTL. bit . ENPIE = 1 ;/ 3 使能PIE 3 /PieCt rl. PIEACK. all = 0xFFFF ;/ 3 清除PIE 中断响应标志位3 /Init PieVect Table () ; / 3 初始化中断向量表(定时器1周期中断向量为T1PIN T) 3 /

14、 3 改变中断向量地址3 /EALLOW;/ 3 设置EALLOW位,允许调整PIE 向量表3 /PieVect Table. T1PIN T = / 3 调整PIE 向量表3 / 3 使定时器1 周期中断的中断向量指向临时的中断服务程序3 /EDIS ; / 3 清除EALLOW位,禁止调整PIE向量表3 /Init Ev() ; / 3 初始化EVA 事件管理器中的定时器1 ,设置周期3 /EvaRegs. EVAIMRA. bit . T1PINT = 1 ;/ 3 使能外设级中断( TIPINT = 1) 3 /EvaRegs. EVAIFRA. bit . T1PIN T = 1 ;

15、/ 3 清除外设级中断标志位3 /IER | = M_IN T2 ; / 3 使能CPU 级中断INT2 3 /EIN T ; / 3 使能全局中断( IN TM = 0) 3 /ERTM; / 3 使能中断调试寄存器DBGM3 /EvaRegs. T1CON. bit . TENABL E = 1 ;/ 3 启动定时器1 3 /for ( ; ;) ; / 3 等待中断3 /interrupt void Eva_Timer1_Isr (void) / 3 中断服务程序3 / / 3 执行相应的中断操作3 /EvaRegs. EVAIFRA. bit . T1PIN T = 1 ;/ 3 清除

16、TIPIN T 的中断标志3 /PieCt rl . PIEACK. bit . ACK2 = 1 ;/ 3 清除相应中断组的PIEACKx 寄存器位3 /EIN T ; / 3 开中断3 /2. 3 注意事项 F2812 响应中断后,CPU 级中断标志寄存器( IFR)中对应的中断标志会自动清除,程序员在初始化IFR 后不要再干预它。不要清除PIE 级中断标志寄存器( PIEIFR) 的中断标志位,否则有可能丢失产生的中断。外设级中断标志寄存器的中断标志位不会自动清除,程序员必须在中断服务程序中采用软件来进行清除。当PIE 的中断请求被送到CPU 后, PIE 相应的响应寄存器位( PIEA

17、CKx) 被置1 ,并且保持不变,所以程序员要在中断服务程序中将PIEACKx 置0 , PIE 模块的该组才能再向CPU 申请中断。 F2812 在响应中断后会自动将INTM 置为1 ( 除TRAP 中断) ,所以程序员要在中断服务程序中将INTM置为 0 ,以开放可屏蔽中断。9. DSP 包含有 4 段外围寄存器空间.PF0,PF1,PF2,PF3.10. EPWM. 一个 ePWM 模块分为几个事件单元,分别为 EPWM1、EPWM2。每一个事件单元有两个 EPWM 输出,分别为 EPWMxA 与 EPWMxB(x 表示第 x 个事件单元)。相互独立且不失同步性,所有事件单元都可以通过一

18、个同步信号紧密的连接在一起,实现同步;另一个方面他们还可以单独工作。如此一来,大大增强了 DSP 的扩展性。以 2806 来说,其 ePWM模块有四个事件单元,可以产生 4 对 PWM;4 对 PWM 可以独立的设置成 4 对不同频率的调宽波,而 TMS320F281x 则只能产生 2 种不同频率的调宽波(两个事件管理器,一个产生一种频率)。如果不理会同步的概念,可以想象成 2806 拥有 4 个类似 2812 的事件管理器,只是每个事件管理器只能产生 2 路 PWM 而 2812 是 3 对。具体来说,可以从以下几个方面来讲:1、ePWM 模块总共有 7 个模块:(1)时间基准模块 -TB

19、(2)计数器比较模块 -CC(3)动作限定模块 -AQ(4)死区控制模块 -DB(5)PWM 斩波模块 -PC(6)错误控制模块 -TZ(7)事件触发模块 -EZ每个模块各自作用如下:TB :为输出 PWM 产生时钟基准 TBCLK,配置 PWM 的时钟基准计数器 TBCTR,设置计数器的计数模式,配置硬件或软件同步时钟基准计数器,确定 ePWM 同步信号输出源;CC:确定 PWM 占空比,以及 ePWM 输出高低电平切换时间;AQ:确定计数器和比较寄存器匹配时产生动作,即 ePWM 高低电平的切换;DB:配置输出 PWM 上升沿或下降沿延时时间,也可以将 A、B 两通道配置成互补模式,我做的

20、逆变器就是将 ePWM 配置成互补模式。死区时间可以编程确定;PC:产生高频 PWM 载波信号;TZ:当外部有错误信号产生时,对 PWM 输出进行相应处理,比如全置高,或拉低,或置为高阻态,从而起到保护作用。当然该功能也可以通过软件强制产生;EZ:使能 ePWM 中断,使能 ePWM 触发 ADC 采样,确定事件产生触发的速度和清除相关事件标志位。ePWM 模块的 7 个模块就像一条生产线,一级一级的经过,但 DSP 更高级,可以实现通过配置,使得 ePWM 只经过我选择的生产线,没有被选择上的就不要经 过。例如,死区控制模块可以需要也可以不需要,这就看实际系统需不需要了。在实际使用 ePWM

21、 时,正常的发出 PWM 波往往只要要配置 TB、CC、AQ、 DB、ET 五个模块。 10. DSP/BIOS 的构成一般认为 DSP/BIOS 由三部分内容组成,即1) DSP/BIOS 实时库和 API2) DSP/BIOS 配置工具3) DSP/BIOS 插件其中配置工具用于提供可视化的编程环境,而插件用于支持调试过程。所以,实时库和 API 才是 DSP/BIOS 的核心。DSP/BIOS 实时库可以为最终 生成的嵌入式实时操作系统提供运行时的基本服务,包括线程调度,中断管理等功能。DSP/BIOS API 由十几个模块组成,如 DEV 设备驱动接口,MEM 存贮段管理器等。程序员通

22、过调用 API 来使用 DSP/BIOS。DSP/BIOS API 由十几个模块组成,每个模块又由相关的数据结构和函数组成。在有关DSP/BIOS 的资料中混杂使用了模块(module)、对象(object) 等术语,不过,DSP/BIOS 与面向对象技术并没有直接的关联。所谓模块,是指一个逻辑上的概念,表示一组数据结构和以此为基础的一组函数。对象则是特 指按模块中的数据结构所创建的变量。如果程序员定义了某个对象,他将可以使用模块中的相应函数,并用这些函数代码来组成自己的嵌入式操作系统。在程序员开发自己的嵌入式操作系统时,一般不会同时需要 DSP/BIOS 的全部模块。所以,DSP/BIOS

23、中的内容是按需使用的。但是,开发平台会自 动选择部分核心模块,并为它们创建对象。例如,开发平台会自动选择任务管理器( Multi-Task Manager)模块,以支持空闲处理功能:TSK_idle (),即:TSK_Obj TSK_idle (iFXN, iARG0, iARG1, iARG2, iARG3, iARG4, iARG5, iARG6, iARG7, iAUTOSTK, iMANSTK, iSTKSZ, iSTKSEG, iPRI, iENV, iEXITFLAG, iUSETSKNAME, iSTATREG) 由 DSP/BIOS 实时库生成的代码和程序员新编制的代码链接到一起就构成了 DSP 的嵌入式应用系统。这些代码之间的执行关系由 boot.c 文件规定,该文件的缺省执行顺序为:一,初始化 DSP:由复位中断向量将程序引导到 c_int00,开始初始化寄存器等硬件资源;二,初始化 DSP/BIOS 模块:通过调用 BIOS_init 完成,BIOS_init 由开发平台中的配置工具自动生成;三,初始化用户应用环境:通过调用 main 例程实现;四,启动 DSP/BIOS:由 BIOS_start 启动由 DSP/BIOS 实时库中的相关例程,BIOS_start 也是由开发平台中的配置工具自动生成的。但 是,通过调整 boot.c 可以改变系统的执行顺序。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报