您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> sport口接收中断进不去?
本帖共有790个阅读者
发表帖子 发表投票 回复主题
sport口接收中断进不去?
dragon422(论坛新手)
dragon422
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:172
积分:10
注册时间:2013/6/15
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
sport口接收中断进不去?
还是BF548和BF561之间通过sport口通讯,发现,BF548接收BF561数据时,BF561的sport口接收中断能进去,但是BF561发送中断进不去,大神知道是啥原因呢?
还有就是BF561的接收中断会修改发送DMA的寄存器,不知道什么原因啊!一下是BF561的sport口程序,大家帮看看问题在哪里啊!多谢啊!
/////////////////////////////////////////////////////////
void SPORT1_TX_ResetOn(void)
{
*pDMA2_3_CONFIG &=  ~DMAEN;//停止发
*pSPORT1_TCR1&=~TSPEN;
ssync();
*pDMA2_3_CONFIG|=DMAEN;//开启发等待
*pSPORT1_TCR1|=TSPEN;
ssync();
}

void SPORT1_TX_Off(void)
{
*pDMA2_3_CONFIG &=  ~DMAEN;//停止发
*pSPORT1_TCR1&=~TSPEN;
ssync();
}

void SPORT1_RX_ResetOn(void)
{
*pDMA2_2_CONFIG &=  ~DMAEN;//停止受
*pSPORT1_RCR1&=~RSPEN;
ssync();
*pDMA2_2_CONFIG|=DMAEN;//开启收等待
*pSPORT1_RCR1|=RSPEN;
ssync();
}

void SPORT1_RX_Off(void)
{
*pDMA2_2_CONFIG &=  ~DMAEN;//停止收
*pSPORT1_RCR1&=~RSPEN;
ssync();
}

/*****************************************************************************
* 函数名 : SPORT1_ISR
* 返回值 : 无
* 参变量 : 空
* 功 能 : SPORT1-DMA 的中断服务函数
******************************************************************************/
EX_INTERRUPT_HANDLER(SPORT1_ISR)
{
if(*pSICA_ISR0&SIC_MASK(25))//RX
{
*pDMA2_2_IRQ_STATUS = 0x3;//清中断标志
SPORT1_RX_Off();
}
if(*pSICA_ISR0&SIC_MASK(26))//TX
{
*pDMA2_3_IRQ_STATUS = 0x3;//清中断标志
SPORT1_TX_Off();
}
}

/*****************************************************************************
* 函数名 : SPORT1_init
* 返回值 : 无
* 参变量 : 空
* 功 能 : 配置SPORT1 并生成DMA链表
******************************************************************************/
void SPORT1_init(void)
{
*pDMA2_2_CONFIG &=  ~DMAEN;//停止收
*pDMA2_3_CONFIG &=  ~DMAEN;//停止发
*pSPORT1_RCR2 = 0x1F;//32bit
*pSPORT1_RCR1 = RCKFE | LARFS | LRFS | RFSR ;
*pSPORT1_TCR2 = 0x1F;//32bit
*pSPORT1_TCR1 = TCKFE | LATFS | LTFS | TFSR ;
*pEVT8 = SPORT1_ISR;//中断向量
*pSICA_IMASK0 |= SIC_MASK(25);//使能系统中断通道
*pSICA_IMASK0 |= SIC_MASK(26);//使能系统中断通道

//收
*pDMA2_2_CONFIG =WNR | WDSIZE_16 | DMA2D | DI_EN | FLOW_STOP;
*pDMA2_2_START_ADDR = (u32*)ParaDotA_Data;
*pDMA2_2_X_COUNT  = 320*2/2;
*pDMA2_2_X_MODIFY = 2;
*pDMA2_2_Y_COUNT  = 256;
*pDMA2_2_Y_MODIFY = 2;
//发
*pDMA2_3_CONFIG = WDSIZE_16 | DMA2D | DI_EN | FLOW_STOP;
*pDMA2_3_START_ADDR = (u32*)ParaDotA_Data;
*pDMA2_3_X_COUNT  = 320*2/2;
*pDMA2_3_X_MODIFY = 2;
*pDMA2_3_Y_COUNT  = 256;
*pDMA2_3_Y_MODIFY = 2

}


冲动的惩罚
等级:论坛新手 参考IP地址:*.*.*.*
2013/6/20 23:00:27
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你运行代码时,测试一下你的时钟,数据,同步信号是否正常。如果测不到,就看看你SPORT时钟在哪配置的,这个代码我看到。或许你的548配置了,下次做板子,记得留测试点。

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