打印
[DSP编程]

将F2812的McBSP配置成SPI主模式,读取的数据不对

[复制链接]
4944|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
U201015703|  楼主 | 2015-4-28 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       将F2812的McBSP配置成SPI主模式来读取AD芯片的转换数据,因为不需要对这个AD芯片进行配置,所以不需要发送数据给这个芯片,因此,我把MDRA接口配置成通用I/O口,来作为AD芯片的启动信号,因为有3个从设备,所以至少要有两个片选信号,将MFSRA和MFSXA配置成通用I/O口,作为片选信号,不知道这么做是否正确。。。@zhangmangui
        然后先将程序下载到内部RAM,进行调试,因为不需要对这个AD芯片进行配置,所以发送伪数据来启动数据传输,但是最后读取的数据不对。。。AD芯片是下降沿读取数据。下面是McBSP的配置情况:
McbspaRegs.SPCR2.bit.XRST = 0;
McbspaRegs.SPCR1.bit.RRST = 0;
McbspaRegs.SPCR2.bit.GRST = 0;
McbspaRegs.SPCR1.bit.CLKSTP = 0x03;
McbspaRegs.PCR.bit.CLKXP = 1;
McbspaRegs.PCR.bit.CLKRP = 1;
McbspaRegs.PCR.bit.SCLKME = 0;
McbspaRegs.PCR.bit.CLKXM = 1;
McbspaRegs.PCR.bit.FSXM = 1;
McbspaRegs.PCR.bit.FSRM = 1;
McbspaRegs.XCR2.bit.XDATDLY = 1;
McbspaRegs.RCR2.bit.RDATDLY = 1;
McbspaRegs.RCR1.bit.RWDLEN1 = 2;
McbspaRegs.XCR1.bit.XWDLEN1 = 2;
McbspaRegs.SRGR1.bit.CLKGDV = 0x0E;
McbspaRegs.SRGR2.bit.FSGM = 0;
McbspaRegs.SRGR2.bit.CLKSM= 1;
asm(" RPT #5 || NOP ");
McbspaRegs.SPCR2.bit.GRST = 1;
asm(" RPT #140 || NOP ");
McbspaRegs.SPCR2.bit.XRST = 1;
McbspaRegs.SPCR1.bit.RRST = 1;
asm(" RPT #140 || NOP ");
困扰很久了,哪位高人指导一下,不甚感激

相关帖子

来自 2楼
U201015703|  楼主 | 2015-4-29 10:39 | 只看该作者
问题已经解决了,是我的外设McBSP时钟没有使能,同时也证明了上面的配置是没有问题的,即配置成SPI模式时,可以只使用其中的三根信号线,把MDRA接口配置成通用I/O口,做其他用途。。。

使用特权

评论回复
板凳
zhangmangui| | 2015-4-28 22:53 | 只看该作者
Mcbsp可以配置成兼容SPI协议的模式(时钟停止模式),配置成SPI后,有几点需要注意:

1. 片选CS有效(拉低)到有效数据输出之间的时间间隔与Mcbsp时钟有关系,据我的观察,这个时间不是太固定,为了满足有些从器件的时序要求,可能需要调节Mcbsp时钟;

2. SPI输出的FIFO功能很是奇怪,除非你一直有大流量的数据需要传输,不然,不推荐使用这个功能,当需要传输的数据为0之前,如果不在FIFO发送中断中处理中断使能位,一旦需要传输的数据为0,则程序就会陷入FIFO中断的死循环,我的观察是这样,不知道寄存器的配置是否正确,仅供参考!

使用特权

评论回复
地板
zhangmangui| | 2015-4-28 23:25 | 只看该作者
1.McBSP接口总共有几个?每个McBSP接口有几根pin?

TMS320F28335总共有两个McBSP接口。每个接口有六根pin, 分别是:MFSX, MFSR, MCLKX, MCLKR, MDX, MDR。

2.McBSP用于SPI模式时使用那些pin?他们和标准SPI pin的对应关系是什么?

SPICLK->MCLKX

SPISIMO->MDX

SPISOMI->MDR

SPISTE->MFSX

SPITXINT->

SPIRXINT->

3.McBSP如何开启clock stop mode以兼容SPI接口?

通过CLKSTP、CLKXP和CLKRP来配置时钟的极性和延时的SPI兼容模式。

1.McBSP接口总共有几个?每个McBSP接口有几根pin?

TMS320F28335总共有两个McBSP接口。每个接口有六根pin, 分别是:MFSX, MFSR, MCLKX, MCLKR, MDX, MDR。

2.McBSP用于SPI模式时使用那些pin?他们和标准SPI pin的对应关系是什么?

SPICLK->MCLKX

