DSP28335的调试总结,这是一份总结很全面的资料,我在学

合集下载

4.28335DSP指令测试总结(精)

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经验若干要点

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实验,我不仅学到了专业知识和技能,还培养了自己的分析和解决问题的能力。

我学会了如何从不同的角度思考和分析问题,并找到最合适的解决方案。

通过反思和总结,我认识到在进行dsp实验时,需要注重细节和精确度,并不断改进和优化实验方案。

关于28335的CAN通信问题总结

关于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最小系统

dsp28335开发板中文资料汇总(dsp28335最小系统
外围设备供电。系统内核电压1.9V和I/O口供电电压3.3V。
4.JTAG接口电路
TMS320F28335具有符合IEEE1149.1标准的片内扫描仿真接口
(JTAG),该接口通过仿真器直接访问。为了能与仿真器通信,所设计的最
小系统板上应有14引脚的仿真接口,其中的EMU0和EMU1信号必须通过
上拉电阻连接至电源,其中上拉电阻为4.7k&Omega;。
元件。
(2)电源模块输出端使用保护电容,其值不能小于10&mu;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模块使用总结

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---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的调试总结,这是一份总结很全面的资料,我在学

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。

dsp课程设计28335摘要

dsp课程设计28335摘要

dsp课程设计28335摘要一、教学目标本课程的教学目标分为三个维度:知识目标、技能目标和情感态度价值观目标。

1.知识目标:通过本课程的学习,学生需要掌握DSP28335的基本结构、工作原理和编程方法,理解其在中断、定时器、ADC和PWM等方面的应用。

2.技能目标:学生能够运用DSP28335进行实际项目的开发和调试,具备使用相关开发工具和软件的能力。

3.情感态度价值观目标:培养学生对嵌入式系统的兴趣,使其认识到DSP在现代科技领域的重要性和广泛应用,激发学生的创新精神和团队合作意识。

在制定教学目标时,充分分析了课程性质、学生特点和教学要求,确保目标具有可衡量性和具体性,以便于学生和教师了解课程的预期成果。

二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.DSP28335的基本结构:学生需要了解DSP28335的内部结构,包括CPU、内存、外围接口等。

2.DSP28335的工作原理:学生需要学习DSP28335的启动、中断、事件管理等方面的知识。

3.DSP28335的编程方法:学生需要掌握DSP28335的编程语言和编程技巧,包括C语言和汇编语言。

4.DSP28335的应用案例:学生需要学习DSP28335在实时控制、信号处理等领域的应用实例。

教学内容按照教材的章节顺序进行安排,确保内容的科学性和系统性。

三、教学方法为了达到课程目标,本课程将采用多种教学方法,包括:1.讲授法:教师通过讲解DSP28335的基本概念和原理,使学生掌握相关知识。

2.讨论法:学生分组讨论实际案例,培养学生的思考能力和团队合作意识。

3.案例分析法:分析DSP28335在实际项目中的应用,帮助学生理解理论知识。

4.实验法:学生动手进行实验,巩固所学知识,提高实际操作能力。

通过多样化的教学方法,激发学生的学习兴趣和主动性,提高教学质量。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:选用《DSP28335原理与应用》作为主教材,辅助以相关参考书籍。

DSP28335SCI总结

DSP28335SCI总结

DSP28335SCI总结2.1 SCI模块寄存器概述表2SCI-A寄存器名称地址占用空间功能描述SCICCR 0x0000 7050 1 SCI-A 通信控制寄存器SCICTL1 0x0000 7051 1 SCI-A 控制寄存器1SCIHBAUD 0x0000 7052 1 SCI-A 波特率设置寄存器高字节SCILBAUD 0x0000 7053 1 SCI-A 波特率设置寄存器低字节SCICTL2 0x0000 7054 1 SCI-A 控制寄存器2SCIRXST 0x0000 7055 1 SCI-A 接收状态寄存器SCIRXEMU 0x0000 7056 1 SCI-A 接收仿真数据缓冲寄存器SCIRXBUF 0x0000 7057 1 SCI-A 接收数据缓冲寄存器SCITXBUF 0x0000 7059 1 SCI-A 发送数据缓冲寄存器SCIFFTX 0x0000 705A 1 SCI-A FIFO发送寄存器SCIFFRX 0x0000 705B 1 SCI-A FIFO接收寄存器SCIFFCT 0x0000 705C 1 SCI-A FIFO控制寄存器SCIPRI 0x0000 705F 1 SCI-A 极性控制寄存器注意:SCIFFRX、SCIFFTX是FIFO的功能,现在还知道怎么使用。

参考例子使只使能其中的复位、清标志位就行。

最后写复位使能。

第四位:一定设置为0。

不知道有什么作用。

表3 SCI通信控制寄存器(SCICCR)功能描述位名称功能描述7 STOP BITS SCI停止位的个数该位决定了发送的停止位的个数。

接收器仅对一个停止位检查。

0 一个停止位;1 两个停止位;6 PARITY 奇偶校验选择位如果PARITY ENABLE位(SCICCR, 位5)被置位,则PARITY (位6)确定采用奇校验还是偶校验(在发送和接收的字符中奇偶校验位的位数都是1位)。

0 奇校验;1 偶校验;5 PARITY SCI奇偶校验使能位ENABLE 该位使能或禁止奇偶校验功能。

28335烧写工作总结

28335烧写工作总结

28335烧写工作总结工作总结(2011/11/19):DSP装载有16种模式,当前使用的是默认模式也就是FLASH启动模式(所有的模式引脚都是默认高电平,既模式引脚外部不加其它的电路)。

1.添加F28335.GEL, 文件路径:C:\CCStudio_v3.3\cc\gel\F28335.gel;2.添加C:\CCStudio_v3.3\MyProjects\WDPT_STEP(DSP)10\Source\DSP2833x_CodeStartBranch.asm文件,此文件负责上电后程序执行顺序跳转的;3. 修改工程的build option,将LINKER中的Autoinit参数改成:Run-Time Autoinitial;4. 添加DSP281x_Headers_nonBIOS.cmd文件,用于将DSP28头文件中的外设结构与存储器地址对应起来;5. 向工程中添加C:\CCStudio_v3.3\MyProjects\WDPT_STEP(DSP)10\F28335.cmd文件,它是用于flash烧写的CMD文件,用于替换原有的用于RAM中调试的28335_RAM_lnk.cmd文件。

6. 重新编译工程7. 烧写烧写注意事项一、烧写的注意点:1、烧写第一步(擦出)时不能断电或人为停止,否则会造成28335芯片锁死2、在密码区内不能将密码全部设置为0,这样会造成芯片永久锁死烧写步骤一、先把在调试环境下的工程文件的cmd换成烧写所要用的FLASH cmd 文件,Gel文件换成ccs自带的gel 路径为D:\CCStudio_v3.3\cc\gel下,然后编译无错误二、点击tools菜单栏下的on-chip flash programmer,填出烧写对话框三、在填出的对话框中红色部分是对芯片的时钟频率的选择,我们这里用的是外部30M的晶振,经过2分频在通过PLL10倍频。

注意:晶振的平率是根据板子上的晶振所选择的,烧写时芯片最好工作在该芯片的最高频率四、添加最新的API函数,如果API函数较老可以去w网站上下载五、添加你所要烧写的.OUT文件六、点击执行按键,烧写所选的程序七、出现如下图所示的信息说明烧写成功。

DSP28335eCAP模块使用总结

DSP28335eCAP模块使用总结

DSP28335eCAP模块使⽤总结28335DSP的捕获模块(ECAP)的⼀些使⽤总结(转帖)留着⽇后⽤个⼈理解的捕获模块就是在捕捉到跳变时(上升沿或下降沿)将定时器的值存⼊寄存器,通过时间来计算周期和频率。

因为本⼈也是初学,讲不清楚,还请⼤家看下⾯的讲解吧。

有使⽤OMAPL138的亲的话可以⼀起交流⼀下啊~~第⼀:捕获外部信号,可以设置为捕捉信号的上升还是下降沿,该功能⼀般最常⽤;第⼆:计算外部⽅波信号的周期和占空⽐,在这⾥可以分别对CAP1、CAP2、CAP3和CAP4上升沿或下降沿动作进⾏设置,当外部信号和当前CAPx设置⼀致时,并将当前CTR值赋给CAPx寄存器。

这样,可以根据四个CAPx寄存器⾥⾯的值,进⾏捕获的⽅波信号周期和占空⽐的计算。

另外,CTR的变化模式取决于ECap6Regs.ECCTL1.bit.CTRRSTx的设置,如果为‘0’,则动作匹配时,不复位CTR,将⼀直往上增加,直⾄溢出;如果为‘1’,则动作匹配时,复位CTR。

如果,⼀个程序当中,四个CPAx均⽤到的话,假如:CPA1:上升沿CPA2:下降沿CPA3:上升沿CPA4:下降沿对于输⼊信号,第⼀上升沿时,CPA1动作,并且产⽣CEVT1事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA1中;接下来,下降沿时,CPA2动作,并且产⽣CEVT2事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA2中;再接下来,上升沿时,CPA3动作,并且产⽣CEVT3事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA3中;再接下来,下降沿时,CPA4动作,并且产⽣CEVT4事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA4中;接下来在从CPA1往返动作。

这时在⼀个循环⾥,可以利⽤四个CAPx⾥⾯的值进⾏周期和占空⽐的计算。

如果,程序不需要计算输⼊信号的周期和占空⽐,那么可能只要⽤到⼀个CAPx,这时就更简单了。

我的首个DSP (TMS320F28335) LED灯闪烁 项目实验 总结

我的首个DSP (TMS320F28335) LED灯闪烁 项目实验 总结

买视频资料、买书、买开发板(F28335)、各种版本开发环境安装,导入工程、创建工程、了解controlSUITE,终于创建了一个工程,且是按照自己的意愿将代码在开发板上跑起来,现总结如下:实验目的:将开发板上可控的两个LED灯LD3、LD4实现交替闪烁,并在RAM中仿真实验;实验步骤:1、创建工程、且包含main.c文件按照上面的五步操作,然后点击【finish】。

遇到的问题:在第四步如果设置新的工作空间文件夹,在点击【finish】后,应实际的去工作空间文件夹下去看一下,是否确实创建好了。

建议:在点击完【finish】后,项目框架基本创建完成,然后关闭CCS,再次进去看看是否直接进入刚刚创建好的工程。

如果不能最好分析一下原因,重建一次。

我在这里反复了3次,也就是重建3次才成功。

如果可以进入,进入后面的步骤。

2、复制controlSUITE下C:\ti\controlSUITE\device_support\f2833x下面的DSP2833x_common和DSP2833x_headers两个文件夹到所创建的工程目录;复制完成后最好仔细浏览一下每个目录下都有哪些文件。

3、在项目的属性设置对话框中设置include路径如下:4、在main.c添加如下头文件:#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File5、这是可以编译一下,肯定会出错,需要删除一些文件。

如下以上红圈内的文件全部删除6、然后再编译一下,看看有什么问题就自己处理吧,呵呵。

7、现在已经有了基本的函数库、头文件,剩下就是实现LED灯的控制了。

代码如下:#include"DSP2833x_Device.h"// DSP2833x Headerfile Include File#include"DSP2833x_Examples.h"// DSP2833x Examples Include File#define LD3_ON() GpioDataRegs.GPACLEAR.bit.GPIO0 = 1#define LD3_OFF() GpioDataRegs.GPASET.bit.GPIO0 = 1#define LD4_ON() GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1#define LD4_OFF() GpioDataRegs.GPBSET.bit.GPIO34 = 1/** main.c*/int main(void) {InitSysCtrl();DINT;IER = 0x0000;IFR = 0x0000;InitPieCtrl();InitPieVectTable();InitGpio();EALLOW; //这里是DSP对寄存器的安全访问控制成对出现//引脚工作在IO模式GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;// 0 gpio modeGpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;// 0 gpio mode//IO引脚方向设置GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;//1 output 0 inputGpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;//1 output 0 input//IO引脚上下拉设置GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//1 enable pullup 0 disable pullupGpioCtrlRegs.GPBPUD.bit.GPIO34 = 0;//1 enable pullup 0 disable pullup EDIS; //这里是DSP对寄存器的安全访问控制while(1){EALLOW;LD3_ON();LD4_OFF();EDIS;//delay functionEALLOW;LD3_OFF();LD4_ON();EDIS;//delay function}}。

多路电压表dsp实验报告总结

多路电压表dsp实验报告总结

多路电压表dsp实验报告总结
一、实验目的
1、通过实验熟悉 F28335A 的定时器。

2、掌握 F28335A 片内 AD 的控制方法。

二、实验设备
计算机,ICETEK-F28335-A实验箱(或 ICETEK仿真器
+ICETEK-F28335-A系统板+相关连线及电源)。

三、实验原理
1、TMS320F28335A芯片自带模数转换模块特性
12位模数转换模块ADC,快速转换时间运行在25mhz,ADC时钟或12.5MSPS。

6个模拟输入通道(AIN0—AIN15)。

内置双采样-保持器
采样幅度:0-3v,切记输入 ad 的信号不要超过这个范围,否则会烧坏 28335 芯片的。

2、模数模块介绍
ADC模块有16个通道,可配置为两个独立的8通道模块以方便为事件管理器A和 B服务。

两个独立的8通道模块可以级连组成16通道模块。

虽然有多个输入通道和两个序列器,但在ADC内部只有一个转换器,同一时刻只有1路ad进行转换数据。

3、模数转换的程序控制
模数转换相对于计算机来说是一个较为缓慢的过程。

一般采用中
断方式启动转换或保存结果,这样在CPU忙于其他工作时可以少占用处理时间。

设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。

关于TMS320F28335A DSP芯片内的A/D转换器的详细结构和控制方法。

TMS320F28335经验若干要点

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的状态而已。

DSP28335的调试总结,这是一份总结很全面的资料,我在学

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。

28335的一些调试经验

28335的一些调试经验

28335的一些调试经验V4 所有外设配置,针对开发板(除CAN口和EQEP)V5 针对项目,配置了对应的外设(包含有EQEP)V6 针对开发板,对EQEP进行了调试和配置V7 添加控制程序PWM初始状态:(1)上电为低电平(2)初始化GPIO之后变为低电平(InitGPio)(3)InitEPwmGpio之后为低电平(EPWM默认为不上拉(其他的为默认上拉),输入脚)(4)InitEPwm之后,高阻态(通过TZ实现的)(6)如果PWM定时器中断的时间不够,可以改变ET的触发次数值来实现延长中断时间的目的,而不改变PWM的周期TZ调试(1)开发板上由于复用了引脚,因此TZ3~TZ6都不可用,程序中使用了TZ1和TZ2 (要修改为TZ5和TZ6,只需用在InitEPwm中修改两处,以及将InitTzGpio中的注释部分去掉)(2)出现TZ将PWM置于高阻态,测量引脚实际是高电平(3)CBC(适用于电流限制)是出现TZ封锁,TZ消失后恢复(自动的);one shot(适用于短路电流和过流)是一旦出现,就一直保持是封锁状态(但也可以手动恢复://EALLOW;//EPwm1Regs.TZCLR.bit.OST = 1;//EPwm1Regs.TZCLR.bit.INT = 1;// EDIS;(4)通过TZ来进行脉冲的封锁与使能逻辑顺序是:关中断——封脉冲(softforce)——开脉冲(清除flag位)——开中断使用232进行控制,232中断里完成清除flag位与开中断的任务。

(5)将机侧和网侧都改为one shot trip sources,CBC在软件trip的时候不是很好用,无法封锁脉冲SCI调试(1)使能FIFO,设置为接收一个数据便进入一次中断(2)串口调试助手应选择16进制发送,即在发送之前把发送内容变为16进制,这样DSP 收到的数才正确(3)ScicRegs.SCIRXBUF.all里的数在读出之后便无效,使用观察窗口看不到接收到的数(4)如果是9600的波特率,5K的开关频率,限于通讯速率,如果发送使用查询模式,一次中断只发送一个数据。

DSP学习总结(共5则)

DSP学习总结(共5则)

DSP学习总结(共5则)第一篇:DSP学习总结DSP学习总结根据一学期以来对DSP这门课程的学习,学到了很多DSP相关的知识。

了解了如何根据实际需求选择DSP芯片,也知道了C54x的汇编和链接过程,还掌握了C54x的寻址方式。

对于老师的授课方法也有一定的见解。

开始学DSP的时候比较着急,因为也感觉什么都不会,不知道从哪里下手。

手上的资料只有书,后来去图书馆看了两本,一本是《DSP原理与开发》,除了有详细的理论说明之外,还会在每个章节之后配上一个例程,缺点就是错误也不少,估计时间太仓促,校对没做好。

另一本书是清华大学出版社的《TMS320C28X系列DSP的CPU与外设》,是从TI的英文的技术手册翻译过来的,分上、下两册,可以作为工具书,很实用,缺点是没有例子。

书看了一两遍,觉得还是一头雾水。

后来有相应的实验开课,慢慢对DSP有点了解了,刚开始都不知道怎么建PROJECT,后来问了同学,然后再看TI的例程,仿照它的程序框架,边看例程,边对着实验指导书,看得主要是如何初始化,需要对每个外设进行哪些寄存器的初始化,寄存器为什么这样设置,程序如何进中断,如何出中断等等。

边看书边做实验,效率会高很多,也就能慢慢理解了。

对于刚学DSP的新手我觉得掌握一些初级知识就差不多了。

第一步:硬件入门。

1.先学习DSP的硬件基础:了解CPU结构、中断、EMIF、HPI、GPIO、SPI、Timer、供电方式、时钟;2.了解DSP互连的存储器:SDRAM、FLASH、FIFO、双口RAM、SDSRAM 等不需深入研究;3.了解CPLD/FPGA的硬件结构、连接原理、VerilogHDL编程语言需深入研究;4.了解DSP Bootloader不需深入研究;5.了解DSP和外部通信的接口:PCI、USB、LAN、UART等,有时间可以看看DM642的VideoPort第二步:工具入门。

1.学习数字电路、模拟电路、电路分析的知识;2.学好一种PCB绘制软件如Protel DXP2006;3.学习信号完整性、学习传输线理论,特性阻抗知识;关于老师上课的方式我认为:1.太多的理论知识枯燥乏味,因为有实验课,我觉得老师可以根据实验要做的内容在课堂上深入讲解,这样在讲述的同时能让同学们认真听,认真记以便于实验课程的顺利完成,比纯理论效果会好点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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被保留。

相关文档
最新文档