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

📄 595spi.c

📁 基于LPC2129的开关量输入源码
💻 C
📖 第 1 页 / 共 2 页
字号:
* 功能:初始化SPI接口,设置为主机。主要是设置SPI口的方向
* 入口参数:无
* 出口参数:无
****************************************************************************/
void spiinit(void)                
{
   IO1DIR |= SPI_STOR_CLK;
   IO1DIR |= SPI_CLK;
   IO1DIR |= SPI_DATA;
   IO1DIR |= HC541A_EN;
   IO1DIR |= HC541B_EN;
}

/****************************************************************************
* SendData(uint32 data)
* 功能:
* 入口参数:data	要发送的数据
            num   要控制的电位器编号
* 出口参数:无
* 说明:    发送数据时,高位先发送。
****************************************************************************/
void  SendData(uint32 data)
{     
   uint8  i = 0;
   
   IO1CLR = SPI_STOR_CLK;
   
   for(i=0; i<24; i++)					// 发送24位数据
   {  
      IO1CLR = SPI_CLK;					// SPI_CLK = 0      
      
      if( (data & 0x0001)!=0 )             //设置SPI_DATA输出值
          IO1CLR = SPI_DATA;
      else 
          IO1SET = SPI_DATA;
      data >>= 1;
      
      IO1SET = SPI_CLK;					// SPI_CLK = 1
   }
   
   IO1SET = SPI_STOR_CLK;   
}

/****************************************************************************
* 名称:SendByte()
* 功能:向串口UART0发送一个字节数据。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  sendbyte(uint8 data)
{  
   
   U0THR   = data;                      	// 发送数据
   
}

/****************************************************************************
* 名称:sendcomand()
* 功能:ARM向430板要求发送数据命令
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  sendfreq(void)
{  
	 uint8  i;
  
   IO0SET = MODE_S;                     //要发送数据
   for(i=0; i<2; i++) 
      sendbyte(frenq[i]);
   while( (U0LSR&0x40)==0 );         // 等待数据发送  这里可以调用操作系统的延时函数代替
   IO0CLR = MODE_S;                     //等待接收数据
} 

/****************************************************************************
* 名称:    uart_set(uint32 baud, UARTMODE set)
* 功能:    串口0参数设置,设置其工作模式及波特率。
* 入口参数:baud         波特率
*           set          模式设置(UARTMODE数据结构)
* 出口参数:返回值为1时表示初始化成功,为0表示参数出错
****************************************************************************/
uint8  uart_set(uint32 baud, UARTMODE set)
{  
	 uint32  bak;
   
   if( (0==baud)||(baud>115200) )                             //参数过滤
   	  return(0);                  
   if( (set.datab<5)||(set.datab>8) ) 
   	  return(0);
   if( (0==set.stopb)||(set.stopb>2) ) 
   	  return(0);
   if( set.parity>4 ) 
   	  return(0);

   U0LCR = 0x80;                                             // 设置串口波特率  DLAB位置1
   bak   = (Fpclk>>4)/baud;
   U0DLM = bak>>8;
   U0DLL = bak&0xff;
                                                            
   bak = set.datab-5;                                         // 设置串口模式 设置字长度   
   if(2 == set.stopb) 
   	  bak |= 0x04;                                            // 判断是否为2位停止位     
   if(0!=set.parity) 
   {
   	 set.parity = set.parity-1;
     bak |= 0x08;
   }
   bak |= set.parity<<4;              	// 设置奇偶校验      
   U0LCR = bak;
   
 //  U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8字节
   
   return(1);
}

/****************************************************************************
* 名称:uart_init()
* 功能:设置波特率,设置I/O口功能
* 入口参数:无
* 出口参数:无
****************************************************************************/
void uart_init()
{
   UARTMODE  uart0_set;
        
   PINSEL0 |= UART0;                    // 设置I/O连接到UART0 
    
   IO0DIR  |= MODE_S;			            // 设置TRE控制口为输出
   
   uart0_set.datab = 8;                 // 8位数据位
   uart0_set.stopb = 1;                 // 1位停止位
   uart0_set.parity = 0;                // 无奇偶校验
   
   uart_set(9600, uart0_set);           // 初始化串口模式
}               

