关于28335各个模块的理解分析Word文档下载推荐.docx

上传人:b****5 文档编号:21648308 上传时间:2023-01-31 格式:DOCX 页数:9 大小:76.16KB
下载 相关 举报
关于28335各个模块的理解分析Word文档下载推荐.docx_第1页
第1页 / 共9页
关于28335各个模块的理解分析Word文档下载推荐.docx_第2页
第2页 / 共9页
关于28335各个模块的理解分析Word文档下载推荐.docx_第3页
第3页 / 共9页
关于28335各个模块的理解分析Word文档下载推荐.docx_第4页
第4页 / 共9页
关于28335各个模块的理解分析Word文档下载推荐.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

关于28335各个模块的理解分析Word文档下载推荐.docx

《关于28335各个模块的理解分析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《关于28335各个模块的理解分析Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。

关于28335各个模块的理解分析Word文档下载推荐.docx

//TBClockratio=SYSCLKOUT/(2*HSPCLKDIV*

EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;

2^CLKDIV)

//Setupshadowing

EPwm1Regs.CMPCTL.bit.SHDWAMODE=CC_SHADOW;

EPwm1Regs.CMPCTL.bit.SHDWBMODE=CC_SHADOW;

EPwm1Regs.CMPCTL.bit.LOADAMODE=CC_CTR_ZERO;

//LoadonZero

EPwm1Regs.CMPCTL.bit.LOADBMODE=CC_CTR_ZERO;

//Setactions

EPwm1Regs.AQCTLA.bit.CAU=AQ_SET;

//SetPWM1AoneventA,upcount

EPwm1Regs.AQCTLA.bit.CAD=AQ_CLEAR;

//ClearPWM1AoneventA,downcount

//EPwm1Regs.AQCTLB.bit.CAU=AQ_CLEAR;

//Clear 

PWM1BoneventA,upcount

//EPwm1Regs.AQCTLB.bit.CAD=AQ_SET;

SetPWM1BoneventA,downcount

//SetDeadBand

EPwm1Regs.DBCTL.bit.IN_MODE=DBA_ALL;

EPwm1Regs.DBCTL.bit.POLSEL=DB_ACTV_HIC;

EPwm1Regs.DBCTL.bit.OUT_MODE=DB_FULL_ENABLE;

EPwm1Regs.DBRED=Dbred;

//Dead-bandrisingedgedelay

EPwm1Regs.DBFED=Dbfed;

//Dead-bandfallingedgedelay

//SetTripZone

EPwm1Regs.TZSEL.bit.OSHT1=TZ_ENABLE;

EPwm1Regs.TZCTL.bit.TZA=TZ_FORCE_LO;

EPwm1Regs.TZCTL.bit.TZB=TZ_FORCE_LO;

//InterruptwherewewillchangetheCompareValues

EPwm1Regs.ETSEL.bit.SOCBSEL=ET_CTR_ZERO;

//SelectstartADC(EPWMxSOCB)onZeroevent

EPwm1Regs.ETSEL.bit.SOCBEN=Enable;

//Enable 

EPwm1Regs.ETPS.bit.SOCBPRD=ET_1ST;

主要注意的就是EPWM的死区子模块。

由比较器产生A,B个比较信号进入动作限定子模块,并且出来EPWMxA

(1)与EPWMxB

(1)两路信号,然后进入死区模块。

对于死区模块是双输入双输出的,输入为EPWMxA

(1)与EPWMxB

(1),输出为EPWMxA

(2)与EPWMxB

(2),其中

(2)的信号可以由

(1)的其中一个或者两个共同产生。

对于我的使用时为了产生SVPWM去控制IPM,因此需要互补信号,只要用EPWMxA

(1)去产生EPWMxA

(2)与EPWMxB

(2)。

一个ePWMmodule包括Time-base(TB)module,Counter-compare(CC)module,Action-qualifier(AQ)module,Dead-band(DB)module,PWM-chopper(PC)module,Event-trigger(ET)module,Trip-zone(TZ)module等七个模块。

