您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> SPI通信问题BF512
本帖共有578个阅读者
发表帖子 发表投票 回复主题
SPI通信问题BF512
hu12huha(论坛新手)
hu12huha
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:155
积分:9
注册时间:2014/1/10
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
SPI通信问题BF512
上面是我写的ADSP——BF512通过SPI0与AD7324通信的一段程序,可是为什么DSP的SPI_SCK引脚没有时钟信号呢?我想请问一下是哪一步出错了
上传的附件
   201411010175925.zip [ 1.29 KB ]


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/1/10 10:18:40
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你代码没配置PLL,另外SPI手动片选不能通过GPIO寄存器来完成,要使用pSPI1_FLG寄存器,配置相应的FLG位控制。
看这个代码:

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/1/10 15:56:59
hu12huha(论坛新手)
hu12huha
头衔:社区公民
帮派:无帮无派
帖数:7
金钱:155
积分:9
注册时间:2014/1/10
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我用您下面给出的例程还是不行啊,他显示sck的时钟一直是3.3v的稳定值


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/1/12 15:21:10
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你按下面配置吧,如果还没有时钟,检查你的硬件

/********************************************************
*
*   北京四维卓信电子有限公司
*
*  【OpenADSP开源社区】
*
********************************************************/
#include <cdefBF518.h>
#include <ccblkfn.h>

/****************************************************************************
* 名称 : Init_PLL
* 功能 : 配置处理器的内核与系统时钟
* 入口参数 :无
* 返回值 :无
****************************************************************************/
void Set_PLL(int  pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm("ssync;");
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm("ssync;");
asm("idle;");
}
}
/****************************************************************************
* 名称 : Init_DDR
* 功能 : 初始化DDR
* 入口参数 :无
* 返回值 :无
****************************************************************************/
void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000025;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}
/****************************************************************************
* 名称 : Init_EBIU
* 功能 : 初始化EBIU
* 入口参数 :无
* 返回值 :无
****************************************************************************/
void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0x7bb07bb0;
*pEBIU_AMGCTL = 0x000f;
}
/****************************************************************************
* 名称 :InitPorts
* 功能 :初始化端口
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
init_port()
{
   *pPORTG_FER |= PG11;
   *pPORTG_FER &= ~PG1;
    *pPORTG_MUX = 0x1000;

         
*pPORTH_FER =  PH0|PH1|PH2|PH3|PH6;   //set SPI1
    *pPORTH_MUX =  0x0021;
  
   *pPORTG_FER &= ~PG1;
*pPORTGIO_DIR &= ~PG1;
*pPORTGIO_INEN |=  PG1;
*pPORTGIO_EDGE |= PG1 ;
*pPORTGIO_POLAR |= PG1;
    *pPORTGIO_MASKA_SET |= PG1;
}

///////////////////////////////////////////
/////////////////////////////////////////////
#include <cdefBF518.h>

void SPIinit(void)
{
*pSPI1_BAUD=30;
*pSPI1_FLG |=FLS1;  
*pSPI1_CTL = 0x1001|CPHA| CPOL;
*pSPI1_CTL = (*pSPI1_CTL | SPE);
}

unsigned char SPI1_byte_rw(unsigned char value)
{
unsigned char incoming=0;
while(!(*pSPI1_STAT & SPIF));
*pSPI1_TDBR = value;
while(*pSPI1_STAT & RXS)
incoming = *pSPI1_RDBR;
return(incoming);
}

int read_x(void)
{
int x_dat = 0;
int temp = 0;
delay(0xff);
*pSPI1_FLG &= ~FLG1;
delay(0xff);
SPI1_byte_rw(0x90);
delay(0xff);
SPI1_byte_rw(0x00);
x_dat = (SPI1_byte_rw(0x00)&0xff)<<1;
temp = (SPI1_byte_rw(0x00)&0xff)<<1;
x_dat = (x_dat<<8)|temp;
x_dat >>=4;
*pSPI1_FLG |= FLG1;     
delay(0xff);
return x_dat;
}

int read_y(void)
{
int y_dat = 0;
int temp = 0;
delay(0xff);
*pSPI1_FLG &= ~FLG1;
delay(0xff);
SPI1_byte_rw(0xd4);
delay(0xff);
SPI1_byte_rw(0x00);
y_dat = (SPI1_byte_rw(0x00)&0xff)<<1;
temp = (SPI1_byte_rw(0x00)&0xff)<<1;
y_dat = (y_dat<<8)|temp;
y_dat>>=4;
*pSPI1_FLG |= FLG1;   
delay(0xff);
return y_dat;
}

//////////////////////////////////
////////////////////////////////////
/********************************************************
*
*   北京四维卓信电子有限公司
*
*  【OpenADSP开源社区】
*
********************************************************/
#include <stdio.h>
#include <cdefBF518.h>

void main(void)
{
Set_PLL(16,4);
Init_EBIU();
init_port();
SPIinit();
delay(10000);
while(1)
{
tem_x = read_x();
tem_y = read_y();
}
}



这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/1/12 17:46:05
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159172 Call, 1 Queries, Processed in 0.031250 second(s),