28335外设使用注意事项
- 格式:doc
- 大小:21.00 KB
- 文档页数:1
TMS320x2833x,2823xDSC接口扩展 (XINTF)参考指南文献编号:SPRU949DSeptember2007–Revised January 2010前言 (5)1 功能描述 (7)1.1与TMS320x281x XINTF的区别 (7)1.2与TMS320x2834x XINTF的区别 (8)1.3访问XINTF空间 (8)1.4写操作紧跟读操作的流水线保护 (9)2 XINTF功能配置 (10)2.1外部接口(XINTF)配置寄存器及时序寄存器的设置 (10)2.2XINTF时钟 (11)2.3写缓存 (12)2.4每个XINTF区域的访问建立/激活/跟踪状态的定时 (12)2.5对每个区采样XREADY (13)2.6储体转接 (13)2.7区数据总线宽度 (14)3 外部DMA支持(XHOLD,XHOLDA) (16)4 建立,激活及跟踪状态的配置 (17)4.1忽略USEREADY信号 (17)4.2同步模式(USEREADY=1,READYMODE=0) (18)4.3异步模式(USEREADY=1,READYMODE=1) (18)5配置XBANK 周期 (22)6 XINTF 寄存器 (23)6.1 XINTF定时寄存器 (23)6.2 XINTF配置寄存器 (27)6.3 XBANK寄存器 (29)6.4 XREVISION寄存器 (29)6.5 XRESET寄存器 (29)7信号说明 (31)8波形 (32)附录A修订历史记录 (37)图目录1 外部接口框图 (9)2 访问流程图 (11)3 XTIMCLK和SYSCLKOUT之间的关系 (12)4 XINTF 典型16位数据总线连接 (14)5 XINTF 典型32位数据总线连接 (15)6 XTIMING0/6/7寄存器分布 (23)7 XINTF配置寄存器(XINTCNF2) (27)8 XBANK寄存器 (29)9 XREVISION寄存器 (29)10 XRESET寄存器 (30)11 XTIMCLK和XCLKOUT模式波形 (33)12 通用读周期(XTIMCLK=SYSCLKOUT模式) (34)13 通用读周期(XTIMCLK=½SYSCLKOUT模式) (35)14 通用写周期(XTIMCLK=SYSCLKOUT模式) (36)表目录1 16位模式性能 (15)2 32位模式性能 (15)3 依据XTIMCLK周期的持续脉冲 (17)4 Lead/Trail 数值与XTIMCLK/X2TIMING方式之间的关系 (20)5 Active数值与XTIMCLK/X2TIMING方式之间的关系 (21)6 有效XBANK配置 (22)7 XINTF配置和控制寄存器映射 (23)8 XTIMING0/6/7寄存器字段说明 (23)9 XINTF配置寄存器字段说明 (27)10 XBANK寄存器字段说明 (29)11 XREVISION寄存器字段说明 (29)12 XRESET寄存器字段说明 (30)13 XINTF信号说明 (31)14 修订 (37)前言本文档介绍了在F2833x或F2823x设备中使用的外部接口(XINTF)。
DSPF28335---SPI模块DSPF28335--串行外设接口(SPI模块)问题1:什么是串行外设接口(SPI)?答:SPI(Serial Peripheral Interface)接口是高速同步串行I/O接口。
问题2:串行通信接口(SCI)和串行外设接口(SPI)主要区别?答:(1)SPI采用同步通讯方式,除了发送和接受两根线之外,还需要一根同步时钟线;SCI采用异步通信方式,只需要发送和接收两根线,通讯双方微处理器使用各自的时钟。
(2)SPI适用于板上短距离高速通讯;SCI适用于对另外的外设长距离的低速率通讯,在默认状态下,其最高通讯速率只相当于SPI通讯速率的1/4。
(3)SPI的时钟可反映在外在的同步时钟线上;SCI的时钟时隐藏的。
问题3:TMS320F28335有几个SPI接口模块?答:有一个专门的SPI模块,另外两个McBSP也可以配置为SPI接口。
问题4:F28335SPI接口由几组寄存器控制?答:12组,位于控制寄存器帧0x7040h开始的位置。
问题5:SPI FIFO模式下如何对传输和接收16级FIFO进行操作?直接对SPITXBUF寄存器进行赋值以传输数据。
例如:SpiaRegs.SPITXBUF=sdata[i],此操作可理解为:首先使TXFIFO头指针加1,然后把值写入TXFIFO头指针指向的位置。
如果当前没有一个激活的传输过程时,对SPITXBUF的写入会激活一个传输过程。
直接读取SPIRXBUF寄存器的值以接收数据。
例如:rdata[i]=SpiaRegs.SPIRXBUF,此操作可理解为:首先从RXFIFO 头指针处读取1个字符,然后使RXFIFO头指针减1。
问题6:SPI FIFO模式下传输和接收中断何时产生?答:是在数据传输或接收结束后,再判断传输和接收FIFO队列中有多少数据(SPIFFTX.TXFFST(4-0)和SPIFFRX.RXFFST(4-0)的值)。
关于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)。
28335Ecap使用总结-TIC2000系列-DSP交流网DSP学习第一论坛...28335学习系列二——Ecap使用总结28335 Ecap有好几个功能,第一:捕获外部信号,可以设置为捕捉信号的上升还是下降沿,该功能一般最常用;第二:计算外部方波信号的周期和占空比,在这里可以分别对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,这时就更简单了。
(如下面觉得例子),这时CTR可以不运行(ECap6Regs.ECCTL2.bit.TSCTRSTOP = EC_FREEZE),CAPx寄存器加载也可以禁止(ECap6Regs.ECCTL1.bit.CAPLDEN = EC_DISABLE;)。
TMS320F28335外部中断总结作者:Free 文章来源:Free 点击数:93 更新时间:2010-8-26在这里我们要十分清楚DSP的中断系统。
C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13和14。
这样还有12个中断都直接连接到外设中断扩展模块PIE上。
说的简单一点就是PIE 通过12根线与28335核的12个中断线相连。
而PIE的另外一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。
这样PIE共管理12*8=96个外部中断。
这12组大中断由28335核的中断寄存器IER来控制,即IER确定每个中断到底属于哪一组大中断(如IER |= M_INT12;说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需要再由PIEIER确定)。
接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告诉CPU(我们不难想象到PIEIER共有12总即从PIEIER1-PIEIER12)。
另外,PIE模块还有中断标志寄存器PIEIFR,同样它的低8位是来自外部中断的8个标志位,同样CPU的IFR寄存器是中断组的标志寄存器。
由此看来,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。
除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,需要注意的就是外部中断的标志要自己通过软件来清零。
而PIE和CPU的中断标志寄存器由硬件来清零。
EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.XINT2 = &ISRExint; //告诉中断入口地址EDIS; // This is needed to disable write to EALLOW protected registersPieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block使能PIE PieCtrlRegs.PIEIER1.bit.INTx5= 1; //使能第一组中的中断5IER |= M_INT1; // Enable CPU 第一组中断EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM也就是说,12组中的每个中断都要完成上面的相同配置,剩下的才是去配置自己的中断。
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输出进行相应处理,比如全置高,或拉低,或置为高阻态,从而起到保护作用。
DSP28335的调试总结,这是一份总结很全面的资料,我在学习开发板的一些总结,希望能得到同行的帮助,愿与大家一起学习和分享1DSP的PWM信号1.1简介DSP28335共12路16位的ePWM,能进行频率和占空比控制。
ePWM的时钟TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。
初始化程序采用的计数模式为递增计数模式。
在递增计数模式下,时基计数器从零开始增加,直到达到周期寄存器值(TBPDR)。
然后时基计数器复位到零,再次开始增加。
PWM信号周期与频率的计算如下:1.2端口对应关系说明: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。
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的开关频率,限于通讯速率,如果发送使用查询模式,一次中断只发送一个数据。
要使28335片上外设工作,有几个方面:
第一、这个外设初始化了没有,有没有按你的要求进行初始化。
比如EPWM模块,用epwm1,那么epwm1的计数方式、相位是否使能,是否触发中断,这个要按自己的需求配置完成,另外epwm初始化时通过关闭时钟和打开时钟,可以实现各个epwm模块间的时钟同步。
特别注意:2812的程序,除了事件管理器相关的,其他外设的初始化程序均可以直接移植到28335,当然要注意外设的时钟设置是否一致,比如28335的CAN时钟开始2分频了,在2812上1M的通信频率,到了28335可就只有500k 了。
第二、如果这个外设有相应的IO口输出或输入,那个IO口也要按你的要求做初始化。
比如SCI模块,肯定是需要通过片子的IO口实现通信功能,那么你初始化IO口时,要对应好硬件连接,用的是SCIA,那么用的是那个SCIA,要知道,SCIA对应的IO口可不是一组。
还有,不要像2812那样统一初始化IO口,那样会把你已经配置好的外设IO口给恢复了的,而且,28335的IO口与外部地址总线、数据总线是公用的。
第三、想用这个外设的中断,那么在外设初始化时需要把他的中断打开之外,系统初始化时也要对中断进行设置。
比如ECAN模块,使用ECAN0模块,用ECANA中断,按寄存器配置好,这个是模块初始化里的内容。
那么在系统初始化里,需要把ECANA中断打开、使能,设置好中断入口,加入你自己的中断响应子程序。
第四、以上三步很全面了,少了一步,我在这一步上吃了太多的亏,放最后你使能外设对应的时钟位了吗?他为什么就是不工作,就是无法初始化,就是无法进入中断,先不要瞎找,看看你的外设时钟打开了没有。