烧写运行与在线仿真
3.1RAM在线仿真
编译完成之后,直接file——load program进去之后就可以跑了; 它测试的时间会比烧写到flash里面快很多,实际应用都是烧写,所以这种比较好像并没有意义,真正有意义的是下面两种; 3.2FLASH烧写运行
从RAM在线运行到flash烧写运行,需要改的地方: Ø 主函数里面:使用MemCopy函数将代码运行地址从RAM拷到flash里面;初始化FLASH,比如使能管道,可以提升速度,另外根据最高频率,设置最快翻页和等待时间:
Ø CMD文件中:将指定段分配到具体的物理位置:
Ø 另外,不能再flash内部初始化flash,就是不能自己对自己操作,所以有了CMD文件里面的load出来,同时在源文件里面要对这个块进行指定: #pragma CODE_SECTION(InitFlash, "ramfuncs"); Ø 总结一下:其实程序真正是到load到ram里面,还是烧写到FLASH里面,是CCS里面点击不同按钮操作来决定的。上述的三个步骤只是保证烧写到flash里面可以正常运行而已:需要初始化flash,但是不能自给初始化自己,所以要将初始化代码,先指定一个段,然后再CMD中将该段设置为烧写后load。同时在主函数里面执行将该段代码复制出来再运行;应该就是这个逻辑! 3.3FLASH烧写、LOAD运行
Ø 与上一节烧写类似,上一节可以将FLASH初始化函数load出来运行,其他的load出来运行的步骤也是一样:指定代码分配;主函数里面复制代码,执行代码;CMD将指定的块分配到具体物理空间; Ø Load运行主要用于某些对时间要求高的场合,烧写之后,如果load出来,速度大概可以达到百分之八十。应用场合包括,某些中断里面的反复做的控制等 3.4疑问
Ø MemCopy函数中使用到的变量,举例: MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd, &RamfuncsRunStart); 这些变量的定义: extern Uint16RamfuncsLoadStart; 但是并没有初始化,这一句也不知道是在这里定义还是只是在这里引用。我理解的是它是在编译器内部定义了的,这里只是一个引用申明:x的其实地址就是xLoadStart,以此类推。因为我自己使用的段,也可以这样使用,说明是编译器在管理; 4.外设
4.1ePWM
6路12个PWM,也可以配置为高精度PWM(这个自己没用过)。可用于三电平逆变器的控制,12路既可以对称控制,也可以单独控制;控制单元主要分为七个模块: 时基模块:确定计数周期,计数模式(上、下、上下); 计数比较模块:计数比较寄存器; 动作模块:配置计数比较相匹配的模式(与周期相等,与零相等等),以及动作类型(置位、复位、翻转); 死区模块:产生对称或者独立波形,死区设置; 斩波和错误联防:这两个模块没有使用过; 事件触发模块:计数值等于某个设定值后触发指定动作,可用于触发ADC,从而在中断里面实现采样控制; 4.2eCAP
该模块是复用的:6个既可以用于PWM产生——只能产生独立的PWM,也可以用于捕获上升沿或者下降沿; 4.3ADC
4.3.1采样
Ø 电流采样,主要采用CT进行;电压采样,既可以用PT,也可以用一串电阻串联,从中某个电阻取电压; Ø 电流采样之后,一般也要经过一个电阻,转化为电压信号,再到后面进行处理 4.3.2调理
Ø 最基本的电压跟随器,解除负载效应; Ø 使用二极管限幅,因为调理之后就要输入ADC模块,该模块有幅值限制; Ø 对于交流量,可能会使用一个加法电路,叠加一个直流量,将信号提到ADC接受的范围内; Ø 使用电容等构成滤波电路,这个截止频率很大,用于稳压,滤掉极高频分量; 4.3.3ADC
Ø 主要看两个指标:转换精度——用转换位数来表示,比如12位代表最大值3V只能转换到4095,如果位数增加,转换精度则增加;转换速度——这个可以配置,自己没有亲自动手配置过; Ø ADC有多种转换方法,在数字电路里面有详细,但是在DSP里面只需要封装好,不需要去管这些内部细节; Ø ADC模块可以配置为单独两组8个,也可以级联为一组16个;可配置转换数量,转换储存位置;可触发中断;
|