您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助] SPI 範例代碼,修改為 slave 模式
本帖共有738个阅读者
发表帖子 发表投票 回复主题
[求助] SPI 範例代碼,修改為 slave 模式
chris_syu(论坛新手)
chris_syu
头衔:社区公民
帮派:无帮无派
帖数:35
金钱:411
积分:49
注册时间:2012/12/17
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助] SPI 範例代碼,修改為 slave 模式
請問各位大大:

我想讓 BF533 擔任 SPI 中 Slave ,要使用SPI的範例代碼修改。

原始範例代碼 如下:

#include <cdefBF533.h>

unsigned char buff_w[512];
unsigned char buff_r[512];

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

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;");
}
}


void SPI_init(void)
{
*pSPI_BAUD=2; //配置速率為1/4系統時鐘  SPI速率 = SCLK/2*SPI_BAUD
*pSPI_FLG |=FLS2;   //選擇SPISEL2接口
*pSPI_CTL = 0x1001|CPHA| CPOL; //配置模式為手動片選模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
}


int main()
{
int i;
Set_PLL(16,4);
Init_EBIU();

SPI_init();
*pSPI_FLG &= ~FLG2; //將SPISEL2拉到0
while(!(*pSPI_STAT & SPIF));  //查看SPI傳輸狀態是否完成
*pSPI_TDBR = 0x55;      //將數據送入SPI傳輸數據寄存器
*pSPI_FLG |= FLG2;    //將SPISEL2拉到1,完成數據傳輸
*pSPI_FLG &= ~FLG2;
while(*pSPI_STAT & RXS)//查看SPI傳輸狀態是否有數據需要接收
i = *pSPI_RDBR; //讀取數據
*pSPI_FLG |= FLG2;
while(1);
}

需修改是否如下:

void SPI_init(void)
{
// *pSPI_BAUD=2; //Master mode Only ,所以將此行註解
// *pSPI_FLG |=FLS2;   //Master mode Only ,所以將此行註解 ,選擇SPISEL2接口
*pSPI_CTL = 0x0030|CPHA| CPOL; //改為 Slave mode , 配置模式為手動片選模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
}


int main()
{
int i;
Set_PLL(16,4);
Init_EBIU();

SPI_init();
// *pSPI_FLG &= ~FLG2; //Slave mode ,將此行註解,將SPISEL2拉到0
while(!(*pSPI_STAT & SPIF));  //查看SPI傳輸狀態是否完成
*pSPI_TDBR = 0x55;       //將數據送入SPI傳輸數據寄存器
// *pSPI_FLG |= FLG2;    //Slave mode ,將此行註解,將SPISEL2拉到1,完成數據傳輸
// *pSPI_FLG &= ~FLG2; //Slave mode ,將此行註解,
while(*pSPI_STAT & RXS) //查看SPI傳輸狀態是否有數據需要接收
i = *pSPI_RDBR; //讀取數據
// *pSPI_FLG |= FLG2; //Slave mode ,將此行註解,
while(1);
}

然後 如果將 SPISS( PF0) pin 腳 接地。

是否將上述範例代碼這樣修改後,即變為 SPI 的 Slave 了???

麻煩各位大大解答,謝謝。


正在學習使用ADSP-53x
等级:论坛新手 参考IP地址:*.*.*.*
2013/7/24 8:49:48
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
给你一个通讯的代码,你自己看吧

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/8/1 10:18:30
chris_syu(论坛新手)
chris_syu
头衔:社区公民
帮派:无帮无派
帖数:35
金钱:411
积分:49
注册时间:2012/12/17
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
感謝 ANDY 提供的範例。

正在學習使用ADSP-53x
等级:论坛新手 参考IP地址:*.*.*.*
2013/8/12 16:51:37
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
{握手}

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2013/8/13 9:21:19
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159278 Call, 1 Queries, Processed in 0.031982 second(s),