DSP28335的调试总结,这是一份总结很全面的资料,我在学
4.28335DSP指令测试总结(精)

符号说明dma 数据存储器地址的低七位(7LSBshift 左移位数(0~15位shift2 左移位数(0~7位n(x 指定下一次辅助寄存器的(0~7位的数值k 8位短立即数lk 16位短立即数m 选择如下数据之一0 表示对ST0操作1 表示对ST1操作PA 16位的IO端口或IO映射的寄存器pma 16位的程序地地址空间ind 是一个间接寻址变量,可以把它担供如下7种符号之一:* *+ *- *0+ *0- *BR0+ *BR0-不变增1减1加/减变址量反向进位加/减变址量加/减变址量其实就是基址变址寻址方式,可以很方便的实现常数数组的查找。
(反向进位方式是指加或减是从最高位开始运算,并将进位或借位送给低位,此种方法特别适合于FFT运算。
后面的四种操作符都是与AR0中的内容进行加减ST0ARP ST0<13-15> 辅助寄存器指针,加载ARP,则原ARP值送ARB.只有当执行LST #1时,ARB与ARP加载相同的值,执行LST #0时只改变ARP,不改变ARB。
OV ST0<12> 溢出标志位,当OV=1时,复位,溢出条件转移指令,无溢出条件转指令,LST指令发生时才可以被清0。
OVM ST0<11> 溢出方式位,OVM=0时,累加器结果正常溢出;OVM=1时,正溢出,ACC=7FFF FFFFH,负溢出,ACC=8000 0000H。
INTM ST0<9> 中断屏蔽位,INTM=0,允许响应所有的可屏蔽中断;INTM=1时则禁止。
对不可屏蔽中断RS、NMI没有影响。
INTM不受LST指令影响。
复位时该位为1,响应可屏蔽中断时,该位被自动置1。
退出中断时是否要手动开中断?RS中断、SETC INTM、CLRC INTM可对INTM进行设置。
DP ST0<0-8>数据存储器页指针,9位的DP与一个指令的低七位一起形成一个16位的直接寻址地址。
TMS320F28335经验若干要点

TMS320F28335开发过程中常见问题总结1.SPI驱动TLE7241E出现返回值不对的问题。
主要是由于时序的不对,导致TLE7241E输入采样时数据还没有建立,所以TLE7241E 收到的命令不正确,所以返回值不正确。
2.SPI驱动EEPROM时,如果用金属物触到clock pin时,能正确运行,否则不能正确运行。
出现次问题也是由于时序的问题,金属物触到clock导致clock出现微小幅度的偏移,导致正好和eeprom 的时序对上,而不用金属物触碰时时序不正常,当使dsp MOSIpin数据发送提前半个周期后,eeprom工作正常。
3.示波器有时会导致显示的波形被消尖,所以用示波器测量时周期不能太大。
TMS320F28335笔记-I2C1.响应和非响应的区别是什么?关于i2c的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。
因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和这个响应位相关联。
在这个脉冲期间,发出响应的从设备必须将SDA拉低并在时钟脉冲的高电平期间保持住。
这表示该设备给出了一个ACK。
如果它不拉低SDA 线,就表示不响应(NACK)。
另外,在从机(发送方)发送完最后一个字节后主设备(接收方)必须产生一个不响应位,用以通知从机(发送方)不要再发送信息了,这样从机就知道该将SDA释放了,而后,主机发出一个停止位给slaver。
总结下,i2c通讯中,SDA 和 SCL 都是有主机控制的,从设备只是能够将SDA线拉低而已。
对于SCL线,从机是没有任何能力去控制的。
从机只能被动跟随SCL再说的清楚些:主机发送数据到从机的状态下:主机控制SCL信号线和SDA信号线,从机只是在SCL线为高的时候去被动读取SDA线。
主机读取从机的数据:主机来发出时钟信号,从机只是保证在时钟信号为高电平的时候的SDA的状态而已。
【心得体会】dsp实验心得体会

【心得体会】dsp实验心得体会在进行dsp实验的过程中,我收获了很多宝贵的经验和启示。
首先,在实验前,我深入了解了dsp的基本原理和相关的知识,为实验的顺利进行打下了坚实的基础。
其次,在实验过程中,我注重细节和精确度,时刻保持专注和耐心。
这对于实验结果的准确性和可靠性起到了至关重要的作用。
在实验过程中,我还学会了如何合理安排时间和资源。
由于dsp实验需要大量的计算和数据处理,我学会了如何高效地利用计算机和相关软件工具。
我学会了如何合理分配时间,以确保实验的顺利进行,并在规定的时间内完成实验任务。
在实验的过程中,我也遇到了一些问题和挑战。
例如,某些实验步骤需要复杂的编程和算法设计,我需要仔细思考和分析,才能找到解决问题的方法。
同时,我还需要不断调整和改进实验方案,以确保实验的准确性和可行性。
通过这次dsp实验,我不仅学到了专业知识和技能,还培养了自己的分析和解决问题的能力。
我学会了如何从不同的角度思考和分析问题,并找到最合适的解决方案。
我还学会了如何与团队成员合作,共同完成实验任务。
通过反思和总结,我认识到在进行dsp实验时,需要注重细节和精确度。
只有保持专注和耐心,才能获得准确和可靠的实验结果。
同时,我还意识到在实验过程中,需要灵活调整实验方案,并不断改进和优化。
只有不断学习和提高自己,才能在dsp领域取得更好的成绩。
最后,我想给其他学习dsp的同学一些建议。
首先,要注重理论知识的学习,建立扎实的基础。
其次,要勇于尝试和实践,通过实验来巩固和应用所学知识。
同时,要善于思考和分析问题,不断寻找解决问题的方法和途径。
最重要的是,要保持学习的热情和持续的努力,只有这样,才能在dsp领域获得更好的成长和发展。
总而言之,通过这次dsp实验,我不仅学到了专业知识和技能,还培养了自己的分析和解决问题的能力。
我学会了如何从不同的角度思考和分析问题,并找到最合适的解决方案。
通过反思和总结,我认识到在进行dsp实验时,需要注重细节和精确度,并不断改进和优化实验方案。
关于28335的CAN通信问题总结

关于28335的CAN通信问题总结第一篇:关于28335的CAN通信问题总结关于28335的CAN通信问题总结最近在调试28335的CAN通信,调试的过程中遇到了关于一直等待发送成功TA置位的问题:do{ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;} while(ECanaShadow.CANTA.bit.TA25 == 0);// Wait for TA25 bit to be set.这是TI提供的A to B 的工程中的等待发送成功标志置位等待,该程序的工程名虽然是A to B,但是程序中并没有对B口接收邮箱进行ID,方向等初始化,仅仅是对A口的25邮箱(不同的例子可能有些区别)进行发送初始化并且使能了发送,所以这里我的测试是将A口接到我的USB接口的CAN卡上,与PC机通信。
硬件问题:1、画板子时28335 CAN的GPIO口的定义,就是要确认画板子的时候是否将CAN口的输入和输出口给定义正确,例如有可能就会将DSP的CANRXB口接到CAN驱动IC的TX脚上去,我测试的板子就犯了这样坑爹的错误;-_-|2、驱动IC的选择,CAN 通信需要接专门的驱动IC才能通信,而不能简单的将28335的CANTX和CANRX连接进行通信。
CAN协议经过ISO标准化后有ISO11898标准(125K---1Mbps)和ISO11519-2(10K-----125Kbps)标准两种,这两种协议的物理层的规格是不一样的,其总线连接方式也是不同的,两种规格需要有专门的驱动IC与之对应。
一般采用的是ISO11898协议(总线终端电阻为120欧姆),常用的IC有HA13721RPJE/PCA82C250/Si9200/CF15这几种,本次调试用的是Si9200驱动IC;3、驱动IC的供电电压,由于DSP的GPIO输出是3.3V,所以有些板子上的CAN驱动IC供电也是3.3V,所以在这里要确定所用驱动IC在3.3V的供电电压下是否能正常工作,在网上就看见有些网友说有些驱动IC在3.3V下是不能正常工作的,这个时候设计电路时就可以考虑用磁隔离芯片将DSP和驱动IC隔离开,驱动IC用5V供电;4、终端电阻的问题,如果你采用的是ISO11898协议的驱动芯片,则你要做通信总线上接上两个120欧姆的终端电阻;软件问题:1、28335 CAN的复用GPIO口的设置,这一点28335和2812的是有区别的,2812的CAN口对应的IO是固定的,而28335确实不确定的,像A口就有(GPIO30,GPIO31)和(GPIO18,GPIO19)两种选择,B口有(GPIO8,GPIO10)、(GPIO12,GPIO13)、(GPIO16、GPIO17)和(GPIO20、GPIO21)。
dsp28335开发板中文资料汇总(dsp28335最小系统

4.JTAG接口电路
TMS320F28335具有符合IEEE1149.1标准的片内扫描仿真接口
(JTAG),该接口通过仿真器直接访问。为了能与仿真器通信,所设计的最
小系统板上应有14引脚的仿真接口,其中的EMU0和EMU1信号必须通过
上拉电阻连接至电源,其中上拉电阻为4.7kΩ。
元件。
(2)电源模块输出端使用保护电容,其值不能小于10μF,
且不能使用贴片电容或高频陶瓷电容,否则工作不稳定。
这里采用的是TPS767D301电源芯片两路电源输出为DSP芯片和
外围设备供电。系统内核电压1.9V和I/O口供电电压3.3V。
dsp28335封装
dsp28335初始化程序
dsp28335引脚图及功能
小结:
以上给出了TMS320F28335的最小应用系统的设计电路,利用该
电路实时在线对TMS320F28335系统仿真开发。但该系统仅是一个最小的应
用系统,具体模块的应用系统应视实际需要设计。
注意事项:
(1)时钟电路采用内部晶体振荡器,在电路配置时应尽量靠近
TMS320F28335放置,引线要短且粗,电容要稳定,容值准确,应远离发热
TMS320F28335,其具有片上Flash,OTPROM及SARAM存储器在设计最小
应用系统时无需考虑外部存储器接口问题。
下面是F28335最小应用系统的一种连接方式:
1.复位电路设计
首先介绍一下MAX811芯片,MAX811芯片保证了DSP芯片的正常
复位。
VCC:电源
GND:直流地
/RST:自动复位端(上电复位端),低电平有效。在VCC电压低于
F28335ePWM模块使用总结

F28335ePWM模块使用总结展开全文F28335 ePWM模块使用总结分类: DSP数字信号处理 2011-05-15 10:20 619人阅读评论(0) 收藏举报这几天用28335做一个逆变器,用到了28335 ePWM模块,刚开始对ePWM操作很模糊,无从下手,在网上也找了很多资料,发现看完了之后更加模糊,最后下定决心,看TI 28XX ePWM模块的英文文档,通过二天的努力,终于攻下了ePWM模块,现讲学习总结写出来,和学习28335的朋友们一起分享,也希望朋友们也把你们关于28335的一些好的学习心得写出来,大家相互交流下。
28335在TI C2000系列DSP里面比较新的,有关资料基本上都是英文的,很不利于初学者,所以已经在学习或学习过28335的朋友可以相互帮助相互交流下,与人方便就是与己方便。
言归正传,28335 ePWM模块总结如下:1、ePWM模块总共有7个模块:(1)时间基准模块 ----------TB(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 两通道配置成互补模式,我做的逆变器就是将ePWM配置成互补模式。
死区时间可以编程确定;PC:产生高频PWM载波信号;TZ:当外部有错误信号产生时,对PWM输出进行相应处理,比如全置高,或拉低,或置为高阻态,从而起到保护作用。
DSPTMS320F28335---GPIO学习心得

DSPTMS320F28335---GPIO学习⼼得DSPTMS320F28335器件⽀持 88 个 GPIO 引脚。
GPIO 控制和数据寄存器被映射到外设帧 1 以在寄存器上启⽤ 32 位运⾏(连同 16 位运⾏)。
表 4-15显⽰了 GPIO 寄存器映射。
GPACTRL-------控制寄存器GPAQSEL1------限定器选择1寄存器GPAQSEL2-----限定器选择2寄存器GPAMUX1------复⽤1寄存器GPAMUX2------复⽤2寄存器GPAPUIR------⽅向寄存器GPAPUD-------上拉禁⽤寄存器GPIO模块配置步骤:步骤1。
计划的器件引脚:步骤2。
启⽤或禁⽤内部上拉电阻:步骤3。
选择输⼊的资格:步骤4。
选择引脚功能:步骤5。
数字通⽤I / O,选择⽅向的脚:步骤6。
选择低功耗模式唤醒步骤7。
选择外部中断源GPIO数据寄存器GPADAT 0x6FC0 2 GPIO A 数据寄存器(GPIO0 ⾄ 31)GPASET 0x6FC2 2 GPIO A 数据设定寄存器(GPIO0 ⾄ 31)GPACLEAR 0x6FC4 2 GPIO A 数据清除寄存器(GPIO0 ⾄ 31)GPATOGGLE 0x6FC6 2 GPIO A 数据切换寄存器(GPIO0 ⾄ 31)GPIO输⼊采样时间设置:如果SYSCLKOUT=150M,max=6.67ns min=3.4nsTI⽂档: TSM320X2833X System control and interrupt regerence guide ----- SPRUFBO0~87 共88个I/O端⼝,其中GPIO0~GPIO31可以配置成8个核⼼中断。
28335的GPIO⼝可以分为三组,分别为A⼝(GPIO0~GPIO31),B⼝(GPIO32~GPIO63)和C⼝(GPIO64~GPIO87)。
1 GPXCTRL (A,B) 设定采样频率2 GPXQSELX(A,B,1,2) 采样次数3 GPXDIR(A,B,C)数据⽅向设置4 GPXPUD 设置内部上拉与否貌似设置成上拉之后就会变成外设功能引脚5 GPXDAT 作为输出时:写⼊1 0 对应输出⾼低电平作为输⼊时:读⼊1 0 对应输⼊⾼低电平6 GPXSET 作为输出时:写⼊1会拉⾼引脚7 GPXCLEAR 作为输出时:写⼊1会拉低引脚8GPXTOGGLE 作为输出时:写⼊1会输出⽬前引脚状态相反的电平 1---0 0---19 GPIOXINTnSEL n=1~7 。
DSP28335的调试总结,这是一份总结很全面的资料,我在学

DSP28335的调试总结,这是一份总结很全面的资料,我在学习开发板的一些总结,希望能得到同行的帮助,愿与大家一起学习和分享1DSP的PWM信号1.1简介DSP28335共12路16位的ePWM,能进行频率和占空比控制。
ePWM的时钟TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。
初始化程序采用的计数模式为递增计数模式。
在递增计数模式下,时基计数器从零开始增加,直到达到周期寄存器值(TBPDR)。
然后时基计数器复位到零,再次开始增加。
PWM信号周期与频率的计算如下:1.2端口对应关系通道相应PWM的A/B对应JP0B端口号1ePWM1A92ePWM1B103ePWM2A114ePWM2B125ePWM3A136ePWM3B147ePWM4A158ePWM4B169ePWM5A1710ePWM5B1811ePWM6A1912ePWM6B20说明:JP0B的端口号按“Z”字形顺序数。
1.3初始化程序注释void InitPwm1AB(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位来使能load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // B模块比较使能,通过写0来清除SHDWBMODE位来使能load on CTR=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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP28335的调试总结,这是一份总结很全面的资料,我在学习开发板的一些总结,希望能得到同行的帮助,愿与大家一起学习和分享1DSP的PWM信号1.1简介DSP28335共12路16位的ePWM,能进行频率和占空比控制。
ePWM的时钟TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。
初始化程序采用的计数模式为递增计数模式。
在递增计数模式下,时基计数器从零开始增加,直到达到周期寄存器值(TBPDR)。
然后时基计数器复位到零,再次开始增加。
PWM信号周期与频率的计算如下:1.2端口对应关系通道相应PWM的A/B对应JP0B端口号1ePWM1A92ePWM1B103ePWM2A114ePWM2B125ePWM3A136ePWM3B147ePWM4A158ePWM4B169ePWM5A1710ePWM5B1811ePWM6A1912ePWM6B20说明:JP0B的端口号按“Z”字形顺序数。
1.3初始化程序注释void InitPwm1AB(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位来使能load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // B模块比较使能,通过写0来清除SHDWBMODE位来使能load on CTR=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种不同类型的帧:①数据帧:携带数据从一个发送节点到一个接收节点;②远程帧:它被一个节点发送出去用以请求发送具有相同标识符的数据帧,通过发送远程帧,一个节点需要的数据可以通过请求另一个节点发送相应的数据帧来获得,数据帧和相应的远程帧使用相同标识符;③错误帧:在总线错误检测时由任意节点发送的帧;④超载帧:在前后两个数据帧或远程帧之间提供一个额外的延迟。
通信报文的优先级由标识符决定,标识符数值越小,优先级越高。
最高优先级的报文在总线仲裁的过程中获得总线的访问权,低优先级报文在下一个总线空闲自动重发。
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 的时钟频率 SYSCLKOUT CANCLOCK BRP = 其中BRP=BRPreg+1,BRPreg 为波特率预定标寄存器,用于将系统时钟分频为CAN 时钟,1BRP 256≤≤。
若采用3次采样模式,必须满足BRP 5≥。
CAN 总线上的时间周期长度由TSEG1、TSEG2以及BRP 决定:TSEG1=TSEG1reg+1,1TSEG116≤≤;TSEG2=TSEG2reg+1,1TSEG28≤≤(注意TSEG1必须大于或等于TSEG2);波特率SYSCLKOUT Baud rate=BRT(TSEG1+TSEG2+1)⨯2.5邮箱初始化例程注解void InitMboxA0(Uint32MID,Uint16DTL,Uint16TR){struct ECAN_REGS ECanaShadow;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将置1ECanaShadow.CANTA.bit.TA0 == 1; //写1清零,准备判别下一次发送ECanaRegs.CANTA.all=ECanaShadow.CANTA.all;2、消息的接收struct ECAN_REGS ECanaShadow;ECanaShadow.CANRMP.all = ECanaRegs.CANRMP.all;do{}while(ECanaShadow.CANRMP.bit.RMP1 != 1 );//当接收消息成功时,接收待决位RMP0置位为1ECanaShadow.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个时钟周期,约为0.1333s单次除法:250个时钟周期,约为1.6667s μ 单次正弦:82个时钟周期,约为0.5533s μ 5、补充说明:系统时钟周期为SYSCLKOUT 1/1500.0067 6.7MHz s ns μ=== 6、浮点运算正弦值并画图4 DSP 定时器中断4.1 DSP28335的定时器TMS320F28335一共有3个32位CPU 定时器,其中定时器0可以被用户使用,定时器1和定时器2则被保留为实时操作系统使用(这是文件《DSP2833x _CpuTimers .c 》中的说法,而手册《2823x System Control and Interrupts Reference Guide 》中讲0和1可用而2被保留。