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

📄 protocol.h

📁 主要是通过AMEGAL88 来控制cc1100
💻 H
字号:
/* 
 *
 *  文件名 : protocol.c
 *
 *  程序描述:有关CC1100之间通信过程的相关定义
 *
 *  author :  陈思
 *
 */
  
  #ifndef PROTOCOL_H
  #define PROTOCOL_H
  
  #include "cc1100.h"
  
  // 设置GDO2 为外部中断0,用来检测数据发送和接收检测
  #define GDO2_INT0()     do{ spiWriteReg(CC1100_IOCFG2,0x06);  }while(0)
  // 设置USART数据接收完成中断
  #define USART_RECINT_ENABLE()  do{  UCSR0B |= (1<<RXCIE0); }while(0)
  // 关闭此中断
  #define USART_RECINT_DISABLE() do{ UCSR0B &= ~(1<<RXCIE0); }while(0)  
  
  
  
  // 设置数据报类型函数
  BOOL  setPktType( PacketType pktType)
  {
  	  BYTE regVal;
  	  //ErroState ret;
  	  regVal = spiReadReg(CC1100_PKTCTRL0);     // 读取PKTCTRL0
  	  
  	  if(pktType == FIX_LENGTH)
  	  	{
  	  		regVal |= 0x03;
			regVal &= 0xFC;                                         // 设置数据报为固定长度,需要配置PKTLEN寄存器
  	  	}
  	  	
  	  else if(pktType == DEFINED_LENGTH)
  	  	{
  	  		regVal |= 0x03;
			regVal  &= 0xFD;
  	  	}
  	  	
  	  else
  	  		return FALSE;
  	  		
  	  spiWriteReg(CC1100_PKTCTRL0,regVal); 
  	  
  	  //ret = NO_ERRO;
  	  return TRUE;					
  }
  
  // 在固定数据报长度时,配置数据报的长度
  // 如果有地址域,则地址也要占用一个BYTE
  BOOL setPktLen(BYTE pktLength)
  {
  	//ErroState ret;
     if(pktLength >1 && pktLength <= 255)
     	spiWriteReg(CC1100_PKTLEN,pktLength);
     	
     else
    	return FALSE;
    	
     //ret= NO_ERRO;
     return TRUE;
  }	 
  
  // 设置发送方式
  BOOL setSendType(SendType sendType)
  {
  	BYTE regVal;
  	//ErroState ret;
  	regVal = spiReadReg(CC1100_PKTCTRL1);
  	
  	if(sendType == NO_ADDRESS)
  		{
  			regVal |= 0x03;
			regVal &= 0xFC;
  		}
  		
    else if(sendType == UNICAST)
    	{
    		regVal |= 0x03;
			regVal &= 0xFD;
    	}
    	
    else if(sendType == BROADCAST)
    	{
    		regVal |= 0x03;
			regVal &= 0xFE;
    	}
    	
    else
    	//ret = NOT_MATCH;
    	return FALSE;
    	
    spiWriteReg(CC1100_PKTCTRL1,regVal);
   // ret = NO_ERRO;
    return TRUE;
  }
  
  // 设置CC1100的地址 
  BOOL setAddress(BYTE addr)
  {
  	//ErroState ret;
     if(addr >=0 && addr <= 255)
     	spiWriteReg(CC1100_ADDR,addr);
     	
     else
    	//ret = NOT_MATCH;
    	return FALSE;
    // ret= NO_ERRO;
     return TRUE;
  }	
  
  // 系统初始化相关函数
  // setup the interupt INT0 for GDO2
void GDO2Int()
{
  SREG |= (1<<GIE);
  
  EICRA |= (1<<ISC00)|(1<<ISC01);
  //EICRA &= ~(1<<ISC00);
  
  EIMSK |= (1<<INT0);
}

// 配置MCU的SPI口
void SpiInit()
{
  /* Set MOSI and SCK output, all others input */
  DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCLK)|(1<<DD_SS);
  PORT_SPI &= ~(1<<DD_MOSI); 
  /* Enable SPI, Master, set clock rate fck/16 */
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
  
  SPCR |= (0<<CPHA)|(0<<CPOL);
  SPCR &= ~(BIT(DORD));
  
  DDRD &= ~BIT(DDD5);                                                                                                         
  
}



// MCU的USART(通用串口)初始化,可以配置波特率
void serialInit(UINT16 baudrate)
{
	 // 设置串口模式为:8个数据位,1个停止位,无奇偶校验
	 UCSR0C = (3<<UCSZ00);	
	 // 配置波特率
	 UBRR0H = (BYTE)(baudrate>>8);
	 UBRR0L = (BYTE)baudrate;
	 
	 // 打开串口发送和接收使能
	 UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
	 //打开接收中断
	 USART_RECINT_ENABLE();
}
/*
// USART接收一个字节函数
 BYTE USART_RECIEVE_BYTE(void)
 {
 	//Wait for data to be received 
    while ( !(UCSR0A & (1<<RXC0)) )
    ;
    // Get and return received data from buffer 
    return UDR0;
 }	
 // USART接收固定长度的数据
void  USART_RECIEVE_PKT(BYTE *data,BYTE count)
{
	UINT8 i;
	
	for(i = 0;i < count;i ++)
	{
		data[i] = USART_RECIEVE_BYTE();
	}
}
*/		
					  	 
#endif  	  	
  	  
  

⌨️ 快捷键说明

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