author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:3034回复:1

希望大家看看SC2440下的SPI通讯程序。帮看看初始化代码。做2440和430通讯用。

楼主#
更多 发布于:2010-01-19 16:17
目前我根据本论坛的2410的SPI的驱动,写了一个驱动。目的就是为了实现SC2440和MSP430的SPI通讯,CE测试程序控制,用示波器测试的情况就是,我使用的是SPI0,
能够看到MOSI上面的写数据的数据信号。停止了,数据也就停止了。 但是UCLK 时钟信号没有?这是我单独测试2440,没有接430的情况下面的效果。
大家帮忙看看初始化代码。

volatile IOPreg * v_pIOPregs;
volatile SSPreg *v_pSSPregs;
volatile CLKPWRreg * v_pclkpwrregs;
BOOL SPI_InitAddrIO(VOID);
BOOL SPI_InitAddrSPI(void);
BOOL SPI_InitPwr(void);
void InitSPI(void);

void InitSPI(void)
{
 unsigned int pclk = S2440PCLK;  // s2410.h define
                                  // #define S2410FCLK        (203 * 1000 * 1000)  // 203MHz (FCLK).
                                    // #define PCLKDIV          4      // P-clock (PCLK) divisor.
                                    // #define S2410PCLK        (S2410FCLK / PCLKDIV) // PCLK.
v_pclkpwrregs->rCLKCON &= ~(0x40000);
v_pclkpwrregs->rCLKCON |= (0x40000);
  //SPICLK0/GPE13 master clock
 //SPIMOSI0/GPE12 master out
 //SPIMISO0/GPE11 master in
 v_pIOPregs->rGPECON &= ~(0x3F << 22);
 v_pIOPregs->rGPECON |= (0x2A << 22);
 v_pIOPregs->rGPEUP  |=(0X7 <<11);    
//    v_pSSPregs->rSPPIN0 = 0x02;  
 //EINT10/nSS0/GPG2 master SPI CS
 v_pIOPregs->rGPGCON &= ~(0x3 << 4);
 v_pIOPregs->rGPGCON |= (0x1 << 4);  //2010-01-19
 v_pIOPregs->rGPGUP &= ~(0x1 << 2);//enabled

    //Baudrate = 50750000/2/(24 + 1) = 1015000 = 1.015MHz
    v_pSSPregs->rSPPRE0 = 0x18;
    v_pSSPregs->rSPCON0 = 0x18;
}
//
//
............省略了初始化IO地址 volatile IOPreg * v_pIOPregs;和 时钟  volatile CLKPWRreg * v_pclkpwrregs;
............和下面的SPI 初始化完全一摸一样。

BOOL SPI_InitAddrSPI(void)
{
  BOOL RetValue = TRUE;
  v_pSSPregs = (volatile SSPreg *)VirtualAlloc(0, sizeof(SSPreg), MEM_RESERVE, PAGE_NOACCESS);
  if (v_pSSPregs == NULL)
  {
   ERRORMSG(1,(TEXT("For SPI_UART2regs : VirtualAlloc failed!\r\n")));
   RetValue = FALSE;
  }
  else
  {
   if (!VirtualCopy((PVOID)v_pSSPregs, (PVOID)(SSP_BASE), sizeof(SSPreg), PAGE_READWRITE | PAGE_NOCACHE))
   {
    ERRORMSG(1,(TEXT("For SPI_UART2regs: VirtualCopy failed!\r\n")));
    RetValue = FALSE;
   }
  }
 
  if (!RetValue)
  {
   RETAILMSG (1, (TEXT("::: SPI_InitializeAddresses - Fail!!\r\n") ));
   if (v_pSSPregs)
   {
    VirtualFree((PVOID) v_pSSPregs, 0, MEM_RELEASE);
   }
   v_pSSPregs = NULL;
  }
  else
  {
   ;
//   RETAILMSG (1, (TEXT("SPI_InitializeAddresses - Success\r\n") ));
  }
  return(RetValue);
}

DWORD SPI_Init(DWORD dwContext)
{
// RETAILMSG(1,(TEXT("PMSINGS: SPI_ INIT\n")));
  SPI_InitAddrIO();
  SPI_InitAddrSPI();
  SPI_InitPwr();
  InitSPI();
 
 return 0x01;
}


谢谢,帮我看看,看看哪里有问题。。初始化。后面的驱动加载了。读写函数都正常。谢谢大家。
我的Vc代码仓库:[url]http://sh.b211.net[/url]
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-01-20 11:25
今天发现循环写数据的时候,UCLK 上面也有类似的数据信号,不知道怎么回事
我的Vc代码仓库:[url]http://sh.b211.net[/url]
游客

返回顶部