有哪位可以告诉我HPI接口的原理

有哪位可以告诉我HPI接口的原理,第1张

在SCI串行通信调试中,发现由于DSP的运行频率在100 MHz左右,造成内部数据时钟CLKG过快,不能与C51串口采样频率保持一致,需要软件加以处理,这样会额外消耗DSP资源。因此可以考虑将发送时钟CLKX和接收时钟CLKR接外部时钟源(慢于DSP时钟),以保证与C51串口采样频率的一致。另外在并行通信的调试中,可以知道通过HPI-8口并行通信完全没有硬件和软件开销,由DSP自身的硬件来协调冲突,因此HPI-8口使用于与单片机构件较好的主从双CPU处理器平台

基于嵌入式系统发展的需要,提出TMS320VC5402 DSP与AT89C51单片机通信的三种设计方案。利用TMS320VC5402的多通道缓冲串口MCBSP分别实现TMS320VC5402与AT89C51的SCI和SPI串行通信,以及通过TMS320VC5402的8位增强主机接口HPI一8实现TMS320VC5402与AT89C5l并行通信。就硬件接口电路和软件编程进行详细的阐述。

关键词:单片机 DSP MCBSP HPI

将DSP和单片机构成双CPU处理器平台,可以充分利用DSP对大容量数据和复杂算法的处理能力,以及单片机接口的控制能力。而DSP与单片机之间快速正确的通信是构建双CPU处理器的关键问题。下面就此问题分别设计串行SCI、SPI和并行HPI三种连接方式。

1 串行通信设计与实现

1 1 SCI串行通信设计

111 多通道缓冲串行口McBSP原理

TMS320VC5402(简称VC5402)提供了2个支持高速、全双工、带缓冲、多种数据格式等优点的多通道缓冲串行口McBSP。MCESP分为数据通路和控制通路。①数据通路负责完成数据的收发。CPU或DMAC能够向数据发送寄存器DXR写入数据,DXR中的数据通过发送移位寄存器XSR输出到DX引脚。DR引脚接收数据到接收移位寄存器RSR,再复制到接收缓冲寄存器RBR,最后复制到数据接收寄存器DRR。这两种数据多级缓冲方式使得数据搬移和片外数据通信能够同时进行。②控制通路负责内部时钟产生,帧同步信号产生,信号控制和多通道选择。另外.还具有向CPU发送中断信号和向DMAC发送同步事件的功能。MCBSP时钟和帧同步信号通过CLKR、CLKX、FXR、FSX引脚进行控制,接收器和发送器可以相互独立地选择外部时钟和帧同步信号,也可以选择由内部采样率发生器产生时钟和帧同步信号。帧同步脉冲有效表示传输的开始。

112 SCI串行接口设计

设置VC5402的McRSP输出时钟和帧同步信号由内部采样率发生器产生,内部数据时钟CLKG和帧同步信号FSG驱动发送时钟CLKX和帧同步FSX(CLKXM=l,FSXM=l,FSGM=1),输入时钟也由内部采样率发生器产生,内部数据时钟CLKG驱动接收时钟CLKR(CLKRM=1),同时由CPU时钟驱动采样率发生器(CLKSM=1)。考虑到AT89C51(简称C51)串口发送数据帧中第l位为起始位,因此可以利用该位驱动输入帧同步信号FSR,同时要置忽略帧同步信号标志为1。其中FSG帧同步脉冲宽度=(FWID+1)·CLKG;FSG帧同步脉冲周期=(FPER+1)·CLKG;采样率发生器分频系数(采样率=波特率)=FIN/(CLKGDV+1)。

SCI串口连接如图l所示。

113 波特率不一致的处理

VC5402初始化(以图1为例):

STM#SRGRl,SPSAl

STM#ooFEH,SPSDl;FSG帧同步脉冲宽度位为1个CLKG

