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

📄 2410_8141.c

📁 本代码是串口扩展芯片GM814X在 Arm9—usos上使用的实例
💻 C
📖 第 1 页 / 共 2 页
字号:
			cTemp =rdata>>12;		
			switch(cTemp&0x03)    //判断接收数据来自哪一个子串口
				{
					case 0:
						{
							Revbuff1=rdata&0xff;
							RevFLAG1=1;
						}					
						break;
					case 1:
						{
						        Revbuff2=rdata&0xff;
						       RevFLAG2=1;
						}	   
						break;
					case 2:
						{
						        Revbuff3=rdata&0xff;
								RevFLAG3=1;
						}		
						break;
					case 3:
						{
						       Revbuff4=rdata&0xff;
							 RevFLAG4=1; 
						} 
						break;
					default:
						break;	
				}
			Flag_R=0;
		}
	
	if(Flag_T)
		{
			cTemp =rdata>>10;		
			switch(cTemp&0x03)   //判断哪一个子串口发送FIFO为空
				{
					case 0:
						Flag1_T=1;
						break;
					case 1:				
						Flag2_T=1;
						break;
					case 2:
						Flag3_T=1;
						break;
					case 3:
						Flag4_T=1;
						break;
					default:
						break;	
				}
			Flag_T=0;
		}
	return 1;
}
						
		 








void SPI_CLK_S(void)/* CLK=1 */
{
    	rGPBDAT |= 1<<2;
}

void SPI_CLK_R(void)/* CLK=0 */
{
    	rGPBDAT &= ~(1<<2);
}


void SPI_CS_S(void)/* CS=1 */
{
    rGPADAT |= 1<<18;
}

void SPI_CS_R(void)/* CS=0 */
{
    rGPADAT &= ~(1<<18);
}

void SPI_RST_S(void)/* RST=1 */
{
    rGPADAT |= 1<<17;
}

void SPI_RST_R(void)/* RST=0 */
{
    rGPADAT &= ~(1<<17);
}

void RS485T_nR_S(void)/* RS485T_nR=1 */
{
    rGPADAT |= 1<<19;
}

void RS485T_nR_R(void)/* RS485T_nR=0 */
{
    rGPADAT &= ~(1<<19);
}

void SPI_DIN_S(void)/* DIN=1 */
{
    rGPEDAT |= 1<<13;
}
void SPI_DIN_R(void)/* DIN=0 */
{
    rGPEDAT &= ~(1<<13);
}

char SPI_DOUT_READ(void)/* SPI_DOUT */
{
    return ((rGPBDAT & (1<<4))>>4);
}


void delay_spi(void)
{
  unsigned char i;
  for (i=0;i<1;i++)
  {
    ;
  }
}

unsigned char SPITransmit(char  wSendData)
{

    unsigned char i;
   unsigned char wReadData;
   SPI_CLK_R();
    for (i = 8; i > 0; i --)
    {
        if (wSendData&0x80)/* 送数据SI */
        {
            SPI_DIN_S();
        }else
        {
            SPI_DIN_R();
        }    
        SPI_CLK_S();    /* 上升沿接收 */
       wSendData <<= 1;
	wReadData <<=1;			//Shift first, then fill the bit		
		//delay_spi();//Delay(DELAY_TIME);
	wReadData|=SPI_DOUT_READ();//wReadData |= DOUT;		//Receive the 16-bit data		
		SPI_CLK_R();//SCLK = LOW;
		//delay_spi();//Delay(DELAY_TIME);		//Can be comment by acture use
    }
	return(wReadData);


#if 0
	char i;
	int wReadData;
	
	wReadData = 0;
	
	for(i = 0; i < 16; i++)
	{
		if(wSendData & 0x8000)
			SPI_DIN_S();//DIN=1;
		else
			SPI_DIN_R();//DIN = 0;
		wReadData <<=1;			//Shift first, then fill the bit
		
		SPI_CLK_S();//SCLK = HIGH;
		wSendData <<= 1;
		wReadData|=SPI_DOUT_READ();//wReadData |= DOUT;		//Receive the 16-bit data
		
		delay_spi();//Delay(DELAY_TIME);
		SPI_CLK_R();//SCLK = LOW;
		delay_spi();//Delay(DELAY_TIME);		//Can be comment by acture use
	}
	return(wReadData);
#endif
}

