您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF51X技术支持专区 -> BF518的SPORT详解
本帖共有903个阅读者
发表帖子 发表投票 回复主题
BF518的SPORT详解
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF518的SPORT详解

接口功能介绍

ADSP-BF51x 上有两个SPORT 口,SPORT(synchronous serial ports)接口是ADSP-BF51x 上速度最快的串口,其速度可以达到系统时钟的1/2, 每一个 SPORT 口有两根接收数据线和两根传输数据线,支持全双工模式传输。SPORT 接口通常用做一些高速的数据传输,它支持I2S 模式,通常将SPORT 接口连接音频的编解码器芯片,作为音频数据输出接口。

SPORT 时钟频率配置:
SPORTx_TCLK frequency = (SCLK frequency)/(2 x (SPORTx_TCLKDIV + 1))

SPORTx_RCLK frequency = (SCLK frequency)/(2 x (SPORTx_RCLKDIV + 1))
SPORT 同步信号频率配置:
SPORTxTFS frequency = (TSCLKx frequency)/(SPORTx_TFSDIV + 1)
SPORTxRFS frequency = (RSCLKx frequency)/(SPORTx_RFSDIV + 1)

不同模式下,寄存器配置值:

上传的图片
  20126713352269.jpg [ 35.73 KB 632×400 ] (缩略时请点击查看原图)

 



我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/7 13:35:29
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

接口寄存器说明

SPORTx_TX_CONFIG SPORTx :传输配置寄存器
SPORTx_RX_CONFIG SPORTx :传输配置寄存器
SPORTx_TX SPORTx :传输寄存器
SPORTx_RX SPORTx :接收寄存器
SPORTx_TSCLKDIV :SPORTx 传输时钟配置寄存器
SPORTx_RSCLKDIV :SPORTx 接收时钟配置寄存器
SPORTx_TFSDIV :SPORTx 传输同步信号配置寄存器
SPORTx_RFSDIV :SPORTx 接收同步信号配置寄存器
SPORTx_STAT :SPORTx 状态寄存器

例子代码分析

*pSPORT1_TCLKDIV = TCLKDIV; //配置SPORT 传输接口的时钟频率

*pSPORT1_TFSDIV = TFSDIV; //配置SPORT 传输接口的同步频率
*pSPORT1_TCR1 = ITFS|TFSR|ITCLK; //配置SPORT 传输工作模式
*pSPORT1_TCR2 = 31; //配置SPORT 以32Bit 数据传输
*pDMA6_PERIPHERAL_MAP = 0x6000; //设置SPORT 传输接口DMA
*pDMA6_CONFIG = WDSIZE_32 | DI_EN |FLOW_1; //设置DMA 工作模式
*pDMA6_START_ADDR = (void *)iTxBuffer; //设置DMA 传输数据起始地址
*pDMA6_X_COUNT = 1000; //设置DMA 传输次数
*pDMA6_X_MODIFY = 4; //设置DMA 每次地址增量变化
*pDMA6_CONFIG = (*pDMA6_CONFIG | DMAEN); //使能传输DMA
*pSPORT1_TCR1 = (*pSPORT1_TCR1 | TSPEN); //使能传输SPORT
*pSIC_IAR2 = 0xffff32ff; //配置SPORT DMA 中断等级
register_handler(ik_ivg9, Sport1_RX_ISR); //注册接收中断
register_handler(ik_ivg10, Sport1_TX_ISR); //注册传输中断
*pSIC_IMASK0 = 0x000C0000; //打开SPORT 传输和接收中断
EX_INTERRUPT_HANDLER(Sport1_TX_ISR) //传输DMA 中断函数
{
*pDMA6_IRQ_STATUS = 0x0001; //清除中断标志位
printf("SPORT TX DMA Done!\n"); //打印信息
*pSIC_IMASK0 &= ~0x00080000; //屏蔽接收中断
}

代码实现功能

代码实现了通过 SPORT1 接口利用SPORT1 DMA 传输数据和接收数据,SPORT1 接口时钟和同步信号采用内部由系统时钟配置分频获取。代码描述了 SPORT1 接口使用DMA 传输时常用的配置,由于没有和其他设备做通讯,所以看不到接收的实际数据。也可以将扩展接口上SPORT1 的DT1PRI 和DR1PRI 两个接口短接,实现环路测试功能,通过接收数据Buffer 查看收到的数据。

测试结果

上传的图片
  20126713375169.jpg [ 3.72 KB 176×56 ] (缩略时请点击查看原图)

 




我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/7 13:37:59
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

漏发代码了,补上!

上传的附件
   20126713441723.rar [ 888.86 KB ]


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/7 13:43:51
huaohui(论坛新手)
huaohui
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:125
积分:5
注册时间:2012/3/2
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

嗯,学习中。。。


努力,加油!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/7 14:30:26
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159022 Call, 1 Queries, Processed in 0.046875 second(s),