正常的发出PWM波要配置TB、CC、AQ、DB、ET等五个模块。

Time-base(TB)module为定时器模块,有

TBCTL(控制寄存器)配置定时器的时钟、计数模式、同步模式

TBSTS(状态寄存器)

TBPHSHR(高速PWM用)

TBPHS(相位寄存器)计数器的起始计数位置,例如寄存器为0x0100则计数器从0x0100开始计数

TBCTR(计数器)

TBPRD(周期寄存器)设置计数器的计数周期。

只有TBPRD(周期寄存器)有影子寄存器。

本程序的设置为count-up-and-downmode计数模式,相位为零,ePWM2 

、ePWM3、 

ePWM4、 

ePWM5、 

ePWM6通过ePWM1的计数器到零时进行同步,计数周期为0.5ms。

Counter-compare(CC)module为比较器模块有

CMPCTL 

(比较控制寄存器)设置CMPA、CMPB的重载模式

CMPAHR(高速PWM用),

CMPA(比较值寄存器A)设置EPWMxA的比较值,有影子寄存器。

CMPB(比较值寄存器B)设置EPWMxB的比较值,有影子寄存器。

本程序只应用了CMPA,设置计数器到零时重载CMPA。

Action-qualifier(AQ)module比较方式预设模块

AQCTLA 

(输出A比较方式控制寄存器)设置EPWMA的比较方式有CBD、CBU、CAD、CAU、PRD、ZRO,无影子寄存器,立即装载

AQCTLB 

(输出B比较方式控制寄存器)设置EPWMB的比较方式有CBD、CBU、CAD、CAU、PRD、ZRO,无影子寄存器,立即装载

AQSFRC 

(软件强制控制寄存器)设置AQCSFRC重载方式(RLDCSF),通过(OTSFB、ACTSFB)设置EPWMB、(OTSFA、ACTSFA)设置EPWMA启动一次强制置位无效、置零、置高、反向,当OTSFB、OTSFA被写1时,动作一次,写0无效,无影子寄存器

AQCSFRC 

(软件连续强制控制寄存器)可以强制EPWMA、EPWMB的输出为low或high或AQCSFRC不起作用,有影子寄存器,当寄存期被加载后的第二个时钟开始作用,如TBCLK=0时加载,TBCLK=1时开始起作用

说明:

CBD为TBCTR(计数器)与CMPB在down计数时相等使输出为low或high或反向或不动作

CBU为TBCTR(计数器)与CMPB在up计数时相等使输出为low或high或反向或不动作

CAD为TBCTR(计数器)与CMPA在down计数时相等使输出为low或high或反向或不动作

CAU为TBCTR(计数器)与CMPA在up计数时相等使输出为low或high或反向或不动作

PRD为TBCTR(计数器)与TBPRD(周期寄存器)相等时使输出为low或high或反向或不动作

ZRO为TBCTR(计数器)计到零时使输出为low或high或反向或不动作

注意:

以上均是相等时起作用,其它时间不管,只有AQCSFRC(软件连续强制控制寄存器)持续起作用

如同时出现比较则优先级如图

例:

CMPA=100,CMPB=100,up计数,EPWMA初始为低,CAU设置高,CBU设置低,当TBCTR计到100时,CAU、CBU同时作用,根据优先级,EPWMA输出低。

当CMPA=100,CMPB=110,其它不变,当TBCTR计到100时,EPWMA输出高,计到110时EPWMA输出低。

本程序只应用了EPWMA输出通过Dead-band(DB)module产生互补的PWM波形。

Action-qualifier(AQ)module比较方式预设模块配置如下:

(输出A比较方式控制寄存器)的CAU置高,CAD置低,其它无效。

在初始化中配置。

(软件连续强制控制寄存器)通过AQSFRC(软件强制控制寄存器)的RLDCSF配置为TBCTR(计数器)计到零时装载,根据需要每次中断配置CSFA置高、置低或软件连续强制无效。

