コード例 #1
0
ファイル: rf.c プロジェクト: HerrSchrader/McBetty
void enableWOR(void) {
	
	cc1100_strobe(SIDLE);
	RFstatus |= WORenabled;
	cc1100_strobe(SWOR);
	
}
コード例 #2
0
ファイル: rf.c プロジェクト: HerrSchrader/McBetty
void waitTX(void)
{
	unsigned char status;
	unsigned char x;
	
	x=1;
	while (x) {
		status = cc1100_strobe(SNOP);
		switch ( 0xf0 & status) {
			case 0x70:
					cc1100_strobe(SFTX);
			case  0x10:
			case  0x00:
				if (RFstatus & WORsend) {
					switch_to_idle();
				}
				else if (RFstatus & WORenabled)
					cc1100_strobe(SWOR);
				else if (RFstatus & WORrxon)
					cc1100_strobe(SRX);
				else if (RFstatus & RXenabled)
					cc1100_strobe(SRX);
				else {
					switch_to_idle();
				}					
				x=0;
				break;
		}	
	}
}
コード例 #3
0
ファイル: rf.c プロジェクト: HerrSchrader/McBetty
void RF_sendWOR(unsigned char addr) {

	unsigned char b[2];
	unsigned int WOR_cb;
	
	b[0]=0x01;
	b[1]=addr;
	
	VICIntEnClr = INT_EINT0;
	switch_to_idle();
	RFstatus |= WORsend;
	cc1100_write1(0x18,conf[0x18] & 0xCF);
	
	cc1100_strobe(SCAL);
	waitTX();
	WOR_cb = addTimerCB(WORsend_timeout, 101);
	startCB(WOR_cb);
	
	while (RFstatus & WORsend) {
		cc1100_write(TX_fifo | BURST,b,2);
		cc1100_strobe(STX);
		waitTX();
	}
	
	stopCB(WOR_cb);
	removeTimerCB(WOR_cb);
	
	cc1100_write1(0x18,conf[0x18]);
	waitTX();
	VICIntEnable = INT_EINT0;	
}
コード例 #4
0
ファイル: cc1100.c プロジェクト: thinkJD/MoodPxl
void RF_send(unsigned char* b, int payload_cnt) {
  
  switch_to_idle_1();
  cc1100_strobe(SFTX);
  cc1100_strobe(SCAL);
  cc1100_write(TX_fifo | BURST, b, payload_cnt);
  cc1100_strobe(STX);
}
コード例 #5
0
ファイル: rf.c プロジェクト: HerrSchrader/McBetty
void cc1100IRQ (void) {
		
	if (cc1100_read1(0x3B | READ | BURST) > 0) {
		RF_getfifo(RFbuf);
		cc1100_strobe(SIDLE);
		cc1100_strobe(SFRX);
				
		struct cc1100frame_ *RXframe;
		RXframe = (struct cc1100frame_ *)&RFbuf[0];
		
		if ((RXframe->len == 1) && ((RXframe->destAddr == cc1100Addr)  || (RXframe->destAddr == 0x00))) {
			switch_WOR_RX();
		}
		
		if(RFstatus & WORenabled)
			cc1100_strobe(SWOR);
		else
			cc1100_strobe(SRX);
			
		if (RXframe->len > 3) {
			setCBIntervall(WORrx_cb,WORrx_time);
			switch ( RXframe->packetType) {
				case 0x01:
					draw_block(0,50,128,10,3,DRAW_ERASE);
					draw_string(0, 50, (char*)&RFbuf[headerLen], 3, DRAW_PUT);
				break;
				case 0x02:
					if (RXframe->data[0] == 0x01) {
						RXframe->destAddr = RXframe->srcAddr;
						RXframe->srcAddr = cc1100Addr;
						RXframe->data[0] = 0x02;
						RXframe->len = 0x04;
						switch_to_idle();
						RF_send(RFbuf);
					}
					else if (RFbuf[headerLen] == 0x02) {
						RFstatus |= Received;
					}
				break;
				case 0x03:
					if ((RXframe->data[0] == 0x01) && (timeInfo & time_accurate)) {
						send_time(RXframe->srcAddr);
					}
					else if (RFbuf[headerLen] == 0x02) {
						memcpy((unsigned char *)&time,(unsigned char *)&RXframe->data[1],3);
						memcpy((unsigned char *)&date,(unsigned char *)&RXframe->data[4],4);
						timeInfo |=0x02;
						VICSoftInt = INT_EINT2;
					}
			}
		}
	}
	
	waitTX();
	EXTINT = 0x01;
}
コード例 #6
0
ファイル: rf.c プロジェクト: HerrSchrader/McBetty
void WORrx_timeout(void) {
	stopCB(WORrx_cb);
	removeTimerCB(WORrx_cb);
	RFstatus &= ~WORrxon;
	draw_ant(100,0,DRAW_ERASE);
	cc1100_write1(0x16,conf[0x16]);
	RFstatus |= WORenabled;
	
	cc1100_strobe(SIDLE);
	cc1100_strobe(SWOR);
}
コード例 #7
0
ファイル: rf.c プロジェクト: HerrSchrader/McBetty
void RF_send(unsigned char* b) {
	
	VICIntEnClr = INT_EINT0;
	if(RFstatus & WORenabled) {
		switch_to_idle();
	}
	cc1100_write(TX_fifo | BURST,b,b[0]+1);
	cc1100_strobe(STX);
	waitTX();
	VICIntEnable = INT_EINT0;
}
コード例 #8
0
ファイル: cc1100.c プロジェクト: thinkJD/MoodPxl
void cc1100_init(void) {
	
	unsigned long xx = 0x200;
	
	PINSEL1 &= 0xffffff00;					//GDO0 SCK1 MISO1 MOSI1 as GPIO
	FIODIR0 |= (CS1 | MOSI1 | SCK1); 		//output
	
	PCONP &= 0xfffffbff;
	PCONP |= (1<<21);	
	FIOSET0 = SCK1;
	FIOCLR0 = MOSI1;
	FIOCLR0 = CS1;
	while(xx) {
		asm volatile("nop" : :);
		xx--;
	}
	FIOSET0 = CS1;
	xx=0x200;	
	while(xx) {
		asm volatile("nop" : :);
		xx--;
	}
	FIOCLR0 = CS1;
	FIOCLR0 = SCK1;	
	while (FIOPIN0 & MISO1);
	
	PINSEL1 |= 0x000002A8;		//SCK1 MISO1 MOSI1 as SPI1
	SSPCR0 = 0x0007;
	SSPCPSR = 0x02;
	SSPCR1 = 0x02;
			
	SSPDR = SRES;
	while (FIOPIN0 & MISO1);	
	while (SSPSR & (1<<4));
	xx = SSPDR;
		
	cc1100_write((0x00 | BURST ),(unsigned char*)conf,0x2f);
	cc1100_write1(PATABLE,0xC0);
	cc1100_strobe(SIDLE);
	cc1100_strobe(SPWD);
}
コード例 #9
0
ファイル: cc1100.c プロジェクト: thinkJD/MoodPxl
void switch_to_idle_1() {
  cc1100_strobe(SIDLE);
  while (cc1100_read1(MARCSTATE) != 01);
}
コード例 #10
0
ファイル: rf.c プロジェクト: HerrSchrader/McBetty
void switch_to_idle() {
	cc1100_strobe(SIDLE);
	while (cc1100_read1(0x35 | READ | BURST) != 01);
}