您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 技术讨论区 -> 【已解决】SPORT 接口 驱动 AD7689 时 SPOR... 
本帖共有1142个阅读者
发表帖子 发表投票 回复主题
【已解决】SPORT 接口 驱动 AD7689 时 SPORT 接口的接收问题
堇朝(论坛新手)
堇朝
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:158
积分:10
注册时间:2015/1/1
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
【已解决】SPORT 接口 驱动 AD7689 时 SPORT 接口的接收问题
用SPORT接口写的关于AD7689的驱动,在示波器上可以查看到采用波形的变化,但是用串口打印出来的一直就是0xFFFF,一直没有变化。

void Init_Sport0(void)
{

   *pSPORT0_RCLKDIV   =    0x0003;            
   *pSPORT0_RFSDIV    =    0x000F;      
*pSPORT0_RCR1       =   RFSR | LARFS | LRFS | IRCLK  ; //配置SPORT接收工作模式
     *pSPORT0_RCR2        =  SLEN_16;//0x010f;                    //配置SPORT以16Bit資料接收
*pSPORT0_TCLKDIV    =    0x0003;            //配置SPORT接收介面的時鐘頻率    
        *pSPORT0_TFSDIV        =    0x000F;                //配置SPORT接收介面的同步頻率
*pSPORT0_TCR1 =  TCKFE | LTFS| LATFS | TFSR | ITCLK ;
*pSPORT0_TCR2 =  SLEN_16;
*pSPORT_GATECLK = 0x0003;//Gated Sport0 clock appears on TSCLK0 pin, TMR0 gated clock ,loop back TMRO output to RFS0,TMR1 output is tied to A/D CNV signal

}

void Init_DMA(void)
{

*pDMA2_PERIPHERAL_MAP = 0x2000;
*pDMA2_CONFIG = WDSIZE_16 | FLOW_AUTO | SYNC;
*pDMA2_START_ADDR = iTxBuffer1;
*pDMA2_X_COUNT = 1;
*pDMA2_X_MODIFY =2;
*pDMA1_PERIPHERAL_MAP = 0x1000;                            //設置SPORT接收介面DMA
    *pDMA1_CONFIG = WNR | WDSIZE_16 | DI_EN | FLOW_AUTO;        //設置DMA工作模式
    *pDMA1_START_ADDR = iRxBuffer1;                    //設置DMA 接收資料起始位址
    *pDMA1_X_COUNT = 1;                                        //設置DMA接收次數
    *pDMA1_X_MODIFY = 2;                                    //設置DMA每次位址增量變化

}

void Enable_DMA_Sport0(void)
{
*pDMA2_CONFIG = (*pDMA2_CONFIG | DMAEN);
*pDMA1_CONFIG = (*pDMA1_CONFIG | DMAEN);
*pSPORT0_RCR1 = (*pSPORT0_RCR1 | RSPEN);
*pSPORT0_TCR1 = (*pSPORT0_TCR1 | TSPEN);

}
void Disable_DMA_Sport0(void)
{
*pSPORT0_TCR1 = (*pSPORT0_TCR1 & (~TSPEN));
*pSPORT0_RCR1 = (*pSPORT0_RCR1 & (~RSPEN));
*pDMA2_CONFIG = (*pDMA2_CONFIG & (~DMAEN));
*pDMA1_CONFIG = (*pDMA1_CONFIG & (~DMAEN));
}

void Init_Interrupts(void)
{

*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffff2f;
*pSIC_IAR2 = 0xffffffff;

register_handler(ik_ivg9, Sport0_RX_ISR);
    //register_handler(ik_ivg10, Sport0_TX_ISR);
*pSIC_IMASK0  = 1<<9;
}


EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
*pDMA1_IRQ_STATUS = 0x0001;
iChannel0LeftIn=1;
iChannel0RightIn = iRxBuffer1[0];
iTxBuffer1[0] = AD7689_CFG1;
uart_device_write_word(&iChannel0RightIn,1);


}


「该帖子被 堇朝 在 2015-03-10 11:21:14 编辑过」

新手学习
等级:论坛新手 参考IP地址:*.*.*.*
2015/3/10 11:18:22
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

调试硬件主要是匹配处理器和AD的时序,不是拿个SPORT接口代码堆起来就能用。你先把SPORT接口的波形,在发送数据时,与AD的数据手册波形一致,然后再挂上AD,来读取一个AD固定寄存器,看能否读到已知的值。通过延时,匹配时序等来实现。

调试主要要一点一点配时序,看代码是看不出什么的。我之前倒是有个54上用SPORT口操作DA的代码。但是很遗憾,时间太久了,没能找到这个代码。貌似在数据盘中莫名消失了。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2015/3/10 23:26:09
堇朝(论坛新手)
堇朝
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:158
积分:10
注册时间:2015/1/1
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问题已解决。不是寄存器配置问题。是TM0和TM1不同步的问题。谢谢版主。

新手学习
等级:论坛新手 参考IP地址:*.*.*.*
2015/3/13 11:48:55
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154460 Call, 1 Queries, Processed in 0.015625 second(s),