您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]BF518的SPORT口如何模拟SPI时序和具有... 
本帖共有951个阅读者
发表帖子 发表投票 回复主题
[求助]BF518的SPORT口如何模拟SPI时序和具有SPI接口的通信
snooby521(论坛新手)
snooby521
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:179
积分:13
注册时间:2012/8/9
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]BF518的SPORT口如何模拟SPI时序和具有SPI接口的通信
如题,我现在遇到一个问题,就是用BF518的sport口模拟spi时序的时候和有SPI接口的器件通信不上,不能正常的收发,用的是DMA中断来实现的,有人弄过的话,麻烦告诉我如何操作~!~~~~先谢谢了~!~~~~
下面是我自己程序的配置,功能就是有个脉冲触发信号来,启动通信,我把RFS0和TFS0连起来当CS,TSCLK0和RSCLK0连一起当SCK:
void Init_SPORT0_TX(short TCLKDIV,short TFSDIV)
{
*pSPORT0_TCR1 |= TFSR;
*pSPORT0_TCR2 |= 0x0207;
*pSPORT0_TCLKDIV |= TCLKDIV;
         *pSPORT0_TFSDIV |= TFSDIV;
}
void Init_SPORT0_RX(short RCLKDIV,short RFSDIV)
{
*pSPORT0_RCR1 |= RFSR|IRCLK|IRFS;
*pSPORT0_RCR2 |= 0x0207;
*pSPORT0_RCLKDIV |= RCLKDIV;
         *pSPORT0_RFSDIV |= RFSDIV;
}

void Init_DMA(void)
{
*pDMA3_PERIPHERAL_MAP = 0x3000;
  *pDMA3_CONFIG = 0x1082;
  *pDMA3_START_ADDR = (void *)SportRxBuf;
  *pDMA3_X_COUNT = 1;
  *pDMA3_X_MODIFY = 0;

  *pDMA4_PERIPHERAL_MAP = 0x4000;
  *pDMA4_CONFIG = 0x1080;
  *pDMA4_START_ADDR = (void *)SportTxBuf;
  *pDMA4_X_COUNT = 1;
  *pDMA4_X_MODIFY = 0;
}

void main(void)
{
unsigned short int i;
Set_PLL(16,24);
Init_SDRAM();
Init_EBIU();
Init_SPORT0_IO();
Init_IO();
Init_SPORT0_TX(9,31);
Init_SPORT0_RX(9,31);
Init_DMA();
     Init_Interrupts();
while(1)
{
if(flag==1)
{
flag = 0;
Enable_DMA_Sport0_RX();
Enable_DMA_Sport0_TX();
  }
}
}
EX_INTERRUPT_HANDLER(INIT_ISR)
{
if(*pPORTFIO&PF1)
{
flag = 1;
*pPORTFIO &= ~PF1;
  }
}
EX_INTERRUPT_HANDLER(SPORT0_RX_ISR)
{
if (*pDMA3_IRQ_STATUS & DMA_DONE)
     *pDMA3_IRQ_STATUS |= DMA_DONE;
Disable_DMA_Sport0_RX();
}
EX_INTERRUPT_HANDLER(SPORT0_TX_ISR)
{
if (*pDMA4_IRQ_STATUS & DMA_DONE)
*pDMA4_IRQ_STATUS &= ~DMA_DONE;
Disable_DMA_Sport0_TX();
}



「该帖子被 snooby521 在 2013-04-10 17:48:28 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/4/10 17:28:43
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你先用示波器测试你的时序是否和通讯的器件时序匹配

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/4/11 21:58:52
snooby521(论坛新手)
snooby521
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:179
积分:13
注册时间:2012/8/9
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
cs和SCK都对,就是没有发送和接收~!~~~~

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/4/11 22:41:00
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
*pSPORT0_TCR1 |= TFSR;
*pSPORT0_TCR2 |= 0x0207;
*pSPORT0_TCLKDIV |= TCLKDIV;
*pSPORT0_TFSDIV |= TFSDIV;

你的TCR1配置是否正确,既然配置为外部的时钟和同步,为何还要配置其频率。
你的PLL配置系统时钟为16M,处理器是否能正常工作?
SPORT接口必须在连续运行时,才可以测试到他的数据信号。

你的IO功能映射配置是否正确。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/4/12 21:07:28
snooby521(论坛新手)
snooby521
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:179
积分:13
注册时间:2012/8/9
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
好的,andy,我再看看~!~~~~到时候不行还要麻烦andy看下是否代码的问题~!~~~~

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/4/13 9:47:03
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159271 Call, 1 Queries, Processed in 0.015625 second(s),