⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic_spi.c

📁 5509A DSP iic_spi 程序源代码
💻 C
字号:
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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -