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

📄 ubec_chip.c

📁 NEC 的无线通讯方案
💻 C
字号:
/*
* $Id: ubec_chip.c,v 1.15 2007/10/23 07:52:04 sunny Exp $
*/
/******************************************************************************
*
*  NEC+UBEC EMI test
*
*  ubec_chip_interface.c
*    UBEC chip register interface routines
*
*  2006 Skyley Networks
*
******************************************************************************/
// -------------------------------------------------
//   Includes
// -------------------------------------------------
#include "unet.h"

// ===========================================================================================
//   UBEC Chip
// ===========================================================================================

// -------------------------------------------------
//   CSI/SPI  EMPU I/F Initialize
// -------------------------------------------------
#if 0
void UBEC_Initialize(void) {
	UCHAR		cnt;

	// Port
	UBEC_GPIO0_PORT		= PORT_LO;
	UBEC_GPIO1_PORT		= PORT_LO;
	UBEC_GPIO2_PORT		= PORT_LO;
	UBEC_RESETn_PORT	= PORT_HI;
	UBEC_WAKE_PORT		= PORT_LO;
	UBEC_SEN_PORT		= PORT_HI;

	UBEC_GPIO0_PM		= PORT_OUTPUT;
	UBEC_GPIO1_PM		= PORT_OUTPUT;
	UBEC_GPIO2_PM		= PORT_OUTPUT;
	UBEC_RESETn_PM		= PORT_OUTPUT;
	UBEC_INT_PM			= PORT_INPUT;
	UBEC_WAKE_PM		= PORT_OUTPUT;
	UBEC_SEN_PM			= PORT_OUTPUT;




	// Chip Reset
	UBEC_RESETn_PORT	= PORT_LO;
	for(cnt=0;cnt<100;cnt++) { NOP(); NOP();NOP();}
	UBEC_RESETn_PORT	= PORT_HI;
	for(cnt=0;cnt<100;cnt++) { NOP(); NOP();NOP();}


	// Enable Serial Port
	UBEC_Deactivate_SEN();



	//========  Local Variable Setting
	//IntFlag.byte=0;
	//UzChip.byte=0;
	//========

	//==============vINT reky20061205
	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	EGN.1 = 1;								//Falling edge enable
	EGP.1 = 1;							//Rising edge ebable
	//PIF1=1;
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
	//=================
}
#endif

void UzChipReset(void)
{
	UINT8		cnt;

	Link_LED_Off();

	// Chip Reset
	UBEC_RESETn_PORT = PORT_LO;
	for(cnt=0;cnt<100;cnt++) { NOP(); NOP();NOP();}
	UBEC_RESETn_PORT = PORT_HI;
	for(cnt=0;cnt<100;cnt++) { NOP(); NOP();NOP();}
}


// -------------------------------------------------
//   Normal mode / Short address
// -------------------------------------------------

UCHAR spi_sr(UCHAR addr) {
	UCHAR	ch;
	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	UBEC_Activate_SEN();
	CSI_ReadWrite(addr << 1);
	ch = CSI_ReadWrite(0);
	UBEC_Deactivate_SEN();
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
	return ch;
}

void spi_sw(UCHAR addr,UCHAR ch)
{
	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	UBEC_Activate_SEN();
	CSI_ReadWrite((addr << 1) | 0x01);
	CSI_ReadWrite(ch);
	UBEC_Deactivate_SEN();
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
}


// -------------------------------------------------
//   Normal mode / Long address
// -------------------------------------------------

UCHAR spi_lr(USHORT addr)
{
	UCHAR	ch;
	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	UBEC_Activate_SEN();
	//addr = (addr | 0x400) << 5;
	addr = (addr << 5 ) | 0x8000;
	CSI_ReadWrite((UCHAR)((addr >> 8) & 0xFF));
	CSI_ReadWrite((UCHAR)(addr & 0xFF));
	ch = CSI_ReadWrite(0);
	UBEC_Deactivate_SEN();
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
	return ch;
}

void spi_lw(USHORT addr,UCHAR ch)
{
	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	UBEC_Activate_SEN();
	//addr = ((addr | 0x400) << 5) | 0x010;
	addr = ( addr << 5 ) | 0x8010;
	CSI_ReadWrite((UCHAR)((addr >> 8) & 0xFF));
	CSI_ReadWrite((UCHAR)(addr & 0xFF));
	CSI_ReadWrite(ch);
	UBEC_Deactivate_SEN();
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
}


// -------------------------------------------------
//   Normal mode / Long address / Block
// -------------------------------------------------

void spi_dump_fifo(USHORT addr,UCHAR *buf,UCHAR len)
{
	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	UBEC_Activate_SEN();
	addr = (addr | 0x400) << 5;
	CSI_ReadWrite((UCHAR)((addr >> 8) & 0xFF));
	CSI_ReadWrite((UCHAR)(addr & 0xFF));

	while(len>0) {
		*buf++ = CSI_ReadWrite(0);
		len--;
	}
	UBEC_Deactivate_SEN();
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
}

void spi_fill_fifo(USHORT addr,UCHAR *buf,UCHAR len)
{
	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	UBEC_Activate_SEN();
	//addr = (addr | 0x400) << 5;
	addr = (addr << 5) | 0x8010;
	CSI_ReadWrite((UCHAR)((addr >> 8) & 0xFF));
	CSI_ReadWrite((UCHAR)(addr & 0xFF));

	while(len>0) {
		CSI_ReadWrite(*buf++);
		len--;
	}
	UBEC_Deactivate_SEN();
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
}
void spi_rd_rx_fifo( UCHAR *buf, UINT8 buf_size)
{
	UCHAR frame_len;

	UBEC_INT_MASK = TRUE;		//PMK1 Disable INT
	UBEC_Activate_SEN();

	CSI_ReadWrite((UCHAR)(0xe0));		//Address 0x300
	CSI_ReadWrite((UCHAR)(0x00));

	frame_len = CSI_ReadWrite(0) + 2; // only LQI + RSSI (total MAC_EXTEND_DATA=9)
	if(frame_len > buf_size)
		frame_len = buf_size;	// 2007/8/8 10:12, Sunny: prevent buffer over-written

	while(frame_len--) {
		*buf++ = CSI_ReadWrite(0);
	}
	UBEC_Deactivate_SEN();
	UBEC_INT_MASK = FALSE;	//PMK1 Enable INT
}

⌨️ 快捷键说明

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