DSP知识总结.docx
《DSP知识总结.docx》由会员分享,可在线阅读,更多相关《DSP知识总结.docx(33页珍藏版)》请在冰豆网上搜索。
DSP知识总结
一、TMS320X2812的结构资源及性能
1、简单介绍TMS320X2812
TMS320X2812是TI公司推出的32位定点DSP芯片。
采用先进的哈佛总线结构(哈佛总线的主要特点:
是将程序和数据放在不同的存储空间内,每个存储空间都可以独立的访问,而且程序总线和数据总线分开,从而使数据的吞吐率提高了一倍。
冯·诺依曼结构是将程序、数据和地址存储在同一个空间中,统一进行编码。
)
主频150M,指令周期6.67ns;
内核电压1.8V,I/O电压3.3V;
采用流水线操作(8级流水线处理器),每条指令的执行分别划分为取指令、译码、取数、执行等若干步骤,由片内多个功能单元分别完成,支持任务的并行处理。
TMS320X2812所有引脚输入电平均与TTL电平兼容,而输出电平位3.3V的CMOS电平(注:
引脚绝对不能输入5V电压,否则会烧毁芯片)
表1-1TTL电平标准
引脚电气方向
高电平
低电平
输入
>2.0V
<1.2V
输出
>2.4V
<0.8V
表1-2CMOS电平标准
引脚电气方向
高电平
低电平
输入
>0.7
Vcc
<0.3
Vcc
输出
>0.9
Vcc
<0.8V
表1-3TMS320X2812的硬件特点
硬件特点
TMS320F2812
TMS320C2812
指令周期(150MHz)
6.67ns
6.67ns
内核电压(150MHz)
1.9V
1.9V
I/O电压
3.3V
3.3v
片上RAM
18K
16位
18K
16位
片上Flash
128K
16位
无
片上ROM
无
128K
16位
BootROM
有
有
掩膜ROM
有
有
片内Flash/ROM/SRAM的密码保护
有
有
外部存储接口
有
有
看门狗定时器
有
有
32位CPU定时器
有
有
事件管理器
EVA、EVB
EVA、EVB
12位ADC
16通道
16通道
串行通信接口SCI
SCIA、SCIB
SCIA、SCIB
串行外围接口SPI
有
有
局域网控制器CAN通信
有
有
多通道缓冲串行接口McBSP
有
有
复用的数字I/O引脚
56个
56个
外部中断源
3个
3个
封装
179针的BGA
176针的LQFP
179针的BGA
176针的LQFP
工作温度范围
A:
-40~+85℃
S:
-40~+125℃
A:
-40~+85℃
S:
-40~+125℃
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总线名称位数
PAB(ProgramAddressBus)
程序地址总线
22位
DRAB(Data-ReadAddressBus)
数据读地址总线
32位
DWAB(Data-WriteAddressBus)
数据写地址总线
32位
PRDB(Program-ReadDateBus)
程序读数据总线
32位
DRDB(Data-ReadDataBus)
数据读地址总线
32位
DWDB(Data/Program-WriteDataBus)
数据写地址总线
32位
四、时钟和系统控制
1、锁相环是什么?
有什么作用?
答:
锁相环是一种控制晶振使其相对于参考信号保持恒定相位的电路。
主要作用是通过软件实时的配置片上外设时钟,提高系统的灵活性和可靠性。
此外,由于使用软件可编程锁相环,所设计的系统处理器外部允许较低的工作频率,而片内经过锁相环电路为系统提供较高的系统时钟,可以有效地降低系统对外部时钟的依赖和电磁干扰,提高系统启动和运行的可靠性,降低系统对硬件的设计要求。
表4-1XCLKIN和送至CPU的时钟信号CLKIN之间的关系
PLL模式
说明
SYSCLKOUT/CLKIN
禁止
上电复位时通过将
引脚置底来进入该模式,PLL模块完全不使能。
此时,输入CPU的时钟由来自X1/XCLKIN引脚的时钟直接去驱动。
X2引脚不使用
XCLKIN
旁路
为高电平时,PLL被使能;若此时上电默的PLL配置(PLLCR中DIV的值为0),则PLL自身被旁路。
从X1/XCLKIN引脚输入的时钟信号除以2,然后送到CPU
XCLKIN/2
使能
为高电平时,PLL被使能;同时通过给PLLCR中位DIV写一个不为0的值来实现PLL的使能。
时钟信号需要进入PLL模式进行n倍频,然后除以2,最后送至CPU
(XCLKIN
n)/2
注:
实际使用通常使用第3中方式,即PLL使能。
通常使用30MHz晶振为F2812提供时基,PLL控制寄存器PLLCR取最大值10的时候,送至CPU的时钟可以达到150MHz,这也是F2812所使能支持的最高时钟频率。
2、高速时钟和低速时钟
问:
低速外设时钟(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
voidDisableDog(void)//关闭看门狗
{
EALLOW;
SysCtrlRegs.WDCR=0x0068;
EDIS;
}
2)、定时“喂狗”。
通过软件向负责复位看门狗计数器的看门狗密钥寄存器(8位的WDKEY)周期性的写入0x55+0xAA,紧跟着0x55写入0xAA能够清除WDCNTR。
当向WDKEY写入0x55时,WDCNTR复位到使能的位置;只有在向WDKEY写0xAA后才能使WDCNTR真正的被清除。
写任何其他的值都会使系统立即复位。
例程:
2
voidKickDog(void)//定时喂狗
{
EALLOW;
SysCtrlRegs.WDKEY=0x0055;
SysCtrlRegs.WDKEY=0x00AA;
EDIS;
}
4、时钟与系统控制模块的寄存器
表4-2看门狗与PLL寄存器
名称
地址
地址空间
说明
HISPCP
0x0000701A
1
16
高速外设时钟预定标寄存器
LOSPCP
0x0000701B
1
16
低速外设时钟预定标寄存器
PCLKCR
0x0000701C
1
16
外设时钟控制寄存器
PLLCR
0x00007021
1
16
PLL控制寄存器
WDCNTR
0x00007023
1
16
看门狗计数器寄存器
WDKEY
0x00007025
1
16
看门狗复位密钥寄存器
WDCR
0x00007029
1
16
看门狗控制寄存器
1)、外设时钟控制寄存器(PCLKCR)
15141312|111098
保留
ECANENCLK
保留
MCBSPENCLK
SCIBENCLK
SCIAENCLK
保留
SPIENCLK
743210
Reserved
ADCENCLK
保留
EVBENCLK
EVAENCLK
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)有效
EVAENCLK位0该位置1,将使EVA外设的高速时钟(HSPCLK)有效
2)、高速外设时钟预定标寄存器(HISPCP)
153|20
保留
HSPCLK
HSPCLK位2~0。
对于SYSCLKOUT有关的高速外设时钟(HSPCLK)的速率进行配置。
如果HISPCP
0,HSPCLK=SYSCLKOUT/(HISPCP
2)。
如果HISPCP=0,HSPCLK=SYSCLKOUT。
000高速时钟=SYSCLKOUT/1100高速时钟=SYSCLKOUT/8
001高速时钟=SYSCLKOUT/2(复位默认值)101高速时钟=SYSCLKOUT/10
010高速时钟=SYSCLKOUT/4110高速时钟=SYSCLKOUT/12
011高速时钟=SYSCLKOUT/6111高速时钟=SYSCLKOUT/14
3)、低速外设时钟预定标寄存器(LOSPCP)
153|20
保留
LSPCLK
LSPCLK位2~0。
对于SYSCLKOUT有关的低速外设时钟(LSPCLK)的速率进行配置。
如果LOSPCP
0,LSPCLK=SYSCLKOUT/(LOSPCP
2)。
如果LOSPCP=0,LSPCLK=SYSCLKOUT。
000高速时钟=SYSCLKOUT/1100高速时钟=SYSCLKOUT/8
001高速时钟=SYSCLKOUT/2101高速时钟=SYSCLKOUT/10
010高速时钟=SYSCLKOUT/4(复位默认值)110高速时钟=SYSCLKOUT/12
011高速时钟=SYSCLKOUT/6111高速时钟=SYSCLKOUT/14
4)、PLL控制寄存器(PLLCR)
154|30
保留
DIV
DIV位3~0.控制PLL被旁路或不被旁路,并且当不被旁路时,设置PLL时钟的比例
0000CLKIN=OSCCLK/2(PLL旁路)1000CLKIN=(OSCCLK
8.0)/2
0001CLKIN=(OSCCLK
1.0)/21001CLKIN=(OSCCLK
9.0)/2
0010CLKIN=(OSCCLK
2.0)/21010CLKIN=(OSCCLK
10.0)/2
0011CLKIN=(OSCCLK
3.0)/21011CLKIN=保留
0100CLKIN=(OSCCLK
4.0)/21100CLKIN=保留
0101CLKIN=(OSCCLK
5.0)/21101CLKIN=保留
0110CLKIN=(OSCCLK
6.0)/21110CLKIN=保留
0111CLKIN=(OSCCLK
7.0)/21111CLKIN=保留
5)、看门狗计数器寄存器(WDCNTR)
158|70
保留
WDCNTR
WDCNTR位7~0。
这些位包含WD计数器的当前值。
8位计数器以WDCLK速率连续增加、如果计数溢出,看门狗会初始化复位状态。
如果用一个有效地组合写WDKEY寄存器,那么计数器复位位0.
6)、看门狗复位密钥寄存器(WDKEY)
158|70
保留
WDKEY
WDKEY位7~0。
紧跟着0x55写入0xAA将清除WDCNTR位(见例程2)。
写任何其他的值则会立即使看门狗复位。
从WDCR寄存器读取返回的值
7)、看门狗控制寄存器(WDCR)
158|76|53|20
保留
WDFLAG
WDDIS
WDCNK
WDPS
WDFALG位7。
看门狗复位状态标志位,如果该位置1,表示一个看门狗复位(
)产生了复位条件。
如果为0,则是一个外部器件或加电复位条件。
该位保持锁存状态直到用户写一个1,清除此条件。
写0无效
WDDIS位6。
向该位写1将使看门狗模块无效。
写0将使看门狗模块使能。
仅当SCSR2寄存器中的WDOVERRIDE位置1时,该位可以修改。
复位时看门狗模块使能
WDCNK位5~3。
无论何时执行写此寄存器的操作,用户必须总是将这些位写成101。
写其他值将使其立即复位(前提:
看门狗使能)
WDPS位2~0。
这些位相对于OSCCLK/512来配置看门狗计数器的时钟(WDCLK)速率:
000WDCLK=OSCCLK/512/1100WDCLK=OSCCLK/512/8
001WDCLK=OSCCLK/512/1101WDCLK=OSCCLK/512/16
010WDCLK=OSCCLK/512/2110WDCLK=OSCCLK/512/32
011WDCLK=OSCCLK/512/4111WDCLK=OSCCLK/512/64
例程3:
voidInitSysCtrl(void)//系统初始化函数
{
Uint16i;
EALLOW;//仿真读取使能
SysCtrlRegs.WDCR=0x0068;//禁止看门狗
SysCtrlRegs.PLLCR=0xA;//如果外部晶振30MHz,则
//SYSCLKOUT=(30MHz*10)/2=150MHz
for(i=0;i<5000;i++){;}//WaitforPLLtolock
SysCtrlRegs.HISPCP.all=0x0001;//设置高速时钟HSPCLK=150MHz/2=75MHz
SysCtrlRegs.LOPCP.all=0x0002;//设置低速时钟LSPCLK=150MHz/4=37.5MHz
SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;//使能EVA外设时钟
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-1GPIO的控制寄存器
名称
大小(
16)
寄存器说明
GPxMUX(x=A,B,D,E,F,G)
1
GPIO功能选择控制寄存器
GPxDIR(x=A,B,D,E,F,G)
1
GPIO方向控制寄存器
GPxQUAL(x=A,B,D,E)
1
GPIO输入限定控制寄存器
注:
1)、并不是所有的引脚的输入都支持输入信号限定功能,GPIOF和GPIOG没有输入信号限定的功能所以没有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;
表5-2GPIO数据寄存器
名称
大小(
16)
寄存器说明
GPxDAT(x=A,B,D,E,F,G)
1
GPIOx数据寄存器
GPxSET(x=A,B,D,E,F,G)
1
GPIOx置位寄存器
GPxCLEAR(x=A,B,D,E,F,G)
1
GPIOx清除寄存器
GPxTOGGLE(x=A,B,D,E,F,G)
1
GPIOx取反寄存器
注:
1)、GPIO数据寄存器不都EALLOW保护;
2)、置位寄存器(GPxSET)、清除寄存器(GPxCLEAR)、取反寄存器(GPxTOGGLE)只能写1,写0无效;
例程6:
GPIO设置输入时读取引脚高低电平
if(GpioDataRegs.GPADAT.bit.GPIOA0==1)//PWM1引脚输入电平是高电平
{
…
}
if(GpioDataRegs.GPADAT.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-1CPU定时器寄存器列表
名称
大小(
16)
说明
TIMERxTIM(x=0、1、2)
1
CPU定时器计数器寄存器低位
TIMERxTIMH(x=0、1、2)
1
CPU定时器计数器寄存器高位
TIMERxPRD(x=0、1、2)
1
CPU定时器周期寄存器低位
TIMERxPRDH(x=0、1、2)
1
CPU定时器周期寄存器高位
TIMERxTRC(x=0、1、2)
1
CPU定时器控制寄存器
TIMERxTPR(x=0、1、2)
1
CPU定时器预定标寄存器低位
TIMERxTPRH(x=0、1、2)
1
CPU定时器预定标寄存器高位
1)、定时器计数器寄存器低位(TIMERxTIM)
150
TIM
TIM位15~0。
定时器计数寄存器(TIMH:
TIM):
TIM寄存器是当前32位定时器的低16位,
2)、定时器计数器寄存器高位(TIMERxTIMH)
150
TIMH
TIMH位15~0。
定时器计数寄存器(TIMH:
TIM):
TIMH寄存器是当前32位定时器的高16位,
3)、定时器周期寄存器低位(TIMERxPRD)
150
PRD
PRD位15~0.定时器周期寄存器(PRDH:
PRD):
PRD寄存器是32位周期寄存器的低16位。
4)、定时器周期寄存器高位(TIMERxPRDH)
150
PRDH
PRDH位15~0.定时器周期寄存器(PRDH:
PRD):
PRDH寄存器是32位周期寄存器的高16位。
5)、定时器控制寄存器(TIMERxTCR)
1514|1312|1110|98
TIF
TIE
保留
FREE
SOFT
保留
76|54|30
保留
TRB
TSS
保留
TIF位15。
定时器中断标志位。
当定时器减到0时,标志位将置1,可以通过软件写1对该位清0;但是只有计数器递减到0,该位才会被置位。
对该位写1将清除该位,写0无效。
TIE位14。
定时器中断使能位。
如果定时器计数器递减到0,该位置1,定时器将会向CPU提出中断请求。
FREE位11。
定时器仿真方式。
SOFT位10。
FREESOFT定时器仿真方式。
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)
158|70
PSC
TDDR
PSC位15~8。
定时器预定标计数器。
PSC是预定标计数器的低8位。
TDDR位7~0。
定时器分频器。
TDDR是定时器分频器的低8位。
7)、定时器预定标计数器高位(TIMERxTPRH)
158|70
PSCH
TDDRH
PSCH位15~8。
定时器预定标计数器。
PSCH是预定标计数器的高8位。
TDDRH位7~0。
定时器分频器。
TDDRH是定时器分频器的高8位。
2、CPU定时器工作原理
每来一个SYSCLKOUT时钟信号预