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

📄 spi_slave._c

📁 用ICC编写的程序包括SPI
💻 _C
字号:

#include "SPI_slave.h"
#include "qep.h"
unsigned char SPI_rx_buf[SPI_size];  
unsigned char SPI_tx_buf[SPI_size];  
unsigned char rx_index;  
unsigned char tx_index,SPI_tx_flag,SPI_rx_flag;
unsigned char temp;
extern int	qep_cnt[QEP_size];
extern unsigned char pwm_value[2];

#pragma interrupt_handler spi_stc_isr:11
void spi_stc_isr(void)
{
 
  if(SPI_tx_flag)
   {
   SPDR=SPI_tx_buf[tx_index++];
   }
  else SPDR=0xee;
  
  temp=SPDR;
  if(temp==0xaa||temp==0x55)
  	SPI_rx_flag=1;
  
  if(tx_index>=SPI_size)  
  {
   tx_index=0; 
   SPI_tx_flag=0;
  }
  if(SPI_rx_flag)
  {
  SPI_rx_buf[rx_index]=temp;
    if (rx_index<SPI_size) rx_index++;
    else 
    {
     rx_index=0;
	 SPI_rx_flag=0;
	 switch(SPI_rx_buf[0])
	 {
	   case 0xaa:
			switch(SPI_rx_buf[1])
			{
			case 0x00:
			  qep_cnt[0]=0;
			  qep_cnt[1]=0;
			  break;
			case 0x01:
			  SPI_tx_buf[0]=0x55;
			  SPI_tx_buf[1]=(*(unsigned char*)(qep_cnt));
			  SPI_tx_buf[2]=(*((unsigned char*)(qep_cnt)+1));
			  SPI_tx_flag=1;
			  break;
			case 0x02:
			  SPI_tx_buf[0]=0x56;
			  SPI_tx_buf[1]=(*(unsigned char*)(qep_cnt+1));
			  SPI_tx_buf[2]=(*((unsigned char*)(qep_cnt+1)+1));
			  SPI_tx_flag=1;
			  break;
			default:
			  break;
			}
			break;
	   case 0x55:
	   		pwm_value[0]=SPI_rx_buf[1];
			pwm_value[1]=SPI_rx_buf[2];
			break;	
	   default:
	        break;
		}
   }
  }
}  
	

//从机模式
void spi_init(void)  
{  
  unsigned char temp;  
  		   		    //MISO=ouput and MOSI,SCK,SS = input  
  DDRB |=BIT(MISO);
  PORTB |=BIT(MISO);    //MISO上拉电阻有效   
  DDRB&=~BIT(SS);
  SPCR = 0xC7;    //SPI允许,从机模式,MSB,允许SPI中断  极性方式01,1/4系统时钟速率  
  SPSR = 0x00;  
  temp = SPSR;  
  temp = SPDR;    //清空SPI,和中断标志,使SPI空闲
  SPI_tx_flag=0;
  SPI_rx_flag=0; 
  rx_index=0;
  tx_index=0; 
}

⌨️ 快捷键说明

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