其优先级最高,强制时CAU置高,CAD置低不起作用,无效时CAU置高,CAD置低起作用。

AQSFRC(软件强制控制寄存器)的ACTSFA配置为置低,当本周期软件连续强制无效时,向OTSFA写1,保证有效高周期的起始是低状态,防止上一周期结束时为高。

Dead-band(DB)module死区模块

DBCTL(死区控制寄存器)设置S5,S4,S3,S2,S1,S0开关选择的

DBRED(死区上升沿延时)上升沿延时时间

DBFED(死区下降沿延时)下降沿延时时间

本程序的设置为S5=0,S4=0,S3=1,S2=0,S1=1,S0=1;

延时时间为5us。

EPWMxA=EPWMxAin,EPWMxB为EPWMxAin的反向。

Event-trigger(ET)module中断事件模块

ETSEL(中断选择寄存器)使能及事件源选择(SOCA触发ADC转换,SOCB触发ADC转换,中断)

ETPS(中断预设寄存器)xxxCNT记录时间发生次数,当与xxxPRD相等时,发出中断信号,xxxCNT停止计数,当标志为清除时xxxCNT置零重新计数

ETFLG(中断标志寄存器)状态标志位,中断时为1

ETCLR(中断标志清除寄存器)写1清除相应标志位

ETFRC(强制中断寄存器)写1强制相应中断发生

本程序选择SOCA触发ADC转换,TBCTR=0位中断事件源,xxxPRD为1。

TMS320F28335定时器配置简介

写在最前,不喜请略过。

本博文的主要内容已在QQ空间、人人网、网易博客、XX空间等平台发表过,作者为Mr_D_prince(斌斌-龙臻),也就是本人,前两者均为我在非技术论坛的昵称。

在技术论坛我更喜欢newofcortexm3这个昵称,原因无他,我就是个技术新人。

之所以文章类型为什么是整理,是因为博文的主要内容均来自TI相关的技术手册,我只是做了下解读或者整理。

TMS320F28335的CPUTime有三个,分别为Timer0,Timer1,Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。

这三个定时器的中断信号分别为TINT0,TINT1,TINT2,分别对应于中断向量INT1,INT13,INT14。

图1为定时器的结构框图,图中TIMH:

TIM为计数寄存器,PRDH:

PRD为周期寄存器,AH:

A的形式表示一个32位的寄存器,是由两个16位的寄存器构成,AH是高16位,A是低16位。

CPU定时器的计数复位时,计数寄存器TIMH:

TIM加载周期寄存器PRDH:

PRD的值,经历一个计数器时钟时,TIMH:

TIM内的值就减1,一直减到0,这时产生定时器周期中断事件,并重新装载PRDH:

PRD的值,重新开始计数。

置于每隔多少时间,定时器计数器才会减1由预定标寄存器TPRH:

TPR来决定。

TPRH和TPR这两个寄存器由两部分组成,高8位为定时器预定标计数器PSC,低8位是定时器分频TDDR。

也即是说,TPRH是由PSCH和TDDRH构成,而TDDR由PSC和TDDR构成。

且其工作的原理与定时器计数器类似,复位时,PSCH:

PSC加载TDDRH:

TDDR的值,然后经过一个CPU时钟,PSCH:

PSC的值减1,当PSCH:

PSC的值减到0时,会再次装载TDDRH:

TDDR的值,并且产生一个计数器时钟,TIMH:

TIM减1。

以上寄存器测值在配置函数ConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod)中设置。

形参Freq为定时频率,Period为计时周期。

假若Freq为15,Period为1000000,则时间t=15*1000000/150M=0.1s(系统时钟频率为150M)。

不过这个算式的成立是有条件的,这个条件就是以下两条语句:

Timer->

RegsAddr->

TPR.all=0

TPRH.all=0

上文曾提及,定时器的计数时钟是有预定标寄存器TPRH:

TPR决定的。