;波特率为100 MHz/(0X(OFF)=392 156 b/s

STM#SRGR2,SPSAl

STM#3D00H,SPSDl;内部采样率发生器时钟由CPU驱动

C51初始化:

MOV TMOD,#20H

MOVTLl,#FFH

MOVTHl,#FFH ;C51波特率=(2SMOD/32)(fosc/12)[1/(256一初值)]一24 509 b/s

MOV SCON,#50H ;置串口方式l,每一帧10位数据.允许接收

MOV PCON,#80H ;设置SMOD=1

VC5402波特率/C51波特率=(392 156/24 509)=16.000 49

VC5402每发送16位数据,C51只采样1位数据。在VC5402存储器中开辟一个空间对每次发送的8位数据进行扩展,1位扩为16位,0为0000H,l为FFFFH,共扩为128位。在数据头部填加16位起始位0000H,数据尾部填加停止位FFFFH。在VC5402发送控制寄存器XCR中设置XWDLEN=000(1字含8位),即可将要发送的8位数据封装成1帧10字的数据。这也符合C51串口1方式下1帧10位的数据格式。C51以1/16的VC5402采样速率接收数据,0000H采样为0,FFFFH采样为1,由此可以将接收到的200位恢复为8位数据,停止位进入RB8。

C51每发送1位数据,VC5402要采样为16位数据。C51一次发送的10位数据的起始位触发VC5402的接收帧同步。由于VC5402以16倍C51的采样速率接收数据,1位采样为16位,0采样为0000H,1采样为FFFFH.只采样发送来的10位中的前9位,9位封装成144位,即接收的1帧数据完成。VC5402将收到的144位数据在开辟的存储器空间存放,抛弃前16位,在剩下的128位里分成8组,每组16位。比较其中间的8位,若有4位以上为1,则该16位为1,反之则为0。由此将接收到的144位恢复为8位数据。

为了不让CPU频繁地被数据接收和发送打断,将DMA和MCBSP联合使用来控制数据的接收和发送。RRDY直接驱动MCBSP向DMAC接收数据事件(REVENT事件),XRDY直接驱动MCBSP向DMAC发送数据事件(XEVENT事件)。

SCI通信协议如图2所示

1 2 SPI串行通信设计

将C51置为主机,VC5402为从机。McBSP的时钟停止模式(CLKSTP=1X)兼容SPI模式,接收部分和发送部分内部同步。McBSP可以作为SPI的从机或主机。发送时钟BCLKX作为SPI协议的移位时钟SCK使用,发送帧同步信号BFSX作为从机使能信号nSS使用,接收时钟BCLKR和接收帧同步信号BFSR不使用。它们在内部分别与BCLKX和BFSX直接连接。BDX作为MISO,而BDR作为MOSI,发送和接收具有相同字长。

C51中的并口P1.1和P1.2作为扩展串行SPI输人输出口与VC5402连接,P1.0作为串行时钟输出口,P1.3作为帧同步信号输出口_。

SPI串口连接如图3所示。

VC5402初始化程序(以图3为例):

STM#SPCRll,SPSAl;设置时钟停止位进入MCBSP的SPI模式

STM#0X1000,SPSDl;时钟开始于上升沿(无延迟)

STM#SPCRl2,SPSAl

STM#0X0040,SPSDl;XINT由XRDY(即字尾)驱动

STM#PCRl,SPSAl

STM#0X000C,SPSDl;对发送和接收时钟,同步帧进行设置

STM#RCRll.SPSAl

STM#0X0000,SPSDl;接收数据l帧1字.1字8位

STM#XCRll,SPSAl

STM#0X0000,SPSDl;;发送数据1帧1字.1字8位;

P1.0发送到VC5402的移位时钟是保证DSP正确采样接收和发送数据的时钟。它要保证和C51的采样接收和发送数据的时钟一致.才能使主从机同步。

2 并行通信设计与实现

21 VC5402的HPI接口原理

HPI一8是一个8位(HD0~HD7)的连接DSP与主机设备或主处理器的并行接口。DSP与主机通过DSP的片内RAM交换数据,整个片内RAM都可以作为HPI一8的存储器。HPIA地址寄存器只能由主机直接访问,存放当前寻址的存储器的地址;HPID数据锁存器只能由主机直接访问,存放当前要写入或读出的数据;HPIC控制寄存器可以被主机和VC5402共同访问。HPI本身的硬件中断逻辑可以完成主从设备之间的握手,主机通过置HPIC中的特定位产生DSP中断,同样DSP通过nHINT引脚对主机产生中断。HRDY引脚用于自动调节主机访问HPI的速度,使慢速外部主机与DSP能很好地匹配。HRDY由HCS使能,即当HCS为高时HRDY一直为高,而当EMUl/nOFF为低时,HDRY输出高阻。

HPI连接如图4所示。

22 并行接口设计

将C51置为主机,VC5402置为从机。C51的PO口和HPI的8位数据线HD0~HD7相连作为数据传输通道,P1.0~P1.3设置为输出控制HPI口的 *** 作。其中P1.0作为读写控制选通信号连接HR/W;P1.1连接字节识别信号HBIL,控制读写数据是属于16位字的第1还是第2字节;P1.2和P1.3分别连接HCNTL0和HCNTLl,以实现对HPIC、HPIA和HPID寄存器的访问;nRD和nWR连接nHDSl和nHDS2作为数据选通信号来锁存有效的HCNTLO/1、HBIL和HR/W信号。nINTl作为输入,与HPI口的主机中断信号nHINT相连。nHCS一直接地,而nHAS口和ALE口相连接,在HCNTL0/I、HBIL和HR/W信号有效之后,设置nHDSl为低电平,则实现了读写的数据选通,从而完成C51对VC5402 HPI口的读写 *** 作。在数据交换过程中,C51向HPI发送数据时,通过置VC5402的HPI控制寄存器HPIC中的DSPINT位为l来中断VC5402。C51接收来自HPI的数据时通过查询方式,当VC5402 DSP准备发送数据时,置nHINT信号为低;C51查询到nlNTl为低时,调用接收数据子程序来实现数据的接收。

C51与VC5402的并行连接如图5所示。

主机接收和发送初始化程序(以图5连接为例):

RTITEADDRESS: ;写入VC5402存储器地址信息

CLR P1.2

注:①HBlL脚在传输过程中指示当前字节为第l还是第2字节。

②为方便DSP自举引导加载程序.常采用将nHlNT脚直接与INT2

脚相连。

图5 AT89C51与V05402的并行连接

SETB P1.3 ;主机可读写HPlA地址寄存器

CLR P1.0 ;主机要求写选通HPI一8

MOV P0,A ;写入8位地址

CALL DELAY ;等待地址写入完成

READDATA: ;读出VC5402存储器数据信息

SETB P1.2

CLR P1.3 ;主机可读写HPID数据寄存器

SET P1.0 ;主机要求读选通HPI一8

MOVA,P0 ;读出8位数据

CALL DELAY ;等待数据读出完成

WRITEDATA: ;写入VC5402存储器数据信息

SETB Pl.2

CLR P1.3 ;主机可读写HPID数据寄存器

CLR P1.0 ;主机要求写选通HPI一8

MOV P0,A ;写入8位数据

CALL DELAY ;等待数据写入完成

不管是串行连接还是并行连接,都要考虑到VC5402是采用3.3 V供电,C51采用5 V供电。两者之间存在信号电平的差异而不能直接相连,应互连接口隔离器件。

现在通过仿真来实现和检验应用于FANC系统的SPSA-based MF算法,下一步检验实验设备性能。所选用的实验台是一个简单的一维空间木制管道,和两个电阻为18Ω直径为16cm的扬声器,还有两个PZM86麦克风。主扬声器用于产生主干扰信号,取消扬声器产生抗噪音信号。误差麦克风(#1)用于测量残留误差信号,反馈给DSP来校正控制器参数记录麦克风(#2)用于记录误差信号并反馈给分析器来分析误差范围。图13所示的实验设备,其中图13A是所用管道,图13B是DSP实验台它包括A/D转换器AD7865和D/A转换器AD7840,图13C是一个信号处理板,它包括滤波器MAX296,放大器MAX422和开关模式电源HAD25-5-N。图14表示ANC系统的全部结构图。

示例程序

void InitMcBSP0(void) //将McBSP0初始化为SPI

{

SPSA0=SPCR10_SUB;

SPSD0=0x00; //接收端复位RRST=0

SPSA0=SPCR20_SUB;

SPSD0=0x00; //发送端复位XRST=0

SPSA0=SPCR10_SUB;

SPSD0=0x1800; //CLKSTP=11

SPSA0=PCR0_SUB;

SPSD0=0x0A08; //CLKXM=1(主设备);CLKXP=0

SPSA0=RCR10_SUB;

SPSD0=0x00; //RWDLEN1=000,接收包长度为8

SPSA0=RCR20_SUB;

SPSD0=0x0001; //在BFSX信号上提供正确的建立时间

SPSA0=XCR10_SUB;

SPSD0=0x00; //XWDLEN1=000,发送包长度为8

SPSA0=XCR20_SUB;

SPSD0=0x0001; //在BFSX信号上提供正确的建立时间

SPSA0=SRGR10_SUB;

SPSD0=0x00FE; //为采样率时钟定义分频因子

SPSA0=SRGR20_SUB;

SPSD0=0x2000; //CLKSM=1,从CPU得到时钟;每个包传送时,激活BFSX信号

SPSA0=SPCR20_SUB;

SPSD0=0x0063; //发送端脱离复位XRST=1

SPSA0=SPCR10_SUB;

SPSD0|=0x0001; //接收端脱离复位RRST=1;采样率产生器脱离复位GRST=1

delay(256); //为使McBSP逻辑稳定,需等待两个采样率产生器时钟周期

}

二.HDn作为片选信号时DSP与MCP2510通信过程

21读程序

211 MCP2510读取过程

在读 *** 作开始时,CS引脚将被置为低电平。随后读指令和8 位地址码(A7 至 A0)将被依次送入MCP2510 。在接收到读指令和地址码之后, MCP2510 指定地址寄存器中的数据将被移出通过SO引脚进行发送。每一数据字节移出后,器件内部的地址指针将自动加一以指向下一地址。因此可以对下一个连续地址寄存器进行读 *** 作。通过该方法可以顺序读取任意个连续地址寄存器中的数据。通过拉高CS引脚电平可以结束读 *** 作。

编程时需注意问题:

1. SPI的读 *** 作是通过写 *** 作完成的。因此在DSP发送地址字节后,再发送一任意8位数据以产生接收时钟。

2. 在发送完任意8位数据后,DSP要有个延时,以等待写入DXR的数据从发送端移出,从而保证从2510输出的数据能够正确地被DSP接收。延时时间应大于采样率产生器输出的8个周期,最好长一些。

3. 由于SPI在发送数据的同时也在接收数据,所以在读取有效数据前(即在发送地址字节完毕后)要先清空接收缓冲器,否则可能会因为接收缓冲器溢出而无法接收有用的数据。可以通过读取3次(因为5402的McBSP有3个接收缓冲器)接收缓冲器DRR的值来实现清空缓冲器的 *** 作,读取之前要注意延时(等待地址字节发送完毕)。

212 示例程序

Uint16 ReadMCP2510(Uint16 Addr)

{

ChipSlctMCP2510(0); //打开片选

NOP;

NOP;

NOP;

//发送读指令

DXR10=READ_MCP2510;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

{;}

//发送地址

DXR10=Addr;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

{;}

delay(1000); //延时,等待地址字节从DX移出

//读取数据

Addr=DRR10; //读3次,清空缓冲器

Addr=DRR10;

Addr=DRR10;

DXR10=0; //发送任意数据,以便产生接收时钟

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

{;}

delay(1000); //延时,等待数据接收

Addr=DRR10; //第一次为无效数据

ChipSlctMCP2510(3);

return Addr;

}

22写程序

221 MCP2510写 *** 作

置CS引脚为低电平启动写 *** 作。 启动写指令后,地址码以及至少一个字节的数据被依次发送到MCP2510 。只要 CS 保持低电平,就可以对连续地址寄存器进行顺序写 *** 作。在SCK 引线上的上升沿,数据字节将从D0位开始依次被写入。如果CS 引脚在字节的8 位数据尚未发送完之前跳变到高电平,该字节的写 *** 作将被中止,而之前发送的字节已经写入。

编程时需注意问题:

1 2510如何区分指令、地址和数据?由于读写指令、地址字节和数据字节的值可能会一样,所以有必要通过一定的时序来将他们区分开来。经实验验证,2510应该是通过片选信号CS来区分这几个数据的,当CS从高变低后,第一个字节就是指令,哪怕上次没有正确的读写,只要将CS置1,然后再置0,就会重新开始一个指令的周期。

2 发送完数据字节后一定要有个延时来等待数据字节从DX引脚发送出去,之后才能将片选信号CS置1,否则无法正确写入数据。

222 示例程序

void WriteMCP2510(Uint16 Addr,Uint16 wrData)

{

ChipSlctMCP2510(0);

NOP;

NOP;

NOP;

DXR10=WRITE_MCP2510;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

{;}

DXR10=Addr;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

{;}

DXR10=wrData;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

{;}

delay(1000);

ChipSlctMCP2510(3);

}

三.BFSX作为片选信号时DSP与MCP2510通信过程

由于要完成2510的读写 *** 作需要3个字节,所以采用BFSX引脚作为MCP2510的片选信号时需要将XCR1和RCR1中的XWDLEN1、RWDLEN1设置为100(24bit)。

由于发送接收字长度设置为24位,因此在发送过程中需要用到DXR2和DRR2寄存器,在此需要注意的一点就是,DXR2(DRR2)必须要比DXR1(DRR1)先初始化或读取。其中DXR2(DRR2)中存放的是24bit的高8位,DXR1(DRR1)中存放的是24bit的低16位。发送时DXR2中的数据首先发送,接收时数据首先存放到DRR2中,因此DXR2(DRR2)中存放指令字节,DXR1(DRR1)中由高到低存放地址和数据。

下面为一个简单的调试程序。

Uint16 Debug24bit( )

{

int i;

DXR20=0x02; //写指令

DXR10=0x0F01; //0F为CANCTRL地址,01为待写入的数据

delay(3000); //延时,等待发送完毕

i=DRR10; //清空接收缓冲器

i=DRR10;

i=DRR10;

DXR20=0x03; //读指令

DXR10=0x0F00; //0F为CANCTRL地址,00用于读取数据

delay(3000); //延时,等待接收完毕

i=DRR10&0x00FF; //DRR10低8位为有用数据

return i;

}

四. 通信时MCP2510的初始化

411 确定时间份额

计算公式:

时间份额TQ定义为:TQ = 2(BaudRate + 1)TOSC

其中,BaudRate 是由 CNF1BRP<5:0> 表征的二进制数。

标称位时间 = TQ (Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)

- 同步段(Sync_Seg)

- 传播时间段(Prop_Seg)

- 相位缓冲段1 (Phase_Seg1)

- 相位缓冲段2 (Phase_Seg2)

假设每个标称位包含N个时间份额TQ,则根据以上公式有:1/100K = NTQ

现设定分频值BaudRate为1,根据以上公式计算,得出在4MHz时钟时,要实现100Kbps的波特率每个标称位包含个10时间份额TQ,在N满足要求的情况下BaudRate还可以设置为其他值,由MCP2510的手册得知的TQ数量N应在6-25之间。然而在满足这个前提下,应尽量使TQ的时间短一些,即一个标称位的时间份额数量N多一些,这样选择采样点位置时具有更好的分辨率。

412 设置时间段和采样点

在确定了一个标称位包含的时间份额数量后,还需要对各个时间段包含的时间份额进行分配,以确定采样点的位置。位的采样时刻取决于系统参数,通常应发生在位时间的60-70%处。同时,同步段的时间份额为1 TQ,TDELAY典型值为1-2TQ。因此时间份额分配如下:

(Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)=(1+2+3+4)

413 确定同步跳转宽度和采样次数

根据规则,SJW最大值 为4TQ。然而通常情况下,只有当不同节点的时钟发生不够精确或不稳定时,例如采用陶瓷谐振器时,才需要较大的SJW。一般情况下, SJW取1即可满足要求。

随着能源危机和环境污染的加剧,在绿色能源快速发展的大环境下,风力发电正受到前所未有的重视和发展。但由于风力涡轮发电机存在着非线性的特性,其运行输出的最大功率点位置将随风速的改变而不同。 由于可再生能源的可变性以及要与电网相互作用,风力发电装置通常被认为是电能质量较差的装置,因此在设计控制系统时要考虑电能质量。风力机出现时就有了对控制的要求,控制的主要目标是将功率与转速限制在一些标准值以下,以保证风力机在大风的条件下安全运行。因此从根本上说风力机是一个捕获风能并将风能转换为其他有用能量的装置,特别是与电网相连的风能转换系统,其设计必须保证能耗最小、运行安全、满足其噪声发射和电能质量的要求 为保证可再生能源的最大利用率,风电并网系统需采用适当控制策略,以便尽可能保证有功功率的最大输出,由于风电场风速动态波动变化,风电场的输出功率存在较大随机波动,间歇性的功率波动将对大电网的电能质量造成不利影响。

中文名

最大风能追踪技术

用于风力发电的最大功率追踪器,能快速追踪风力发电系统输出的最大功率点。扰动观测法结构简单,反应速度快,但当发电机达到最大功率点附近时,容易受外界干扰,造成功率损耗,降低风能使用效率。比率法其扰动程度比扰动观测法要小很多倍,但达到最大功率点所需的时间相对较长。三点权位法在系统达到最大功率点时,受外界干扰少,但其计算量大,追踪时间较比率法还久。模糊控制法运算量大,且需要设计良好的模糊规则库才可以达到预期目标。登山式搜寻法若定步长过大,稳定时转速扰动导致功率波动较大,若定步长过小,则影响风速响应速度;同时变步长时算法会滞后风速变化。 为使风力发电系统在变动风速下,不受外界干扰,易使风力机保持在最大功率点运行,可通过调节电源转换器的工作周期,使风力发电系统在任何风速下皆可运行在最大功率点,从而将最大功率输出至负载,并避免实际运行时使用风力计和转速计,本章采用了同步扰动随机逼近(SPSA)算法进行风力发电系统的最大功率追踪。

T恤上spsa意思是是“Casma,Peru”的缩写,意思是“秘鲁卡斯马”,同时扰动随机逼近。我们认为使用SPSA(同时扰动随机逼近)的固定增益版本的优化离散函数的一类。该程序已被修改,以获得一个优化的方法。

id) //将McBSP0初始化为SPI

{

SPSA0=SPCR10_SUB;

SPSD0=0x00; //接收端复位RRST=0

SPSA0=SPCR20_SUB;

SPSD0=0x00; //发送端复位XRST=0

SPSA0=SPCR10_SUB;

SPSD0=0x1800; //CLKSTP=11

SPSA0=PCR0_SUB;

SPSD0=0x0A08; //CLKXM=1(主设备);CLKXP=0

SPSA0=RCR10_SUB;

SPSD0=0x00; //RWDLEN1=000,接收包长度为8

SPSA0=RCR20_SUB;

SPSD0=0x0001; //在BFSX信号上提供正确的建立时间

SPSA0=XCR10_SUB;

SPSD0=0x00; //XWDLEN1=000,发送包长度为8

SPSA0=XCR20_SUB;

SPSD0=0x0001; //在BFSX信号上提供正确的建立时间

SPSA0=SRGR10_SUB;

SPSD0=0x00FE; //为采样率时钟定义分频因子

SPSA0=SRGR20_SUB;

SPSD0=0x2000; //CLKSM=1,从CPU得到时钟;每个包传送时,激活BFSX信号

SPSA0=SPCR20_SUB;

SPSD0=0x0063; //发送端脱离复位XRST=1

SPSA0=SPCR10_SUB;

SPSD0|=0x0001; //接收端脱离复位RRST=1;采样率产生器脱离复位GRST=1

delay(256); //为使McBSP逻辑稳定,需等待两个采样率产生器时钟周期

}

二.HDn作为片选信号时DSP与MCP2510通信过程

21读程序

211 MCP2510读取过程

在读 *** 作开始时,CS引脚将被置为低电平。随后读指令和8 位地址码(A7 至 A0)将被依次送入MCP2510 。在接收到读指令和地址码之后, MCP2510 指定地址寄存器中的数据将被移出通过SO引脚进行发送。每一数据字节移出后,器件内部的地址指针将自动加一以指向下一地址。因此可以对下一个连续地址寄存器进行读 *** 作。通过该方法可以顺序读取任意个连续地址寄存器中的数据。通过拉高CS引脚电平可以结束读 *** 作。

编程时需注意问题:

1. SPI的读 *** 作是通过写 *** 作完成的。因此在DSP发送地址字节后,再发送一任意8位数据以产生接收时钟。

2. 在发送完任意8位数据后,DSP要有个延时,以等待写入DXR的数据从发送端移出,从而保证从2510输出的数据能够正确地被DSP接收。延时时间应大于采样率产生器输出的8个周期,最好长一些。

3. 由于SPI在发送数据的同时也在接收数据,所以在读取有效数据前(即在发送地址字节完毕后)要先清空接收缓冲器,否则可能会因为接收缓冲器溢出而无法接收有用的数据。可以通过读取3次(因为5402的McBSP有3个接收缓冲器)接收缓冲器DRR的值来实现清空缓冲器的 *** 作,读取之前要注意延时(等待地址字节发送完毕)。

212 示例程序

Uint16 ReadMCP2510(Uint16 Addr)

{

ChipSlctMCP2510(0); //打开片选

NOP;

NOP;

NOP;

//发送读指令

DXR10=READ_MCP2510;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

//发送地址

DXR10=Addr;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

delay(1000); //延时,等待地址字节从DX移出

//读取数据

Addr=DRR10; //读3次,清空缓冲器

Addr=DRR10;

Addr=DRR10;

DXR10=0; //发送任意数据,以便产生接收时钟

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

delay(1000); //延时,等待数据接收

Addr=DRR10; //第一次为无效数据

ChipSlctMCP2510(3);

return Addr;

}

22写程序

221 MCP2510写 *** 作

置CS引脚为低电平启动写 *** 作。 启动写指令后,地址码以及至少一个字节的数据被依次发送到MCP2510 。只要 CS 保持低电平,就可以对连续地址寄存器进行顺序写 *** 作。在SCK 引线上的上升沿,数据字节将从D0位开始依次被写入。如果CS 引脚在字节的8 位数据尚未发送完之前跳变到高电平,该字节的写 *** 作将被中止,而之前发送的字节已经写入。

编程时需注意问题:

1 2510如何区分指令、地址和数据?由于读写指令、地址字节和数据字节的值可能会一样,所以有必要通过一定的时序来将他们区分开来。经实验验证,2510应该是通过片选信号CS来区分这几个数据的,当CS从高变低后,第一个字节就是指令,哪怕上次没有正确的读写,只要将CS置1,然后再置0,就会重新开始一个指令的周期。

2 发送完数据字节后一定要有个延时来等待数据字节从DX引脚发送出去,之后才能将片选信号CS置1,否则无法正确写入数据。

222 示例程序

void WriteMCP2510(Uint16 Addr,Uint16 wrData)

{

ChipSlctMCP2510(0);

NOP;

NOP;

NOP;

DXR10=WRITE_MCP2510;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

DXR10=Addr;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

DXR10=wrData;

SPSA0=SPCR20_SUB;

while(!(SPSD0&0x02)) //等待上一个数据发送完毕

delay(1000);

ChipSlctMCP2510(3);

}

三.BFSX作为片选信号时DSP与MCP2510通信过程

由于要完成2510的读写 *** 作需要3个字节,所以采用BFSX引脚作为MCP2510的片选信号时需要将XCR1和RCR1中的XWDLEN1、RWDLEN1设置为100(24bit)。

由于发送接收字长度设置为24位,因此在发送过程中需要用到DXR2和DRR2寄存器,在此需要注意的一点就是,DXR2(DRR2)必须要比DXR1(DRR1)先初始化或读取。其中DXR2(DRR2)中存放的是24bit的高8位,DXR1(DRR1)中存放的是24bit的低16位。发送时DXR2中的数据首先发送,接收时数据首先存放到DRR2中,因此DXR2(DRR2)中存放指令字节,DXR1(DRR1)中由高到低存放地址和数据。

下面为一个简单的调试程序。

Uint16 Debug24bit( )

{

int i;

DXR20=0x02; //写指令

DXR10=0x0F01; //0F为CANCTRL地址,01为待写入的数据

delay(3000); //延时,等待发送完毕

i=DRR10; //清空接收缓冲器

i=DRR10;

i=DRR10;

DXR20=0x03; //读指令

DXR10=0x0F00; //0F为CANCTRL地址,00用于读取数据

delay(3000); //延时,等待接收完毕

i=DRR10&0x00FF; //DRR10低8位为有用数据

return i;

}

四. 通信时MCP2510的初始化

411 确定时间份额

计算公式:

时间份额TQ定义为:TQ = 2(BaudRate + 1)TOSC

其中,BaudRate 是由 CNF1BRP<5:0> 表征的二进制数。

标称位时间 = TQ (Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)

- 同步段(Sync_Seg)

- 传播时间段(Prop_Seg)

- 相位缓冲段1 (Phase_Seg1)

- 相位缓冲段2 (Phase_Seg2)

假设每个标称位包含N个时间份额TQ,则根据以上公式有:1/100K = NTQ

现设定分频值BaudRate为1,根据以上公式计算,得出在4MHz时钟时,要实现100Kbps的波特率每个标称位包含个10时间份额TQ,在N满足要求的情况下BaudRate还可以设置为其他值,由MCP2510的手册得知的TQ数量N应在6-25之间。然而在满足这个前提下,应尽量使TQ的时间短一些,即一个标称位的时间份额数量N多一些,这样选择采样点位置时具有更好的分辨率。

412 设置时间段和采样点

在确定了一个标称位包含的时间份额数量后,还需要对各个时间段包含的时间份额进行分配,以确定采样点的位置。位的采样时刻取决于系统参数,通常应发生在位时间的60-70%处。同时,同步段的时间份额为1 TQ,TDELAY典型值为1-2TQ。因此时间份额分配如下:

(Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)=(1+2+3+4)

413 确定同步跳转宽度和采样次数

根据规则,SJW最大值 为4TQ。然而通常情况下,只有当不同节点的时钟发生不够精确或不稳定时,例如采用陶瓷谐振器时,才需要较大的SJW。一般情况下, SJW取1即可满足要求。

以上就是关于有哪位可以告诉我HPI接口的原理全部的内容,包括:有哪位可以告诉我HPI接口的原理、有源噪声控制英译汉、Verilog HDL或者C语言对MCP2510如何初始化我想知道具体的地址和值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10092769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存