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

📄 cc2420.c~

📁 使用avr--cc2420模块程序,需要原理图的联系 QQ:120304948
💻 C~
📖 第 1 页 / 共 2 页
字号:
#include <mega128.h>
#include <spi.h>
#include <delay.h> 

#include "typedef.h"
#include "app.h"
#include "cc2420.h"
#include "serialdrv.h"
#include "18B20.h"

bit receive_ok = 0;
bit on_ok = 0;

unsigned char cc2420_data_send[CC2420_MAX];
unsigned char cc2420_data_recive[CC2420_MAX];
unsigned char cc2420_data_temp[CC2420_MAX];

#pragma warn-
eeprom unsigned char SET_OUT;
#pragma warn+

unsigned int HOME_ID;
unsigned int MY_ID;
unsigned int CALL_TIMER;

// SPI functions

// SPI interrupt service routine
/*interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
// Place your code here

}*/  

void myid_no(unsigned char value)
{

    HOME_ID = 10001;
	MY_ID = 18180 + value;  
    CALL_TIMER = 30000 + value;        //60000
}

void cc2420_initial(void)
{	
    unsigned int i;
                  
    myid_no(NAME_NO);
	
	if (SET_OUT > 1)        //8
	    SET_OUT = 0;

	if (SET_OUT)
	{
        RELAY1 = 1;
		RELAY2 = 0;
        delay_ms(1000);
        wdr();
        led_send0(1);
		WORK_LED = 0;    //ON 
		on_ok = 1;
	}
	else
	{
	    RELAY1 = 0;
		RELAY2 = 0;
//        delay_ms(1000);
        wdr();
//        led_send0(0);
		WORK_LED = 1;    //OFF
	}

// CC2420 initialization

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 115.200 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
    SPCR=0x52;     
    SPSR=0x00;

	for (i=0;i<CC2420_MAX;i++)
	{
		cc2420_data_send[i]=0x00;
		cc2420_data_recive[i]=0x00;
	}
}

void cc2420_ready(void)
{	
    unsigned int i;

	VREG_EN=0;
    delay_ms(100);       //100ms  //100
	VREG_EN=1;
    delay_ms(5);       //0.6ms //5
	RESETn=0;
    delay_ms(50);       //100ms  //100
	RESETn=1;
    wdr();
	
	CSn=0;
	i=spi(SXOSCON);
    delay_ms(2);       //0.86ms  //5
	while ((i&0x40)==0)
	{
		i=spi(SXOSCON);
        wdr();
	}

	i=spi(SFLUSHRX);
	i=spi(SFLUSHTX);
	i=spi(MAIN);
	i=spi(0xF8);
	i=spi(0x00);
	i=spi(MDMCTRL0);
	i=spi(0x02);   //0A
	i=spi(0xE2);
	i=spi(MDMCTRL1);
	i=spi(0x05);
	i=spi(0x00);
	i=spi(RSSI);
	i=spi(0xE0);
	i=spi(0x80);
	i=spi(SYNCWORD);
	i=spi(0xA7);
	i=spi(0x0F);
	i=spi(TXCTRL);
	i=spi(0xA0);
	i=spi(0xFF);
	i=spi(RXCTRL0);
	i=spi(0x12);
	i=spi(0xE5);
	i=spi(RXCTRL1);
	i=spi(0x0A);
	i=spi(0x56);
	i=spi(FSCTRL);
	i=spi(0x41);
	i=spi(0x65);
	i=spi(SECCTRL0);
	i=spi(0x01);   //03
	i=spi(0xC4);
	i=spi(SECCTRL1);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(BATTMON);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(IOCFG0);
	i=spi(0x00);
	i=spi(0x40);
	i=spi(IOCFG1);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(FSMTC);
	i=spi(0x7A);
	i=spi(0x94);
	i=spi(MANAND);
	i=spi(0xFF);
	i=spi(0xFF);
	i=spi(MANOR);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(AGCCTRL);
	i=spi(0x07);
	i=spi(0xF0);
	i=spi(AGCTST0);
	i=spi(0x36);
	i=spi(0x49);
	i=spi(AGCTST1);
	i=spi(0x08);
	i=spi(0x54);
	i=spi(AGCTST2);
	i=spi(0x01);
	i=spi(0x2A);
	i=spi(FSTST0);
	i=spi(0x02);
	i=spi(0x00);
	i=spi(FSTST1);
	i=spi(0x50);
	i=spi(0x02);
	i=spi(FSTST2);
	i=spi(0x06);
	i=spi(0x00);
	i=spi(FSTST3);
	i=spi(0x82);
	i=spi(0xDD);
	i=spi(RXBPFTST);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(FSMSTATE);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(ADCTST);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(DACTST);
	i=spi(0x00);
	i=spi(0x00);
	i=spi(TOPTST);
	i=spi(0x00);
	i=spi(0x10);
 	i=spi(SRXON);
	CSn=1;

	CSn=0;
 	i=spi(SRXON);
	CSn=1;
    wdr();
}	

void cc2420_send(unsigned char ncont)
{	
    unsigned char i;

    while (SFD);
    CSn=0;
    i=spi(SFLUSHTX);
    CSn=1;
   			
    CSn=0;
    i=spi(TXFIFO);
    for (i=0; i<ncont; i++)
    {
   	    spi(cc2420_data_send[i]);
    }
    CSn=1;
   			    
    CSn=0; 
    i=spi(STXON);
    while (SFD);
    CSn=1; 
}

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
    unsigned char i,j;

//	memset(cc2420_data_recive, 0x00, CC2420_MAX);
    if (FIFO)
    {
   	    CSn=0;
   	    i=spi(0x7f);
   	    if (FIFO)
   	    {
   	        cc2420_data_recive[0] = spi(SNOP);
   	        j = 0;
   	        while ((FIFO == 1) && (j < cc2420_data_recive[0]))
   	        { 
                wdr();
		        cc2420_data_recive[++j] = spi(SNOP); 
		        if(j > CC2420_MAX) 
		            break;
   	        }
   	    }
        CSn=1;
   	    receive_ok = 1;
/*		for (nloop = 0; nloop < (RECV_NO+1); nloop ++)
		{
			cc2420_data_temp[nloop] = cc2420_data_recive[nloop];
		}*/
        wdr();
   			            
   	    CSn=0;
        i=spi(SFLUSHRX);
        i=spi(SFLUSHRX);
        CSn=1;
    }
}

unsigned char cc2420_receive(unsigned char ncont)
{	
    unsigned char i,j;

    if (FIFO)
    {
   	    CSn=0;
   	    i=spi(0x7f);
   	    j = 0;
	    if (FIFO)
	    { 
   	        cc2420_data_recive[0] = spi(SNOP);
   	        j = 0;
   	        while ((FIFO == 1) && (j < cc2420_data_recive[0]))
   	        { 
                wdr();
		        cc2420_data_recive[++j] = spi(SNOP); 
		        if(j > ncont) 
		            break;
   	        }
	    }
        CSn=1;
        wdr();
   			            
   	    CSn=0;
        i=spi(SFLUSHRX);
        i=spi(SFLUSHRX);
        CSn=1;
        wdr();
        return 1;
    }
    return 0;
}

void cc2420_deal(void)
{
	unsigned char szsum;
	unsigned char nloop;
	unsigned int nTemp;

	for (nloop = 0; nloop < (RECV_NO+1); nloop ++)
	{
		cc2420_data_temp[nloop] = cc2420_data_recive[nloop];

⌨️ 快捷键说明

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