您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF53x技术支持专区 -> Blackfin入门教程---BF53x_SPORT
本帖共有987个阅读者
发表帖子 发表投票 回复主题
Blackfin入门教程---BF53x_SPORT
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
Blackfin入门教程---BF53x_SPORT

接口功能介绍

ADSP-BF53x上有两个SPORT口,SPORT(synchronous serial ports)接口是ADSP-BF53x上速度最快的串口,其速度可以达到系统时钟的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)

接口寄存器说明



寄存器

功能

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状态寄存器

例子代码分析

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

       *pSPORT0_TFSDIV            =     TFSDIV;        //配置SPORT传输接口的同步频率

       *pSPORT0_TCR1         =     ITFS|TFSR|ITCLK;//配置SPORT传输工作模式

       *pSPORT0_TCR2         =     31;   //配置SPORT以32Bit数据传输

       *pDMA2_PERIPHERAL_MAP = 0x2000;                  //设置SPORT传输接口DMA

       *pDMA2_CONFIG = WDSIZE_32 | DI_EN |FLOW_1;     //设置DMA工作模式

       *pDMA2_START_ADDR = (void *)iTxBuffer;           //设置DMA 传输数据起始地址

       *pDMA2_X_COUNT = 1000;                                  //设置DMA传输次数

       *pDMA2_X_MODIFY = 4;                                      //设置DMA每次地址增量变化

       *pDMA2_CONFIG       = (*pDMA2_CONFIG | DMAEN);       //使能传输DMA

       *pSPORT0_TCR1        = (*pSPORT0_TCR1 | TSPEN);                 //使能传输SPORT

       *pSIC_IAR0 = 0xffffffff;

       *pSIC_IAR1 = 0xfffff32f;                                       //配置SPORT DMA中断等级

       *pSIC_IAR2 = 0xffffffff;

       register_handler(ik_ivg9, Sport0_RX_ISR);                //注册接收中断

       register_handler(ik_ivg10, Sport0_TX_ISR);              //注册传输中断

       *pSIC_IMASK = 0x00000600;                                 //使能中断

EX_INTERRUPT_HANDLER(Sport0_TX_ISR)         //传输DMA中断函数

{

              *pDMA2_IRQ_STATUS = 0x0001;                    //清楚中断标志位

              printf("SPORT TX DMA Done!\n");                   //打印信息

              *pSIC_IMASK &= ~0x00000400;                            //关闭传输中断

}

代码实现功能

代码实现了通过SPORT0接口利用SPORT0 DMA传输数据和接收数据,SPORT接口时钟和同步信号采用内部由系统时钟配置分频获取。

代码描述了SPORT接口使用DMA传输时常用的配置,没有和其他设备做通讯,所以看不到接收的实际数据。

测试结果


上传的附件
   201168208752.rar [ 353.51 KB ]


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/6/8 20:08:23
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154325 Call, 1 Queries, Processed in 0.015625 second(s),