网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C5000 >> 文章正文
  TMS320VC5509A IIC_SPI程序源代码         ★★★ 【字体:
TMS320VC5509A IIC_SPI程序源代码
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-17    

TMS320VC5509A IIC_SPI程序源代码

void MCBSP_int(MCBSP_Handle m_Mcbsp)
{
     IRQ_globalDisable();
     MCBSP_ASSERT_HANDLE(m_Mcbsp,return 00);
     MCBSP_start(m_Mcbsp,
              MCBSP_XMIT_START | MCBSP_RCV_START |
              MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,
                0x300u);
     asm( " nop");
     asm( " nop");
     asm( " nop");
     asm( " nop");
     spiintsign = MCBSP_getRcvEventId(m_Mcbsp);

     IRQ_globalEnable();
     return;
}


interrupt void MCBSP1_RX()
{
 IRQ_globalDisable();
  m_Spi_Buf.lBuf[m_Spi_Buf.iHead++]= MCBSP_read8(hMcbsp1);
  if(m_Spi_Buf.iHead>=399)m_Spi_Buf.iHead=0;

 IRQ_globalEnable();
}


unsigned int SendData(MCBSP_Handle m_Mcbsp,unsigned int *data,unsigned int len)
{
 unsigned int i;
 unsigned int *p;

 MCBSP_ASSERT_HANDLE(m_Mcbsp,return 0);
 if(data==NULL)
  return 0;
 p=data;

 for(i=0;i<len;i++)
 {
  while (!MCBSP_xrdy(m_Mcbsp));
  MCBSP_write8(m_Mcbsp, p[i]);
 }

 return 1;
}

void WriteFlash(MCBSP_Handle m_Mcbsp,int *data,unsigned long addr,int len,int m_Int)
                                  
{
 int i,h,j=0;
 unsigned int s[5];
 unsigned long add;
 memset(s,0,5);
 add=addr;
 for(i=0;i<len;i++)
    {
  s[0]=0x06;
  s[1]=0x00;
  s[2]=0x00;
  s[3]=0x00;
  s[4]=0x00;
  SendData(m_Mcbsp,s,5);
  s[0]=0x02;
  s[1]=(add>>16) & 0xff;
  s[2]=(add>>8) & 0xff;
  s[3]=add & 0xff;
  s[4]=*(data+j);
  j++;
  SendData(m_Mcbsp,s,5);

  add+=1;
  while(1)
  { 
   for(h=0;h<=1000;h++);
   if(!(ReadStatus(m_Mcbsp,m_Int))) break;
  }
  asm( " nop");
  asm( " nop");

 }
}

void ReadFlash(MCBSP_Handle m_Mcbsp,unsigned long addr,int len,int m_Int)
{
    int i;
    unsigned long add;
    add=addr;
    index=2;
    for(i=0;i<len;i++)
    {

        ExIRQ_Disable(m_Int);

  while (!MCBSP_xrdy(m_Mcbsp));
  MCBSP_write8(m_Mcbsp, 0x03);
  while (!MCBSP_xrdy(m_Mcbsp));
  MCBSP_write8(m_Mcbsp, add>>16);
  while (!MCBSP_xrdy(m_Mcbsp));
  MCBSP_write8(m_Mcbsp, add>>8);
  while (!MCBSP_xrdy(m_Mcbsp));
  MCBSP_write8(m_Mcbsp, add);
  while (!MCBSP_xrdy(m_Mcbsp));
  MCBSP_write8(m_Mcbsp, 0x0);
  ExIRQ_Enable(m_Int);
  while (!MCBSP_xrdy(m_Mcbsp));   
  add+=1;
    }
 ExIRQ_Disable(m_Int);
}

void EraseFlash(MCBSP_Handle m_Mcbsp,unsigned long addr,unsigned int m_index,int m_Int)
{
 unsigned int i,u=0,s[5];
 memset(s,0,5);
 s[0]=0x06;
 SendData(m_Mcbsp,s,5);
 
 if(m_index==0)
 {
     s[0]=0x52;
     s[1]=(addr>>16) & 0xff;
     s[2]=(addr>>8) & 0xff;
     s[3]=addr & 0xff;
     s[4]=0x0;
 
        SendData(m_Mcbsp,s,5);
        while(1)
        { 
          for(i=0;i<=1000;i++);
          if(!(ReadStatus(m_Mcbsp,m_Int)))
          {  
            u++;
            if(u>3)break;
          }
        }
 }
 else
 {
  s[0]=0x60;
  SendData(m_Mcbsp,s,5);
  while(1)
  { 
   for(i=0;i<=1000;i++);
   if(!(ReadStatus(m_Mcbsp,m_Int)))
   {  
     u++;
     if(u>3)break;
   }
  }
 }
  asm( " nop");
  asm( " nop"); 
}

I2C_Config Config1 = {
        0x0000,            /* own address*/
        0x0000,            /*isr*/
        0x0410,            /*str*/
        0x002d,            /*clkl*/
        0x002d,            /*clkh*/
        0x0080,            /*data count*/
        0x0050,            /*slave address*/
        0x4600,            /*cmdr*/
        0x0000,            /*isr resource*/
        0x0014             /*psc*/
       
        };

void iic_init1()
{
 int i;
/* int a[8];
// j=0;
*/
 m_I2CMDR = (Uint16 *)0x3c09;
 for(i=0;i<10000;)i++;
 I2C_config(&Config1);
 for(i=0;i<10000;)i++;
 *m_I2CMDR |= 0x0020;           /*使能数字锁相环模式*/
 for(i=0;i<10000;)i++;
}

int M_test()

 static Uint16 IICMtest[4] = {0x00,0xf0,0xee,0xff};
 static Uint16 testdata[2] = {0,0};
 static Uint16 testadd[2]  = {0x00,0xf0};
 int j,a,b=1,q=0;
 for(j=0;j<=4;j++)                                /*写存储器测试字,若出错进行3次写入读出效验*/
 {
     I2C_write(IICMtest,4,1,0x51,1,30000); 
     delayiic();
     I2C_write(testadd,2,1,0x51,1,30000);
     I2C_read(testdata,2,1,0x51,1,30000,1);
    
     for(a=0;a<2;a++)
     {   
      if(testdata[a]==IICMtest[a+2])q=1;
      else q=0;
      b=b&q;
     }
     if(b==1)break;                 
     else if(j>=3)
     {
     DisP_Chat(&c_tab1[0]);/*显示错误信息,并清写卡标志,不再执行写卡操作*/
      return b;
     }
 }
 return b;
}
int T_test()

 static Uint16 IICTtest[3] = {0x12,0x51,0xAD};
 static Uint16 testdata[2] = {0,0};
 static Uint16 testadd[1] = {0x12};
 int j,a,b=1,q=0;
 for(j=0;j<=4;j++)                                /*写存储器测试字,若出错进行3次写入读出效验*/
 {
     I2C_write(IICTtest,3,1,0x50,1,30000); 
      delayiic();
     I2C_write(testadd,1,1,0x50,1,30000);
     I2C_read(testdata,2,1,0x50,1,30000,1);
    
     for(a=0;a<2;a++)
     {   
      if(testdata[a]==IICTtest[a+1])q=1;
      else q=0;
      b=b&q;
     }
     if(b==1)break;                 
     else if(j>=3)
     {
     m_Keyboardinfo.TimeShowcard=0;
     DisP_Chat(&c_tab1[0]);
     firstdelay();
     return b;
     }
 }
 return b;
}

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    高密度SPI EEPROM-SA25C020的…
    TMS320VC5509A USB 开发框架…
    I2C总线实现TMS320VC5509A引…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号