📄 ubec_chip.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 + -