CpuTimerxRegs.TPR.all=0,CpuTimerxRegs.TPRH.all=0这两句话决定了1个时钟源周期为定时器的时钟周期,若CpuTimerxRegs.TPR.all=y,CpuTimerxRegs.TPRH.all=0,则计y+1个时钟周期为定时器的时钟周期。

X表示0,1,2中的任意值。

因此,真正的定时时间为:

time=TPRH:

TPR/SYSCLKOUT*Freq*Peroid。

只有当TPRH:

TPR=0时,time=Freq*Peroid/SYSCLKOUT。

另外,在定时器配置函数中,

TCR.bit.TSS=1表示停止定时器;

TCR.bit.TRB=1表示重装定时器;

TCR.bit.FREE=1表示定时器自由运行;

TCR.bit.TIE=1表示使能定时器中断。

如果要利用定时器产生一定周期的时间中断,别忘了在主函数中设置响应的中断向量即可。

TMS320F28335的GPIO的简单应用

GPIO(General-PurposeInput/Output)——通用输入/输出口,对大多数从事电子行业的人来说并不是什么陌生的东西。

但它却是基础性的,很多MCU的后续开发都得用到GPIO。

F28335有88个IO口,为GPIO0至GPIO87,其中GPIO0至GPIO63可以配置为8个核心中断。

28335的GPIO口可以分为三组,分别为A口(GPIO0至GPIO31),B口(GPIO32至GPIO63)和C口(GPIO64至GPIO87)。

GPIO的寄存器可以分为三种,分别是GPIO控制寄存器,GPIO数据寄存器和GPIO中断与低功耗模式选择寄存器。

每个通用I/O端口都受多路复用(MUX),方向(DIR),数据(DAT),置位(SET),清楚(CLEAR),以及切换(TOGGLE)寄存器的控制。

多路复用寄存器GPxMUX(x=A,B,C)用来配置引脚的功能,是外设操作还是I/O操作。

复位时,所有的GPIO引脚都配置成数字I/O功能。

当寄存器中某位置1时,相应的引脚配置成相应的外设。

具体的管脚与外设功能见技术手册sprufb0d——SystemControlandInterrupts的Table50(GPAMUX1)。

方向控制寄存器GPxDIR用来将相应的I/O管脚配置成输出或输入,复位时,所有的GPIO引脚配置成输入,当GPxDIR.bit=1时,引脚配置成输出。

在采用GPxDIR寄存器位将输入端口改变成输出端口之前,引脚的当前电平反应到GPXDAT寄存器上。

在改变输入成输出状态之前,初始化GPxDAT用寄存器GPxSET、GPxCLEAR、GPxTOGGLE实现。

上拉电阻使能寄存器GPxPUD用来配置是否使能上拉电阻。

复位时,所有的GPIO引脚使能上拉电阻,当GPxPUD寄存器的某位置1时,相应的引脚的上拉电阻不使能。

数据寄存器GPxDAT,是一个读/写寄存器,读入的该寄存器的值反应了输入限制后输入引脚当前的电平,写寄存器可设置输出引脚为相应的电平。

但在实验过程中发现,要对该寄存器的某个位写1或置零,必须延迟多个系统周期才能实现。

鉴于此对GPIO的某个具体引脚操作时不建议使用此寄存器,使用置位寄存器和清楚寄存器要来的高效的多。

置位寄存器GPxSET是一个只写寄存器,读为0。

如果对应的引脚配置为输出,则向置位寄存器的该位写1,将对应引脚的电平拉高,写0则无效。

清除寄存器GPxCLEAR是一个只写寄存器,读为0。

如果对应的引脚配置为输出,则向清除寄存器的该位写1,将把对应引脚的电平拉低,写0无效。

切换寄存器GPxTOGGLE,是一个只写寄存器,读为0。

如果对应的引脚配置为输出,则向切换寄存器的该位写1,将把对应引脚拉成反向电平,写0无效。

