DSP知识总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、TMS320X2812的结构资源及性能
1、简单介绍TMS320X2812
TMS320X2812是TI公司推出的32位定点DSP芯片。
采用先进的哈佛总线结构(哈
佛总线的主要特点:是将程序和数据放在不同的存储空间内,每个存储空间都可以
独立的访问,而且程序总线和数据总线分开,从而使数据的吞吐率提高了一倍。
冯·诺依曼结构是将程序、数据和地址存储在同一个空间中,统一进行编码。
)
主频150M,指令周期6.67ns;
内核电压1.8V,I/O电压3.3V;
采用流水线操作(8级流水线处理器),每条指令的执行分别划分为取指令、译码、取数、执行等若干步骤,由片内多个功能单元分别完成,支持任务的并行处理。
TMS320X2812所有引脚输入电平均与TTL电平兼容,而输出电平位3.3V的CMOS
电平(注:引脚绝对不能输入5V电压,否则会烧毁芯片)
2、F系列和C系列的区别
C系列片内含有128K ⨯16的ROM,而F系列片内含有128K ⨯16的Flash。
3、DSP选型主要考虑哪些方面
答:1、系统特点。
(C2000系列处理器提供多种控制系统使用外围设备,比较适合控制领域;C5000系列处理器具有处理速度快,功耗低,相对成本低等特点,比较适合便携设备及消费类电子设备使用;C6000系列处理器具有处理速度快、精度高等特点,更适合图像处理、通信设备等应用领域)
2、算法格式。
3、系统精度。
4、处理速度。
5、功耗。
6、性能价格比。
7、支持多处理器。
8、系统开发的难易程度。
二、TMS320X2812的硬件设计
略
三、存储器的结构
四、时钟和系统控制
1、锁相环是什么?有什么作用?
答:锁相环是一种控制晶振使其相对于参考信号保持恒定相位的电路。
主要作用是通过软件实时的配置片上外设时钟,提高系统的灵活性和可靠性。
此外,由于使用软件可编程锁相环,所设计的系统处理器外部允许较低的工作频率,而片内经过锁相环电路为系统提供较高的系统时钟,可以有效地降低系统对外部时钟的依赖和电磁干扰,提高系统启动和运行的可靠性,降低系统对硬件的设计要求。
表4-1 XCLKIN和送至CPU的时钟信号CLKIN之间的关系
时基,PLL 控制寄存器PLLCR 取最大值10的时候,送至CPU 的时钟可以达到150MHz ,这也是F2812所使能支持的最高时钟频率。
2、高速时钟和低速时钟
~SYSCLKOUT ~⎧⎪
⎪⎪⎨
⎪⎪⎪⎩经低速外设时钟预定标寄存 低速外设:SCIA 、器(LOSPCP 07)变成LSPCLK SCIB 、SPI 、McBSP 经高速外设时钟预定标寄存 高速外设:EVA 、EVB 器(HISPCP 07)变成HSPCLK 和ADC
问:低速外设时钟(LSPCLK )一定比高速外设时钟(HSPCLK )慢吗?
答 :不一定。
从LSPCLK 和HSPCLK 的计算公式可以看出,这两个时钟信号的频率是独立无关的,各自分别取决于LOSPCP 或者HISPCP 的值,与其他因素没有关系。
当给LOSPCP 寄存器所附的值小于HISPCP 寄存器所附的值时,LSPCLK 的值就会大于HSPCLK 的值。
3、看门狗(Watchdog )
F2812的看门狗电路有一个8位看门狗加法计数器WDCNTR ,无论什么时候,如果WDCNTR 计数达到最大值,看门狗模块就会产生一个输出脉冲,脉冲宽度为512个振荡器时钟宽度。
问:F2812中看门狗的作用?
答:其作用是为DSP 的运行情况进行“把脉”,一旦发现程序跑飞或者状态不正常,便立即使DSP 复位,提高系统的可靠性。
问:防止看门狗计数器(WDCNTR )溢出的两种方法?
答:1)、禁止看门狗,使得计数器WDCNTR 无效。
向看门狗控制寄存器(WDCR )中写0x0068; 例程:1
void DisableDog(void) //关闭看门狗 {
EALLOW;
SysCtrlRegs.WDCR= 0x0068;
EDIS;
}
2)、定时“喂狗”。
通过软件向负责复位看门狗计数器的看门狗密钥寄存器(8位
的WDKEY)周期性的写入0x55+0xAA,紧跟着0x55写入0xAA能够清除WDCNTR。
当向WDKEY写入0x55时,WDCNTR复位到使能的位置;只有在向WDKEY写0xAA 后才能使WDCNTR真正的被清除。
写任何其他的值都会使系统立即复位。
例程:2
void KickDog(void) //定时喂狗
{
EALLOW;
SysCtrlRegs.WDKEY = 0x0055;
SysCtrlRegs.WDKEY = 0x00AA;
EDIS;
}
4、时钟与系统控制模块的寄存器
表4-2 看门狗与PLL寄存器
1)、外设时钟控制寄存器(PCLKCR)
ECANENCLK 位14. 该位置1,将使CAN外设的系统时钟有效。
MCBSPENCLK 位12. 该位置1,将使McBSP外设的低速时钟(LSPCLK)有效。
SCIBENCLK 位11 该位置1,将使SCIB外设的低速时钟(LSPCLK)有效SCIAENCLK位10 该位置1,将使SCIA外设的低速时钟(LSPCLK)有效SPIENCLK 位8 该位置1,将使SPI外设的低速时钟(LSPCLK)有效
ADCENCLK 位3 该位置1,将使ADC外设的高速时钟(HSPCLK)有效EVBENCLK位1 该位置1,将使EVB外设的高速时钟(HSPCLK)有效
EV AENCLK位0 该位置1,将使EV A外设的高速时钟(HSPCLK)有效
2)、高速外设时钟预定标寄存器(HISPCP)
如果HISPCP≠0,HSPCLK=SYSCLKOUT/(HISPCP⨯2)。
如果HISPCP=0,
HSPCLK=SYSCLKOUT。
000 高速时钟=SYSCLKOUT/1 100 高速时钟=SYSCLKOUT/8
001 高速时钟=SYSCLKOUT/2(复位默认值)101 高速时钟=SYSCLKOUT/10 010 高速时钟=SYSCLKOUT/4 110 高速时钟=SYSCLKOUT/12
011 高速时钟=SYSCLKOUT/6 111 高速时钟=SYSCLKOUT/14 3)、低速外设时钟预定标寄存器(LOSPCP)
LSPCLK 位2~0 。
对于SYSCLKOUT有关的低速外设时钟(LSPCLK)的速率进行配置。
如果LOSPCP≠0,LSPCLK=SYSCLKOUT/(LOSPCP⨯2)。
如果LOSPCP=0,LSPCLK=SYSCLKOUT。
000 高速时钟=SYSCLKOUT/1 100 高速时钟=SYSCLKOUT/8
001 高速时钟=SYSCLKOUT/2 101 高速时钟=SYSCLKOUT/10 010 高速时钟=SYSCLKOUT/4(复位默认值)110 高速时钟=SYSCLKOUT/12
011 高速时钟=SYSCLKOUT/6 111 高速时钟=SYSCLKOUT/14 4)、PLL控制寄存器(PLLCR)
DIV 位3~0.控制PLL被旁路或不被旁路,并且当不被旁路时,设置PLL时钟的比例0000 CLKIN=OSCCLK/2(PLL旁路)1000 CLKIN=(OSCCLK⨯8.0)/2 0001 CLKIN=(OSCCLK⨯1.0)/2 1001 CLKIN=(OSCCLK⨯9.0)/2 0010 CLKIN=(OSCCLK⨯2.0)/2 1010 CLKIN=(OSCCLK⨯10.0)/2 0011 CLKIN=(OSCCLK⨯3.0)/2 1011 CLKIN=保留
0100 CLKIN=(OSCCLK⨯4.0)/2 1100 CLKIN=保留
0101 CLKIN=(OSCCLK⨯5.0)/2 1101 CLKIN=保留
0110 CLKIN=(OSCCLK⨯6.0)/2 1110 CLKIN=保留
0111 CLKIN=(OSCCLK⨯7.0)/2 1111 CLKIN=保留
5)、看门狗计数器寄存器(WDCNTR)
WDCNTR 位7~0。
这些位包含WD计数器的当前值。
8位计数器以WDCLK速率连续增加、如果计数溢出,看门狗会初始化复位状态。
如果用一个有效地组合写WDKEY寄存器,那么计数器复位位0.
6)、看门狗复位密钥寄存器(WDKEY)
WDKEY 位7~0 。
紧跟着0x55写入0xAA将清除WDCNTR位(见例程2)。
写任何其他的值则会立即使看门狗复位。
从WDCR寄存器读取返回的值
7)、看门狗控制寄存器(WDCR)
WDFALG 位7。
看门狗复位状态标志位,如果该位置1,表示一个看门狗复位(WDRST)产生了复位条件。
如果为0,则是一个外部器件或加电复位条件。
该位保持锁存状态直到用
户写一个1,清除此条件。
写0无效
WDDIS 位6。
向该位写1将使看门狗模块无效。
写0将使看门狗模块使能。
仅当SCSR2寄存器中的WDOVERRIDE位置1时,该位可以修改。
复位时看门狗模块使能
WDCNK 位5~3。
无论何时执行写此寄存器的操作,用户必须总是将这些位写成101。
写其他值将使其立即复位(前提:看门狗使能)
WDPS 位2~0。
这些位相对于OSCCLK/512来配置看门狗计数器的时钟(WDCLK)速率:000 WDCLK=OSCCLK/512/1 100 WDCLK=OSCCLK/512/8
001 WDCLK=OSCCLK/512/1 101 WDCLK=OSCCLK/512/16
010 WDCLK=OSCCLK/512/2 110 WDCLK=OSCCLK/512/32
011 WDCLK=OSCCLK/512/4 111 WDCLK=OSCCLK/512/64
例程3:
void InitSysCtrl(void) //系统初始化函数
{
Uint16 i;
EALLOW;//仿真读取使能
SysCtrlRegs.WDCR=0x0068;//禁止看门狗
SysCtrlRegs.PLLCR=0xA; //如果外部晶振30MHz,则
//SYSCLKOUT=(30MHz * 10)/2=150MHz for(i=0;i<5000;i++) {;} //Wait for PLL to lock
SysCtrlRegs.HISPCP.all=0x0001;//设置高速时钟HSPCLK=150MHz/2=75MHz
SysCtrlRegs.LOPCP.all=0x0002;//设置低速时钟LSPCLK=150MHz/4=37.5MHz
SysCtrlRegs.PCLKCR.bit.EV AENCLK=1;//使能EV A外设时钟
SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;//使能EVB外设时钟
SysCtrlRegs.PCLKCR.bit.SCIENCLK=1;//使能SCI外设时钟
EDIS;//与EALLOW相对
}
五、通用I/O口(GPIO)
X281xDSP为用户提供了56个通用的数字I/O引脚,这些引脚基本上都是多功能复用引脚,并且将56个引脚分成6组进行管理,其中GPIOA和GPIOB个管理16个引脚,GPIOD管理14个引脚,GPIOE管理3个引脚,GPIOF管理15个引脚,GPIOG管理2个引脚
1、GPIO寄存器
表5-1 GPIO的控制寄存器
入信号限定的功能所以没有GPxQUAL寄存器
2)、GPIO控制寄存器受EALLOW控制
例程4:功能选择寄存器(GPxMUX)的使用
EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 1;//将PWM1引脚设置为PWM波形输出GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 0;//将PWM1引脚设置为通用数字I/O口
EDIS;
例程5:GPIO设置输入输出功能
EALLOW;
GpioMuxRegs.GPADIR.bit.GPIOA0 = 0;//将PWM1引脚设置为输入引脚
GpioMuxRegs.GPADIR.bit.GPIOA0 = 1;//将PWM1引脚设置为输出引脚
EDIS;
注:1)、GPIO数据寄存器不都EALLOW保护;
2)、置位寄存器(GPxSET)、清除寄存器(GPxCLEAR)、取反寄存器(GPxTOGGLE)只能写1,写0无效;
例程6:GPIO设置输入时读取引脚高低电平
if(GpioDataRegs.GPADA T.bit.GPIOA0 == 1)//PWM1引脚输入电平是高电平
{
…
}
if(GpioDataRegs.GPADA T.bit.GPIOA0 == 0)//PWM1引脚输入电平是低电平
{
…
}
例程7:GPIO设置为输出时,输出高电平或者低电平
GpioDataRegs.GPASET.bit.GPIOA0 = 1;//PWM1引脚输出高电平
GpioDataRegs.GPACLEAR.bit.GPIOA0 = 1;//PWM1引脚输出低电平
六、CPU定时器
X281x芯片内部具有3个32位的CPU定时器——Timer0、Timer1、Timer2。
其中CPU 定时器1和2被系统保留,用户只能用Timer0。
CPU定时器的几个寄存器:32位的定时器周期寄存器PRDH:PRD,32位的计数器寄存器TIMH:TIM,16位的定时器分频器寄存器TDDRH:TDDR,16位的预定标计数器寄存器PSCH:PSC。
(XH:H表示方法XH表示高位,X表示低位)
1、CPU定时器寄存器
表6-1 CPU定时器寄存器列表
1)、定时器计数器寄存器低位(TIMERxTIM)
TIM 位15~0。
定时器计数寄存器(TIMH:TIM):TIM寄存器是当前32位定时器的低16位,
2)、定时器计数器寄存器高位(TIMERxTIMH)
16位,
3)、定时器周期寄存器低位(TIMERxPRD)
PRD 位15~0.定时器周期寄存器(PRDH:PRD):PRD寄存器是32位周期寄存器的低16位。
4)、定时器周期寄存器高位(TIMERxPRDH)
16位。
5)、定时器控制寄存器(TIMERxTCR)
TIF 位15。
定时器中断标志位。
当定时器减到0时,标志位将置1,可以通过软件写1对该位清0;但是只有计数器递减到0,该位才会被置位。
对该位写1将清除该位,写0无效。
TIE 位14。
定时器中断使能位。
如果定时器计数器递减到0,该位置1,定时器将会向CPU 提出中断请求。
FREE 位11。
定时器仿真方式。
SOFT 位10。
FREE SOFT定时器仿真方式。
TRB 位5。
定时器重装位。
当向TRB写1时,PRDH:PRD的值装入TIMH:TIM,并且把定时器分频寄存器TDDRH:TDDR中的值装入预定标计数器PSCH:PSC。
TRB位一直读作0。
TSS 位4。
定时器停止状态位。
TSS是停止或启动定时器的一个标志位。
要停止定时器,置TSS位1。
要启动或重启定时器,置TSS位0。
在复位时,TSS清0并且定时器立即启动。
6)、定时器预定标计数器低位(TIMERxTPR)
TDDR 位7~0。
定时器分频器。
TDDR是定时器分频器的低8位。
7)、定时器预定标计数器高位(TIMERxTPRH)
PSCH 位15~8。
定时器预定标计数器。
PSCH是预定标计数器的高8位。
TDDRH 位7~0。
定时器分频器。
TDDRH 是定时器分频器的高8位。
2、 CPU 定时器工作原理
每来一个SYSCLKOUT 时
钟信号预定标计数器
( PSCH :PSC )计数就会
减1,直到减位0时,就会
产生一个TIMCLK 同时把
定时器分频器(TDDRH :
TDDR )中的值重装到PSCH :PSC 中。
同理,每产生一个TIMCLK 计数器(TIMH :TIM )中的值就会减1,直到减位0,产生一个中断信号,同时把周期
寄存器(PRDH :PRD )中
的值装载到TIMH :TIM 中。
由以上可知一个TIMCLK 的时间为:
6TDDRH:TDDR+1
TIMCLK=
10X
-⨯(单位:s)
定时时间为:
6TDDRH:TDDR+1
T=(PRDH:PRDH+1)10X
-⨯
⨯(单位:s)
其中X 位系统的时钟频率(单位MHz )
实际应用中通常把TDDRH :TDDR 取为0;所以定时时间与时钟频率X 和周期寄存器(PRDH:PRD )的值有关。
时钟频率已知所以就可以很据想要定时时间用上式求出PRDH :PRD 的值。
例程8:CPU 定时器配置函数
ConfigCpuTimer (&CpuTimer0,150,1000000);
这个函数共有3个参数:第1个参数表示使用的哪一个定时器,由于只有CPU 定时器0可以使用,所以这个参数是固定的;第2个参数是表示系统的时钟频率通常为150MHz ;第3个参数表示定时时间(单位us ), 七、中断系统
X2812的中断系统从上至下分成了三级,即CPU 级中断、PIE 级中断、外设中断。
1、 CPU 中断
1)、
INTR OR IFR TRAP ⎧⎪
⎨⎪⎩
软件中写指令 、或指令
中断触发方式硬件方式触发 片内外设或者外围设备的中断信号
无论是软件中断还是硬件中断,都可以归结为可屏蔽中断和不可屏蔽中断。
可屏蔽中断:可以用软件加以屏蔽或者解除屏蔽。
例如:片内外设所产生的中断都
是可屏蔽中断。
不可屏蔽中断:这些中断是不可以被屏蔽的。
例如:软件中断(INTR 指令和TRAP
指令等)、硬件中断NMI 、非法指令陷阱以及硬件复位中断。
2)、
当几个中断同时向CPU 发出中断请求时,CPU 会根据这些中断的优先级来安排处理的顺序,优先级高的先处理,优先级低的后处理。
X2812一共可以支持32个CPU 中断,其中每一个中断都是一个32位的中断向量,也就是2个16位的寄存器,里面存储的是相应中断服务子程序的入口地址,不过这个入口地址是22位的地址。
其中地址的低16位保存该向量的低16位;地址的高16位则保存它的高16位,其余更高的10位被忽略。
如下图: 高地址 地地址 15 6| 5 0 15 0
CPU 的中断向量表可以映射到程序空间的顶部或者底部,主要取决于CPU 状态寄存器ST1的向量映射位VMAP 。
如果VMAP 位是0,则向量就映射到以0x000000开始的地址上;如果VMAP 是1,则向量就映射到以0x3FFFC0开始的地址上。
】
3)、
I N T 1~I N T 14是14个通用中断,DLOGINT 数据标志中断和RTOSINT 实时操
作系统中断是为仿真而设计的两个中断。
通常在实际使用时,用到最多的还是通用中断INT1~INT14,这16个中断都属于可屏蔽中断,由CPU 中断使能寄存器(IER )来实现使能或关断。
当申请中断时CPU 中断标志寄存器(IER )相应位会置1。
IER 寄存器
IFR 寄存器
4)、可屏蔽中断响应过程 某个可屏蔽中断提出请求时,将其在中断标志寄存器IFR 中的中断标志位自动置位。
CPU 检测到该中断标志位被置位
后,接着会检测该中断是否被使能,也就是去读CPU 中断
使能寄存器IER 中相应位的值。
如果该中断并未使能,那
么CPU 将不会理会此中断,直到其中断被使能为止。
如果该中断已经被使能,则CPU 会继续检查全局中断INTM 是否使能,如果没有使能,则依然不会响应中断;如果INTM 已经使能,则CPU 就会响应该中断,暂停主程序并转向执行响应的中断服务子程序。
CPU 响应中断后,IFR 中的中断标志位就会被自动清0,目的是使CPU 能够去相应其他中断或者是该中断的下一次中断。
多个中断同时提出中断请求时CPU 响应过程:先响应优先级高的,再响应优先级低的。
2、 X2812的PIE 中断
X281x 的CPU 共16根中断线,其中包括2个不可屏蔽中断,RS NMI 和,还有14个可屏蔽中断INT1~INT14;CPU 定时器0的周期中断、X281x 片内外设的所有中断、外部中断XINT 1、外部中断XINT2和功率保护中断PDPINTx
共用中断线INT1~INT12。
通常使用最多的也是INT1~INT12。
PIE 一共可以支持96个不用的中断(目前已经使用的有45个中断),并把这些中断分为了12组,每个组有8个中断,而且每个组都被反馈到CPU 内核的
INT1~INT12这12条中断线中的某一条上。
INTx.8~INTx..1 位7~0,对PIE 组内各个中断单独使能,和CPU 中断使能寄存器
IER 类似。
2)、PIE 中断标志寄存器(PIEIFRx )
时该标志位清0.
3)、PIE 中断应答寄存器(
PIEACLK )
如果PIE 中断控制器有中断产生,则相应的中断标志位将置1.如果相应的PIE 中断使能也置1,则PIE 将检测PIE 中断应答寄存器PIEACK ,以确定CPU 是否准备相应该中断。
如果相应的PIEACKx 清0,PIE 便向CPU 申请中断;如果相应的PIEACKx 置1,那么PIE 将等待直到相应的PIEACKx 清0才向CPU 申请中断。
PIECAK 位11~0。
这12位于12组PIE 中断相对应。
向该寄存器的某一位写1,可
使该位清0。
4)、PIE 控制寄存器(PIECTRL ) PIEVECT 位15~1。
这些位表示从PIE 向量表取回的向量地址。
ENPIE 位0。
从PIE 块取回向量使能。
该位置1时,所有向量取自PIE 向量表。
如果该位置0,PIE 块无效。
例程8:中断服务程序
interrupt void TINT0_ISR (void) { 中断服务函数; }
注:写中断服务函数不要忘了 开头的关键词:interrupt 八、事件管理器
X281x DSP 具有两个事件管理器模块EV A 和EVB ,这两个事件管理器模块就像双胞胎一样,具有完全相同的功能,都具有通用定时器、比较单元、捕获单元、正交编码电路,只是名字不同。
X2812共可以产生16路PWM 波,其中4路由定时器产生,12路由比较单元产生。
2163EVA 3QEP ⎧⎪
⎪⎨
⎪
⎪⎩个位通用定时器(通用定时器1、2)个比较单元(比较单元1、2、3)
事件管理器个捕获单元(捕获单元1、2、3)1个正交编码脉冲电路(电路) 2163EVB 3QEP ⎧⎪
⎪⎨
⎪⎪⎩
个位通用定时器(通用定时器3、4)个比较单元(比较单元4、5、6)
事件管理器个捕获单元(捕获单元4、5、6)1个正交编码脉冲电路(电路) 通用定时器:CPU 定时器是32位,而通用定时器是16位。
用来定时、计数、产生
PWM。
比较单元:主要是用来产生PWM波形,每个比较单元可以产生一对(两路)互补的PWM波,每个事件管理器可以通过比较单元产生6路PWM波。
1、通用定时器
问:通用定时器的作用主要有?
答:1)、计时;
2)、使用定时器的比较功能产生PWM波;
3)、给事件管理器的其他子模块提供基准时钟;
问:定时器T1常见的输入信号?
答:1)、来自CPU的内部时钟HSPCLK(高速外设时钟)
2)、外部时钟输入TCLKINA,最大频率为器件自身时钟频率的1/4,也就是不能超过150MHz/4=37.5MHz。
3)、定时器计数方向输入TDIAR,用于定时器工作于定向增/减计数模式。
4)、复位信号RESET。
问:定时器T1的输出信号?
答:1)、定时器的比较输出T1PWM_T1CMP,可输出PWM波。
2)、送给ADC模块的AD转换启动信号。
3)、下溢、上溢、比较和周期匹配信号。
通用定时器工作的原理:
T1PR是定时器1的周期寄存器,用于存放为T1设置的周期值;T1CMPR是定时器T1的比较寄存器,用于存放为T1设置的比较值;T1PR和T1CMPR通常在初始化的时候进行赋值操作。
T1CON是定时器T1的计数器寄存器,他的值随时钟脉冲不断增加或者减少,每过一个定时器时钟脉冲,T1CNT的值就会增加或者减少1。
CPU会实时的将T1CNT的值和T1CMPR、T1PR的值进行比较,从而产生一些事。
定时器周期寄存器T1PR和定时器比较寄存器T1CMPR都带有“shadowed”(阴影寄存器)。
假设需要向T1CMPR写入16位新值,首先将这个值写入T1CMPR 的阴影寄存器,然后根据T1CON寄存器中第3位TCLD1和第2位TCLD0所指定的特定时刻,阴影寄存器中的数据就会写入T1CMPR的工作寄存器中。
如果需要向T1PR写入新的数据,数据也会被立即写入阴影寄存器,但只有当T1CNT完成一个周期计数、值为0的时候,阴影寄存器中的内容才会被载入到工作寄存器中,从而改变T1PR的值。
2、通用定时器的时钟:
2、通用定时器的计数模式
定时器T1计数模式由定时器1的控制寄存器(T1CON)的TMODE1和TMODE0两位控制。
总共四种模式。
1)、停止/保持模:在这种模式下 通用定时器停止计数并保持当前的状态。
此时,定时器的计数寄存器T1CON 、比较输出T1PWM_T1CMP 将保持不变。
2)、连续增/减计数模式:定时器计数器寄存器T1CNT 先从初始值开始递增至周期寄存器的值,再递减至0,然后从0开始递增至周期寄存器的值,这样循环下去。
可以用来产生对称PWM 波。
3)、连续递增计数模式:定时器计数器寄存器先从初始值开始递增至周期寄存器的值,然后突变为0,再从0开始递增至周期寄存器的值,一次循环。
可以用来产生不对称PWM 波。
0xFFFF T1PR
0xFFFF T1PR
0xFFFF T1PR
T1CNT 初始值=T1PR
T1CNT 初始值>T1PR
T1CNT 初始值<T1PR
0xFFFF T1PR
T1CNT 初始值>T1PR
0xFFFF T1PR
T1CNT 初始值=T1PR
0<T1CNT 初始值<T1PR
0xFFFF T1PR
4)、定向增/减计数模式:这时候T1CNT 进行递增或者递减计数取决于引脚TDIRA 的电平。
高电平为增计数;低电平为减计数。
如果计数过程中引脚电平发生变化,记完当前计数周期后,计数方向再发生变化。
3、通用定时器的中断有哪几种? 答:1)、上溢中断T1OFINT ; 2)、下溢中断T1UFINT ; 3)、比较中断T1CINT ; 4)、周期中断T1PINT ;
4、通用定时器如何配置才能使其同步工作?
答:1)、将T2CON 的T2SWT1位置1,实现T1CON 的TENABLE 位来启动通用定时器T2计数,这样,两个计数器T1和T2就能够被同时启动计数。
2)、对T1CNT 和T2CNT 附不同的初始值。
3)、将T2CON 的SELT1PR 位置1,指定定时器T2使用定时器T1的周期寄存器作为自己的周期寄存器,而忽略自身的周期寄存器。
5、通用定时器的比较操作和PWM 波 每个通用定时器都有一个比较寄存器TxCMPR 和一个PWM 输出引脚TxPWM 。
通过定时器计数器寄存器TxCNT 的值不断与比较寄存器TxCMPR 的值进行比较,当TxCNT 的值等于TxCMPR 的值时,就会发生比较匹配事件。
PWM (Pulse Width Modulation )简称脉宽调制。
有三个比较重要的参数:周期T 、频率f 和占空比D
周期T=T1+T2;频率f=1/T ;占空比D=T1/D ;
定时器T1能够产生两种类型的PWM :一种是不对称的PWM 波形;一种是对称的PWM 波形。
1)、不对称的PWM 波形(定时器工作在连续增计数模式)
周期T=(T1PR+1)⨯c t ;其中c 6
1
t =s TCLK 10
⨯ 所以6
T1PR+1
T=
s TCLK 10⨯;频率f=1/T ;
占空比:当引脚高电平有效时:T1PR+1T1CMPR
D=T1PR+1
-
T1
T2
T
T1PR T1CMPR
高电平有效 低电平有效
交点为
T1CNT=T1CMP
当引脚低电平有效时:1CMPR
D=
T1PR+1
T
2)、对称的PWM 波形(定时器工作于连续增/减计数模式)
PWM 的周期6
2T1PR T=s TCLK 10⨯⨯;频率6
TCLK 10f=Hz 2T1PR
⨯⨯; 占空比:高电平有效时:T1PR-T1CMPR
D=T1PR ;
低电平有效时:T1CMPR
D=T1PR
6、 比较单元与PWM 电路
事件管理器EV A 模块具有3个全比较单元(比较单元1、2、3),每个比较单元都能输出2路互补的PWM 波形,也可以通过相应的寄存器设置死区时间。
E V A 的比较单元所使用的时基是由T1来提供,当定时器计数寄存器T1CNT 中的值和比较寄存器CMPR1中的值相等时,就会发生比较匹配事件。
比较单元的PWM 和通用定时器产生的PWM 一样,当T1工作于连续增计数模式时,比较单元1输出不对称的PWM 波形;当T1工作于连续增/减计数模式时,比较单元1输出对称的PWM 波形。
比较单元产生PWM 波所涉及的资源有: 1)、一个16位比较寄存器,EV A 的CMPR1、CMPR2、CMPR3和EVB 的CMPR4、CMPR5、CMPR6。
这些比较寄存器也都带有阴影寄存器。
2)、一个16位的比较控制寄存器,EV A 的COMCONA 和EVB 的COMCONB 3)、一个16位的行为控制寄存器,EV A 的ACTRA 和EVB 的ACTRB ,这两个寄存器也都带有阴影功能。
4)、每个比较单元具有2个PWM 输出引脚。
5)、控制和中断逻辑。
7、带死区控制的PWM 电路
EV A 模块的PWM 电路包括非对称/对称波形发生器、可编程死区单元、输出逻辑、SVPWM 状态机。
T1PR T1CMPR
交点为T1CNT=T1CMP
高电平有效 低电平有效
图8-1比较单元1产生带死区不对称PWM波形
图8-2 比较单元1产生带死区对称PWM波形
8、死区时间的计算
由图8-1和图8-2不难看出带有死区的PWM波形在上升沿的时候会延迟死区时间
BD
t,下降沿不变。
死区时间的设置需要涉及死区定时器控制寄存器DBTCONx(x=A、B)的DBT3~DBT0(11~8位设置死区定时周期m)和DBTPS2~DBTPS0(4~2位设置死区定时器预定标因子q)。
死区定时器的时钟:
假设设置死区定时周期为m,死区定时器预定标因子为q,定时器的时钟为
TCLK(单位MHz):
2
=(us)
q
DB
m
t
TCLK
单位
T1PR T1CMPR
PWM1 PWM2
T1PR T1CMPR
PWM2 PWM1。