void ClrCS_8141 (void)
{
    SPI_CS_R();
}

void SetCS_8141(void)
{
    SPI_CS_S();
}


void SPI_INIT(void)
{
//PORT A GROUP
//SPI_nCS   接核心板B64 处理器GPA18引脚
//SPI_RST   接核心板B63处理器GPA17引脚
//RS485T_nR接核心板B65处理器GPA19引脚
  rGPACON &= ~(0x7<<17); 
  rGPADAT &= ~(0x7<<17);

// PORT B GROUP
//SPI_CLK  接核心板B16 处理器GPB2引脚
//SPI_DOUT 接核心板B17处理器GPB4引脚
  rGPBCON &= ~(0x3<<4);//GPB2
  rGPBCON |= 0x1<<4;  
  rGPBCON &= ~(0x3<<8);//GPB4

  //新加
  rGPBUP  &=~(0x1<<4);


//PORT E GROUP 
//SPI_DIN   接核心板B36处理器GPE13引脚
  rGPECON  &= ~(0x3<<26); 
  rGPECON  |= 0x1<<26; 

 //PORT G GROUP
//SPI_IRQ   接核心板A51处理器GPG2引脚
  rGPGCON &= ~(0x3<<4);
//  rGPGCON |= 0x2<<4;

 }

void testDin(void)
{
	Delay_SPI(1000);
	SPI_DIN_S();    //DIN=1
	Delay_SPI(1000);
	SPI_DIN_R();   //DIN=0;
	Delay_SPI(1000);
}


void testClk(void)
{
	Delay_SPI(1000);
	SPI_CLK_S();    //CLK=1
	Delay_SPI(1000);
	SPI_CLK_R();   //CLK=0;
	Delay_SPI(1000);
}

void testRst(void)
{
	Delay_SPI(1000);
	SPI_RST_S();    //CLK=1
	Delay_SPI(1000);
	SPI_RST_R();   //CLK=0;
	Delay_SPI(1000);
}


//void main()       //主函数
void SpiTest(void)
{

//端口调试


  //  unsigned char i;
   // U16 Dout;

    //int a[2];
    //unsigned char j[10]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
    unsigned char D_F[100];
    int index;
    unsigned char temp1;
   SPI_INIT();//初始化CPU的SPI引脚
   SPI_RST_R();

   Delay_SPI(5000);
   Delay_SPI(5000);
   Delay_SPI(5000);
   Delay_SPI(5000);
   SPI_RST_S();//8141 SPI复位无效
   Delay_SPI(5000);
   Delay_SPI(5000);
   Delay_SPI(5000);
   Delay_SPI(5000);   //Write814xConfig(0, 0x00, 0x05);//8141寄存器配置
   Spi_Config(1,1,0x50,1);
   Spi_Config(1,1,0x50,1);
   Spi_Config(0,1,0x50,2);
   Spi_Config(0,1,0x50,2);
   Delay_SPI(5000);//
   TEMP=Read814xConfig(1);//读取串口配置返回内容未验证
   TEMP++;
   temp1=5;
    while(1)
    {
       // for(i=0;i<9;i++)
        {
             //SendToRS485(j[i]);
	      //SendToRS232(j[i]);
		  while(RevToData()==0)
		  	{;}
		   D_F[index]=Revbuff2;
		   index++;
		   if(index>99)
		   {
		     // for(i=0;i<90;i++)
		     index=0;
		      	{
		      	   SendToRS232(D_F[0]);
		      	}
		   }
        }
       //TEMP=SendTo814X(0,0);//发送0,0返回就是串口回传的数据
      /* if(TEMP&0x8000)
       	{
       	  TEMP++;
       	}*/

    }

}

⌨️ 快捷键说明

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