DSP28335中文资料.docx
《DSP28335中文资料.docx》由会员分享,可在线阅读,更多相关《DSP28335中文资料.docx(53页珍藏版)》请在冰豆网上搜索。
![DSP28335中文资料.docx](https://file1.bdocx.com/fileroot1/2023-5/24/a9c79a2c-4162-4b92-9721-270e678e8bc6/a9c79a2c-4162-4b92-9721-270e678e8bc61.gif)
DSP28335中文资料
TMS320F28335TechV_28335
目录
1DSP的PWM信号1
1.1简介1
1.2端口对应关系2
1.3初始化程序注释2
2DSP的CAN通信3
2.1CAN2.0B协议简述3
2.2CAN总线电平4
2.3CAN总线上的120欧电阻6
2.4DSP的CAN时钟模块6
2.5邮箱初始化例程注解7
2.6消息发送和接收8
2.7CAN的适配器存在的一些问题9
3DSP的32位浮点运算测试10
4DSP定时器中断11
4.1DSP28335的定时器11
4.2定时器分频11
4.3计数器计数12
4.4定时器时钟周期12
5DSP看门狗复位12
5.1看门狗时钟12
5.2看门狗系统控制和状态寄存器(SCSR)13
5.3看门狗计数寄存器(WDCNTR)13
5.4看门狗重启管理器(WDKEY)14
5.5看门狗控制寄存器(WDCR)14
6软件报错与处理15
6.1CCSSetup中仿真器的配置15
6.2Connect报错——1145——换仿真器解决17
6.3CAN口测试A发B收,数据发不出去19
6.4编译Pwm测试文件出错19
6.5couldnotopensourcefile"DSP2833x_Device.h20
7备注与注意事项22
8附录C源程序22
8.1PWM初始化及脉冲产生函数22
8.2邮箱初始化函数33
8.3浮点运算测试函数36
8.4定时器中断初始化函数37
8.5采用定时器的延时函数39
8.6看门狗初始化函数40
1DSP的PWM信号
1.1简介
DSP28335共12路16位的ePWM,能进行频率和占空比控制。
ePWM的时钟TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):
PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。
初始化程序采用的计数模式为递增计数模式。
在递增计数模式下,时基计数器从零开始增加,直到达到周期寄存器值(TBPDR)。
然后时基计数器复位到零,再次开始增加。
PWM信号周期与频率的计算如下:
1.2端口对应关系
通道
相应PWM的A/B
对应JP0B端口号
1
ePWM1A
9
2
ePWM1B
10
3
ePWM2A
11
4
ePWM2B
12
5
ePWM3A
13
6
ePWM3B
14
7
ePWM4A
15
8
ePWM4B
16
9
ePWM5A
17
10
ePWM5B
18
11
ePWM6A
19
12
ePWM6B
20
说明:
JP0B的端口号按“Z”字形顺序数。
1.3初始化程序注释
voidInitPwm1AB(float32f)
{
Uint16T=2343750/f-1.0;//系统时钟SYSCLKOUT=150MHz,TBCLK=6.6666667ns,在连续增计数模式下,f=150000000/(TBPDR+1)
EALLOW;
//先初始化通用输入输出口//
GpioCtrlRegs.GPAPUD.bit.GPIO0=0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;
GpioCtrlRegs.GPAPUD.bit.GPIO1=0;
GpioCtrlRegs.GPAMUX1.bit.GPIO1=1;
EPwm1Regs.TBPHS.half.TBPHS=0;//在相位寄存器中设置计数器的起始计数位置
//下面两条语句组合对PWM的时钟进行分频
EPwm1Regs.TBCTL.bit.CLKDIV=6;
EPwm1Regs.TBCTL.bit.HSPCLKDIV=0;
EPwm1Regs.TBPRD=T;//在周期寄存器中设置计数器的计数周期
//TBCTL为定时器控制寄存器
EPwm1Regs.TBCTL.bit.CTRMODE=TB_COUNT_UP;//设置计数模式位为连续增计数模式,产生对称方波
EPwm1Regs.TBCTL.bit.PHSEN=TB_DISABLE;//将定时器相位使能位关闭
EPwm1Regs.TBCTL.bit.PRDLD=TB_SHADOW;//映射寄存器SHADOW使能并配置映射寄存器为自动读写
EPwm1Regs.TBCTL.bit.SYNCOSEL=TB_CTR_ZERO;//定时器时钟源选择,一共有四种时钟源
EPwm1Regs.CMPA.half.CMPA=0.0001*T;//设置EPWM1A比较值寄存器的比较值,即体现EPWM1A的占空比
EPwm1Regs.CMPB=0.0001*T;
EPwm1Regs.CMPCTL.bit.SHDWAMODE=CC_SHADOW;//A模块比较模式
EPwm1Regs.CMPCTL.bit.SHDWBMODE=CC_SHADOW;//B模块比较模式
EPwm1Regs.CMPCTL.bit.LOADAMODE=CC_CTR_ZERO;//A模块比较使能,通过写0来清除SHDWAMODE位来使能loadonCTR=Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE=CC_CTR_ZERO;//B模块比较使能,通过写0来清除SHDWBMODE位来使能loadonCTR=Zero
//AQCTLA为输出A比较方式控制寄存器
EPwm1Regs.AQCTLA.bit.ZRO=AQ_SET;//TBCTR(计数器)计到零时使输出为反向
EPwm1Regs.AQCTLA.bit.CAU=AQ_CLEAR;//TBCTR(计数器)与CMPA在up计数时相等使输出为high,这关系的输出的占空比
EPwm1Regs.AQCTLB.bit.ZRO=AQ_SET;
EPwm1Regs.AQCTLB.bit.CBU=AQ_CLEAR;
EDIS;
}
2DSP的CAN通信
2.1CAN2.0B协议简述
TMS320F28335上有2个增强型CAN总线控制器,符合CAN2.0B协议,其总线波特率可达到1Mbps。
符合CAN2.0B协议的数据帧为扩展数据帧,即采用29位标识符。
数据帧的数据域最多可含8个字节,则DSP28335的数据帧位数为64~128位。
CAN协议规定采用帧的形式进行通信,有4种不同类型的帧:
1数据帧:
携带数据从一个发送节点到一个接收节点;
2远程帧:
它被一个节点发送出去用以请求发送具有相同标识符的数据帧,通过发送远程帧,一个节点需要的数据可以通过请求另一个节点发送相应的数据帧来获得,数据帧和相应的远程帧使用相同标识符;
3错误帧:
在总线错误检测时由任意节点发送的帧;
4超载帧:
在前后两个数据帧或远程帧之间提供一个额外的延迟。
通信报文的优先级由标识符决定,标识符数值越小,优先级越高。
最高优先级的报文在总线仲裁的过程中获得总线的访问权,低优先级报文在下一个总线空闲自动重发。
CAN2.0B协议的数据帧格式如下图所示:
对于CAN2.0B协议的消息,其标识符扩展位IDE(MSGID[31])必须置1,由此可知给DSP的邮箱初始化标识符ID时,其16进制赋值的最高位至少应当为8.
在不同的系统中,CAN总线的波特率可以不同,其可适应的信息传输距离也不同;但在同一个系统中,其总线波特率必须一致,所以DSP28335在初始化波特率时,A路和B路应当同时进行一致的初始化。
2.2CAN总线电平
CAN总线的理论电平如下图所示:
高速CAN与低速CAN在总线电平上有区别,如下图所示:
高速CAN与低速CAN的高速低速之分在于支持的总线波特率不一样。
实验用的开发板上的收发器PCA82C250第8脚接地,故为高速CAN模式。
高速CAN为提高通信的抗干扰性和可靠性,应进行光耦隔离。
开发板的CAN接口部分电路如下图所示:
2.3CAN总线上的120欧电阻
CAN总线终端以及各个节点终端通常均有120欧电阻,其作用在于匹配总线阻抗,提高数据通信的抗干扰性及可靠行,有效地增强信号强度。
高频信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,根据传输线理论,终端电阻可以吸收网络上的反射波,使信号到达传输线末端后不反射。
两个终端电阻并联后的值应当基本等于传输线在通信频率上的特性阻抗。
终端电阻典型值为120欧姆.
在网络连接线非常短、临时或实验室测试时也可以不使用终端电阻。
2.4DSP的CAN时钟模块
CAN的时钟频率
其中
,
为波特率预定标寄存器,用于将系统时钟分频为CAN时钟,
。
若采用3次采样模式,必须满足
。
CAN总线上的时间周期长度由
、
以及
决定:
,
;
,
(注意
必须大于或等于
);
波特率
2.5邮箱初始化例程注解
voidInitMboxA0(Uint32MID,Uint16DTL,Uint16TR)
{
structECAN_REGSECanaShadow;
EALLOW;
ECanaShadow.CANTIOC.all=ECanaRegs.CANTIOC.all;
ECanaShadow.CANTIOC.bit.TXFUNC=1;
ECanaRegs.CANTIOC.all=ECanaShadow.CANTIOC.all;
ECanaShadow.CANRIOC.all=ECanaRegs.CANRIOC.all;
ECanaShadow.CANRIOC.bit.RXFUNC=1;
ECanaRegs.CANRIOC.all=ECanaShadow.CANRIOC.all;
ECanaShadow.CANMC.all=ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.SCB=1;//选择eCAN模式,将32个邮箱寄存器全部使用起来
ECanaRegs.CANMC.all=ECanaShadow.CANMC.all;
ECanaMboxes.MBOX0.MSGCTRL.all=0x00000000;//此语句含邮箱号,可以修改
//以下状态或标志寄存器通过写1清零//
ECanaRegs.CANTA.all=0xFFFFFFFF;
ECanaRegs.CANRMP.all=0xFFFFFFFF;
ECanaRegs.CANGIF0.all=0xFFFFFFFF;
ECanaRegs.CANGIF1.all=0xFFFFFFFF;
//配置邮箱收发方向//
ECanaShadow.CANMD.all=ECanaRegs.CANMD.all;
ECanaShadow.CANMD.bit.MD0=TR;//此语句含邮箱号,可以修改
ECanaRegs.CANMD.all=ECanaShadow.CANMD.all;
//配置标识符ID,写标识符前必须关闭使能位//
ECanaShadow.CANME.all=ECanaRegs.CANME.all;
ECanaRegs.CANME.bit.ME0=0;//此语句含邮箱号,可以修改
ECanaRegs.CANME.all=ECanaShadow.CANME.all;
ECanaMboxes.MBOX0.MSGID.all=MID;//此语句含邮箱号,可以修改
//标识符配置结束后使能相应的邮箱//
ECanaShadow.CANME.all=ECanaRegs.CANME.all;
ECanaShadow.CANME.bit.ME0=1;//此语句含邮箱号,可以修改
ECanaRegs.CANME.all=ECanaShadow.CANME.all;
//设置数据长度的字节数//
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC=DTL;//此语句含邮箱号,可以修改
EDIS;
}
2.6消息发送和接收
1、消息发送
//往发送邮箱中写数据,分别写低32位4字节和高32位4字节
ECanaMboxes.MBOX0.MDL.all=MDL;
ECanaMboxes.MBOX0.MDH.all=MDH;
//置位准备发送,将发送请求位置位,使能邮箱发送功能
ECanaShadow.CANTRS.all=0;
ECanaShadow.CANTRS.bit.TRS0=1;
ECanaRegs.CANTRS.all=ECanaShadow.CANTRS.all;
do
{
ECanaShadow.CANTA.all=ECanaRegs.CANTA.all;
}while(ECanaShadow.CANTA.bit.TA0==0);//当邮箱的消息被成功发送时,发送应答位TA将置1
ECanaShadow.CANTA.bit.TA0==1;//写1清零,准备判别下一次发送与否
ECanaRegs.CANTA.all=ECanaShadow.CANTA.all;
2、消息的接收
structECAN_REGSECanaShadow;
ECanaShadow.CANRMP.all=ECanaRegs.CANRMP.all;
do{}
while(ECanaShadow.CANRMP.bit.RMP1!
=1);//当接收消息成功时,接收待决位RMP0置位为1
ECanaShadow.CANRMP.bit.RMP1=1;//接收消息待决位通过写1清零
ECanaRegs.CANRMP.all=ECanaShadow.CANRMP.all;
2.7CAN的适配器存在的一些问题
①过滤器配置明显不对但任然能接受数据:
②波特率是2倍关系
3DSP的32位浮点运算测试
TESTCOUNT1对应于正弦运算的时钟周期数
TESTCOUNT2对应于加法运算的时钟周期数
TESTCOUNT3对应于除法运算的时钟周期数
1、单单次运算:
2、循环10次运算:
3、循环100次运算:
4、结果分析:
按多次统计求平均的原则,DSP28335的32位浮点运算时间为:
单次加法:
20个时钟周期,约为
单次除法:
250个时钟周期,约为
单次正弦:
82个时钟周期,约为
5、补充说明:
系统时钟周期为
6、浮点运算正弦值并画图
4DSP定时器中断
4.1DSP28335的定时器
TMS320F28335一共有3个32位CPU定时器,其中定时器0可以被用户使用,定时器1和定时器2则被保留为实时操作系统使用(这是文件《DSP2833x_CpuTimers.c》中的说法,而手册《2823xSystemControlandInterruptsReferenceGuide》中讲0和1可用而2被保留。
这一点如有必要需更多的测试)。
本程序中主要涉及的定时器寄存器有计数寄存器TIM(32位,分高16位和低16位)、周期寄存器PRD(32位,分高16位和低16位)、定时器分频寄存器TDDR(16位,分高8位和低8位)以及定时器控制寄存器TCR。
4.2定时器分频
本程序定时器的分频值为零,则进行1分频,定时器周期等于系统输出时钟周期。
如下图,分频值可以在文件DSP2833x_CpuTimers.c中的函数voidInitCpuTimers(void)中去修改。
4.3计数器计数
每过一个定时器时钟周期,定时器计数器寄存器TIM减1,当TIM递减到0时,产生一个CPU中断信号并将PRD的值重载到TIM中,TIM继续递减计数。
详参资料《2823xSystemControlandInterruptsReferenceGuide》第62页,如下图:
4.4定时器时钟周期
定时器时钟周期
即对系统时钟进行分频而得到。
注:
详参任润柏,周荔丹等.TMS320F28x源码解读,北京:
电子工业出版社,2010,24~37.
5DSP看门狗复位
5.1看门狗时钟
看门狗时钟发生器:
WDCLK=CLKOUT/512,当HALT时停止。
6-bits预定标WDPS选择:
将WDCLK再分频后送给看门狗定时器。
WDPS为WDCR的2~0位。
其6-bits配置作用如下:
000WDCLK=OSCCLK/512/1;
001WDCLK=OSCCLK/512/1;
010WDCLK=OSCCLK/512/2;
011WDCLK=OSCCLK/512/4;
100WDCLK=OSCCLK/512/8;
101WDCLK=OSCCLK/512/16;
110WDCLK=OSCCLK/512/32;
111WDCLK=OSCCLK/512/64;
5.2看门狗系统控制和状态寄存器(SCSR)
高13位均保留,只控制低3位:
5.3看门狗计数寄存器(WDCNTR)
计数器WDCNTR:
低8位为计数器,当低8位溢出时,产生一个复位信号。
此寄存器为只读寄存器。
5.4看门狗重启管理器(WDKEY)
利用软件定时向看门狗复位控制寄存器WDKEY写“0x55+0xAA”序列,即可以复位看门狗计数器:
voidServiceDog(void)
{
EALLOW;
SysCtrlRegs.WDKEY=0x0055;
SysCtrlRegs.WDKEY=0x00AA;
EDIS;
}
看门狗重启管理器(WDKEY)的低8位参与控制,只有先写入55h后写入AAh后重启看门狗计数器。
不是此顺序写入55h或AAh,则无效。
写入其他数值时则产生复位信号。
5.5看门狗控制寄存器(WDCR)
看门狗检测位WDCHK:
需要向WDCHK(2~0)写1、0、1,写其他任何值都会引起器件内核的复位(看门狗已经使能),此检测位执行读操作将返回0、0、0.
6软件报错与处理
6.1CCSSetup中仿真器的配置
新的开发板买回来,安装软件不连接硬件,直接打开后报错:
Errorinitializingemulator
I/OPort=510
BoardName:
F28335XDS510USBEmulator
CpuName:
cpu_0
Abort:
CloseCodeComposerStudio.
Retry:
Trytoinitializetheemulatoragain.
Ignore:
Ignoretheinitializationerrorandstart
potentiallywithouttargetdebuggingaccess.
Diagnostic:
Rundiagnosticutility.
问题解决:
①如下图,一定要在family中找到F28XX,而不能在C28XX中去选F28335
②在属性配置中一定设成下图所示的选项:
6.2Connect报错——1145——换仿真器解决
Errorconnectingtothetarget:
Error0x00001200/-1145
Errorduring:
OCS,Target,
Unrecoverableemulationerror
I/OPort=240
BoardName:
F28335XDS510-USB2.0emulator
CpuName:
TMS320C2800_0
Abort:
CloseCodeComposerStudio.
Retry:
Trytoconnecttothetargetagain.
Cancel:
Remaindisconnectedfromthetarget
Diagnostic:
Rundiagnosticutility.
继续RETRY之后,会出下面错误——1037
再RETRY一次,错误变成了1031
此时关闭软件,系统还总会出现下面的错误
解决:
用了一个ICETEK_5100USBV2.0仿真器,此问题解决。
看来仿真器可能存在匹配或硬件等问题。
6.3CAN口测试A发B收,数据发不出去
一般都是导线没有稳定连接而造成。
6.4编译Pwm测试文件出错
error:
symbol"_main"redefined:
firstdefinedin
"E:
\\coreboard_Examples\\28335_ePWM_generate\\Debug\\CAN.obj";redefinedin
"E:
\\coreboard_Examples\\28335_ePWM_generate\\Debug\\ePWM_Generate.obj"
warning:
creating".stack"sectionwithdefaultsizeof0x400;usethe-stack
optiontochangethedefaultsize
error:
errorsencounteredduringlinking;"./Debug/28335_ePWM_generate.out"not
built
经检查,在工程的源文件中多导入了一个无关文件
多的can文件中也调用了main函数,所以出现编译错误。
6.5couldnotopensourcefile"DSP2833x_Device.h
1出现这个错误,需要对工程的buileoption做设置如下:
②打开buildoption:
复制图中的选中部分$(Proj_dir),打开Category的倒数第二项Preprocessor
③将之粘贴到图示鼠标箭头处,并在之后写Include,即将编译制定到当前工程中,就可以打开头文件了。
7备注与注意事项
1、CCS开发环境的工程文件夹的路径中不能出现中文,否侧工程打开出错。
2、当前USB2CAN适配器的串口波特率的配置为115200bps。
3、CAN通信在编译可执行文件时,如果在原工程中做修改,需要将原来工程中的DSP2833x_eCAN.C移除,因为该文件与新编写的三个初始化函数有近似的功能。
就8月3日进行的测试来看,A路CAN的0号邮箱数据字节位失控、1号和2号邮箱的ID标识符寄存器失控。
8附录C源程序
8.1PWM初始化及脉冲产生函数
#include"DSP2833x_Device.h"//DSP2833xHeaderfileIncludeFile
#include"DSP2833x_Examples.h"//DSP2833xExam