/****************************************************************************
* uint32 Data_in(void)
* 功能:
* 入口参数:data	要发送的数据
            num   要控制的电位器编号
* 出口参数:无
* 说明:    发送数据时,高位先发送。
****************************************************************************/
uint32 Data_in(void)
{
	 uint32 datainput = 0xffffffff;
	 
	 datainput |= ((IO0PIN<<2)&0x00000010);
	 datainput &= ((IO0PIN<<2)|0xFFFFFFEF);
	 
	 datainput |= ((IO0PIN<<1)&0x000000E0);
	 datainput &= ((IO0PIN<<1)|0xFFFFFF1F);
	 
	 IO1SET = HC541B_EN;
	 IO1CLR = HC541A_EN;
	 DelayNS(100);
	 
	 datainput |= (IO0PIN>>11)&0x00000F00;
	 datainput &= (IO0PIN>>11)|0xFFFFF0FF;

	 datainput |= (IO0PIN>>15)&0x0000F000;
	 datainput &= (IO0PIN>>15)|0xFFFF0FFF;
	 
	 DelayNS(100);
	 IO1SET = HC541A_EN;
	 IO1CLR = HC541B_EN;
	 DelayNS(100);
	 datainput |= (IO0PIN>>3)&0x000F0000;
	 datainput &= (IO0PIN>>3)|0xFFF0FFFF;

	 datainput |= (IO0PIN>>7)&0x00F00000;
	 datainput &= (IO0PIN>>7)|0xFF0FFFFF;
	 
	 return  datainput;	 
}
/****************************************************************************
* 名称:main()
* 功能:调用响应函数 完成响应功能
* 参数:无
****************************************************************************/
int main(void)
{      
   uint8  i    = 0;
   uint32 datain = 0;
   
   Initboard();                 //初始化板子 I/O口功能 方向                        
   spiinit();                   //SPI接口控制AD8402初始化
   uart_init();
   Eint_init();
   
   RstWdt();
   
   while(1)
   {
     RstWdt();
     
     	
     	EXTINT = 0x0F;		                    // 清除EINT中断标志	
     	VICIntEnable = 0x00004000;		        // 使能EINT中断
     	
     	DelayNS(50000);
     	
     	VICIntEnClr = 0x00004000;

     
     RstWdt();
     

     	EXTINT = 0x0F;		                    // 清除EINT中断标志	
     	VICIntEnable = 0x00008000;		        // 使能EINT中断
     	
     	DelayNS(50000);
     	
     	VICIntEnClr = 0x00008000;

     
     RstWdt();
     

     	EXTINT = 0x0F;		                    // 清除EINT中断标志	
     	VICIntEnable = 0x00010000;		        // 使能EINT中断
     	
     	DelayNS(50000);
     	
     	VICIntEnClr = 0x00010000;

     
     RstWdt();
     
     	EXTINT = 0x0F;		                    // 清除EINT中断标志	
     	VICIntEnable = 0x00020000;		        // 使能EINT中断
     	
     	DelayNS(50000);
     	
     	VICIntEnClr = 0x00020000;
     
     RstWdt();
     
     datain = Data_in();
     
     SendData(datain);
     DelayNS(50000);
     
     frenq[0] = (uint8)(Cont1_freq&0x00FF);
     frenq[1] = (uint8)((Cont1_freq>>8)&0x00FF);
     
     sendfreq();
     
     
     for(i=0; i<24; i++)
     {
     		datain = (1<<i);
     		SendData(datain);
     		DelayNS(10000);
     }
   }
}

⌨️ 快捷键说明

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