SPISIMO->MDX

SPISOMI->MDR

SPISTE->MFSX

SPITXINT->

SPIRXINT->

3.McBSP如何开启clock stop mode以兼容SPI接口?

通过CLKSTP、CLKXP和CLKRP来配置时钟的极性和延时的SPI兼容模式

使用特权

评论回复
5
U201015703|  楼主 | 2015-4-29 08:43 | 只看该作者
zhangmangui 发表于 2015-4-28 23:25
1.McBSP接口总共有几个?每个McBSP接口有几根pin?

TMS320F28335总共有两个McBSP接口。每个接口有六根pin ...

我用的是F2812,如果我用通用I/O口来模拟SPI时序的话,可以准确地读出数据,但是用McBSP配置成SPI的模式来读的话,结果就不对,好郁闷啊:'(

使用特权

评论回复
6
U201015703|  楼主 | 2015-4-29 08:53 | 只看该作者
zhangmangui 发表于 2015-4-28 23:25
1.McBSP接口总共有几个?每个McBSP接口有几根pin?

TMS320F28335总共有两个McBSP接口。每个接口有六根pin ...

O(∩_∩)O哈哈~:lol,刚刚才发现,在TI社区回复的居然是你啊

使用特权

评论回复
7
zhangmangui| | 2015-4-29 22:21 | 只看该作者
U201015703 发表于 2015-4-29 08:43
我用的是F2812,如果我用通用I/O口来模拟SPI时序的话,可以准确地读出数据,但是用McBSP配置成SPI的模式 ...

那就把McBSP配置为IO口    然后再配置为SPI

使用特权

评论回复
8
zhangmangui| | 2015-4-29 22:21 | 只看该作者
U201015703 发表于 2015-4-29 08:53
O(∩_∩)O哈哈~,刚刚才发现,在TI社区回复的居然是你啊

DSP爱好者   到处游走

使用特权

评论回复
9
U201015703|  楼主 | 2015-4-30 09:32 | 只看该作者
zhangmangui 发表于 2015-4-29 22:21
DSP爱好者   到处游走

DSP的忠实粉丝

使用特权

评论回复
10
123love| | 2016-12-3 15:16 | 只看该作者
U201015703 发表于 2015-4-29 08:43
我用的是F2812,如果我用通用I/O口来模拟SPI时序的话,可以准确地读出数据,但是用McBSP配置成SPI的模式 ...

能说一下你怎么模拟的么

使用特权

评论回复
11
123love| | 2016-12-3 15:17 | 只看该作者
zhangmangui 发表于 2015-4-28 23:25
1.McBSP接口总共有几个?每个McBSP接口有几根pin?

TMS320F28335总共有两个McBSP接口。每个接口有六根pin ...

这个片选信号,用MFSX连接 会不会有问题?

使用特权

评论回复
12
U201015703|  楼主 | 2016-12-7 15:26 | 只看该作者
123love 发表于 2016-12-3 15:17
这个片选信号,用MFSX连接 会不会有问题?

没有问题,亲测有效

使用特权

评论回复
13
U201015703|  楼主 | 2016-12-7 15:32 | 只看该作者
U201015703 发表于 2016-12-7 15:26
没有问题,亲测有效

可以看一下附件的文档

DSP多通道缓冲串行口SPI方式的应用.pdf

211.26 KB

DSP嵌入式系统中SPI协议的一种实现方法_梁永明.pdf

241.26 KB

McBSP与常用串行接口通信兼容方案设计_朱磊.pdf

844.54 KB

基于McBSP实现DSPs与串行ADDA的接口设计.pdf

339.21 KB

基于SPI的DSP与MCU双向通信的设计与实现.pdf

298.91 KB

基于TMS320F2812多通道缓冲串口的SPI设计与实现.pdf

425.47 KB

基于TMS320F2812多通道缓冲串口高速实时数据采集接口设计_关星.pdf

464.78 KB

通过SPI接口协议实现DSP与其它设备的通信_张锐.pdf

139.86 KB

使用特权

评论回复
14
U201015703|  楼主 | 2016-12-7 15:57 | 只看该作者
123love 发表于 2016-12-3 15:16
能说一下你怎么模拟的么

也不算是模拟SPI时序了,就是利用IO口来读取数据,我用的AD芯片是SCLK上升沿将所有数据位逐个输出,IO口连接到AD芯片的SCLK,令IO值等于1,再令IO值等于0,读取另外接收数据的IO口,即可

使用特权

评论回复
15
Fraisty| | 2018-3-30 21:33 | 只看该作者
请问你是不是没用MDXA啊  AD的话不肯定需要DRA读取嘛

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

130

帖子

3

粉丝