中断选择寄存器GPIOXIMTnSEL的功能是选择某位I/O引脚来配置中断。

具体的配置见表6。

该表配置的是GPIO0至GPIO31,对应的是XINT1和XINT2,具体的中断配置见寄存器XINT1CR和XINT2CR。

低功耗模式唤醒选择寄存器GPIOLPMSEL针对的是GPIO0至GPIO31,向寄存器的某位写1,则相应的信号引脚将唤醒设备,无论设备处于HALT或者STANDBY低功耗模式。

写0则无效。

下面介绍一个简单的例子,点亮LED。

电路图如下图所示:

在图中,LED所连接的GPIO引脚是GPIO60和GPIO61和GPIO61,当GPIO60和GPIO61为低时,D1和D2发光。

程序如下:

#defineLED1GpioDataRegs.GPBDAT.bit.GPIO60

#defineLED2GpioDataRegs.GPBDAT.bit.GPIO61

LED的初始化程序

voidconfigLED(void)

{

EALLOW;

GpioCtrlRegs.GPBMUX2.bit.GPIO60=0;

GpioCtrlRegs.GPBDIR.bit.GPIO60=1;

GpioCtrlRegs.GPBMUX2.bit.GPIO61=0;

GpioCtrlRegs.GPBDIR.bit.GPIO61=1;

EDIS;

}

在主函数中调用configLED()函数,再对LED1和LED2进行简单的赋值即可实现LED的控制。

例如:

LED1亮,LED2灭,即LED1=0;

LED2=1.

TMS320F28335 

GPIO引脚的输入限制

用户可以通过GPIO限制选择寄存器来选择GPIO引脚的输入限制类型。

主要由输入异步,仅与SYSCLKOUT同步,采用采样窗限制这几种限制类型。

本博文主要讲第三种类型。

GPIO控制寄存器GPxCTRL(x=A,B,C)为配置为输入限制的引脚指定了采样周期。

采样周期介于限制采样周期之内,是相对于系统时钟周期的倍数,由该寄存器的QUALPRDn位来指定,一个采样周期可以用来配置8路输入信号,具体的配置请见表1。

而GPIO限制选择寄存器GPxQSELy(x=A,B,C;

y=1,2)指定了采样窗是3个采样点还是6个采样点。

当有3个或6个连续的采样周期相同时,输入信号才会被采集。

表1:

GPIOPortAQualificationControl(GPACTRL)RegisterFieldDescriptions

以上介绍的两个寄存器主要是为GPIO的采样窗限制功能进行了必要的配置。

下面我引入图1(QualificationUsingSamplingWindow)和图2(InputQualifierClockCycles),来使大家清楚地知道GPIO的输入限制是怎样完美的去除我们不需要的噪声的。

图1:

QualificationUsingSamplingWindow

图2:

InputQualifierClockCycles

因为输入的信号时异步的,为了同步,在限制窗开始之前必须要有一个 

SYSCLKOUT 

的延迟。

在图2中,输入限制将忽略这个尖刺小脉冲。

QUALPRD位域值限制采样周期,8位值范围为0~255。

当QUALPRD为0时,无限制输入,此时采样周期与SYSCLKOUT同步。

对于任意一个“n”值,限制周期 

=2*n个系统时钟周期(SYSCLKOUT),即每2*n个系统时钟周期,GPIO引脚进行一次采样。

当6个采样都为同一个值时,才可以确定一个输入。

具体的采样周期的配置和采样窗的配置可参考上文列出的表格。

当有输入限制时将检测输入变化,输入必须稳定(5*QUALPRD*2)个SYSCLKOUT周期,以保证检测时6个采样点的采样相同。

例如QUALPRD=1时,输入必须有10个或者10个以上的稳定的SYSCLKOUT周期,因为外部信号是异步驱动的,11个SYSCLKOUT周期宽度的脉冲可以确保可靠的识别。

欲完整了解GPIO可参考附件。

由于水平有限,难免会有错误,一切以TI提供的技术手册为准

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1