www.pudn.com > ARM_RTL8019.rar > mac.c
#define HARDWARE_GLOBALS
#include "config.h"
#include "cfg_net.h"
uint8 N0_DATA[]= "No data received\n";
uint8 FALL_DATA[]="Fall data received\n";
uint8 NEX_PROL[]="Right data received,next protol is\n";
//unit8 PRO_ARP[]=" Arp request data received ";
#define NET_RST 0X00000040//0x20000000
#define NET_BASE_ADDR 0X83400000//0x20000000
extern My_Ip_1ID[4];
EX_RAM uint16 iic=0;
static uint8 SrcMacID[6] = MY_Mac_1ID;
union REC_BUFF_UNION REC_BUFF[MAX_REC_BUFF];
/****************************************************************************
* Ãû³Æ£ºWriteToNet()
* ¹¦ÄÜ£º°ÑÊý¾ÝдÈëRTL8019AS
* Èë¿Ú²ÎÊý£º ADDR дÈëµØÖ·
WRITEDATA дÈëÊý¾Ý
* ³ö¿Ú²ÎÊý£ºÎÞ
****************************************************************************/
void WriteToNet(uint8 ADDR_16,uint16 WRITEDATA)
{
(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16))=WRITEDATA;//0x83400000
}
/****************************************************************************
* Ãû³Æ£ºReadFromNet()
* ¹¦ÄÜ£º´ÓRTL8019AS°ÑÊý¾Ý¶Á³ö
* Èë¿Ú²ÎÊý£º ADDR ¶Á³öµØÖ·
* ³ö¿Ú²ÎÊý£º READDATA ¶Á³öÊý¾Ý
****************************************************************************/
uint16 ReadFromNet(uint8 ADDR_16)
{
uint16 temp;
temp=(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16));//0x83400000
return (temp);
}
/**********************************************************************
**º¯ÊýÔÐÍ£º void page(uchar pagenumber)
**Èë¿Ú²ÎÊý:º uchar pagenumber: ÒªÇл»µÄÒ³
**³ö¿Ú²ÎÊý: ÎÞ
**·µ »Ø Öµ£º ÎÞ
**˵ Ã÷£º Ñ¡ÔñÒ³,¿ÉÑ¡Ôñ0,1,2ÈýÒ³,µÚËÄÒ³ne000¼æÈÝоƬ±£Áô
************************************************************************/
void page(uint8 pagenumber)
{
uint8 temp;
temp=ReadFromNet(0);//command register
temp=temp&0x3B ;//×¢Òâtxpλ²»ÄÜÒª
pagenumber=pagenumber <<6;
temp=temp | pagenumber;
WriteToNet(0,temp);
}
/**********************************************************************
**º¯ÊýÔÐÍ£º void SetMacID()
**Èë¿Ú²ÎÊý:
**·µ »Ø Öµ£º ÎÞ
**˵ Ã÷£º ÉèÖÃоƬÎïÀíµØÖ·
************************************************************************/
void SetMacID(uint8 * mac_ptr)
{
//°ÑMACµØÖ·Ð´ÈëMY¡ª¡ªMAC¡ª¡ªIDÖÐ
page(1);
WriteToNet(1 , mac_ptr[0]);
//mac_ptr++;
WriteToNet(2 , mac_ptr[1]);
//mac_ptr++;
WriteToNet(3 , mac_ptr[2]);
//mac_ptr++;
WriteToNet(4 , mac_ptr[3]);
//mac_ptr++;
WriteToNet(5 , mac_ptr[4]);
//mac_ptr++;
WriteToNet(6 , mac_ptr[5]);
page(0);
}
/**********************************************************************
**º¯ÊýÔÐÍ£º void Send_Packet(struct _pkst *TxdData)
**Èë¿Ú²ÎÊý: struct _pkst *TxdData :Ö¸ÏòÒª·¢ËÍÊý¾ÝµÄ½á¹¹Ö¸Õë
**³ö¿Ú²ÎÊý: ÎÞ
**·µ »Ø Öµ£º ÎÞ
**˵ Ã÷£º ·¢ËÍÊý¾Ý°ü,ÒÔÌ«Íøµ×²ãÇý¶¯³ÌÐò,ËùÓеÄÊý¾Ý·¢ËͶ¼ÒªÍ¨¹ý¸Ã³ÌÐò
************************************************************************/
void Send_Packet(struct _pkst *TxdData)//
{
static uint8 Tx_Buff_Sel=0;
struct _pkst *ExPtr;//
//uint16 i;
uint8 *TEPTR;
union send_temp{
uint16 words;
uint8 bytes[2];
}send_buff;
uint16 ii,length=0;
//i=0;//¼Ç¼·¢ËÍÊÇ·ñСÓÚ60¸ö×Ö½Ú
page(0);//Çл»ÖÁµÚ0Ò³
length=length+TxdData->length;
ExPtr=TxdData->STPTR;
while(ExPtr!=NULL)//¼ÆËã³öÒª·¢Ë͵ÄÊý¾ÝµÄ×ܳ¤¶È
{
length=length+ExPtr->length;
ExPtr=ExPtr->STPTR;
}
ii=length;
Tx_Buff_Sel=Tx_Buff_Sel^1;//·¢ËÍ»º³åÇøµÄÇл»
if(Tx_Buff_Sel)
{
WriteToNet(0x09,0x40); //ÉèÖ÷¢ËÍÒ³µØÖ·
}
else
{
WriteToNet(0x09,0x46); //ÉèÖ÷¢ËÍÒ³µØÖ·
}
WriteToNet(0x08,0x00); //дÈëRSAR0 DMAÆðʼµØÖ·µÍλread page address low
WriteToNet(0x0b,ii>>8); //дÈëRSCR1 DMA ¼ÆÊýÆ÷¸ßλread count high
WriteToNet(0x0a,ii&0x00ff); //дÈëRSCR0 DMA ¼ÆÊýÆ÷µÍλread count low;
WriteToNet(0,0x12); //Æô¶¯DMAдwrite dma, page0
TEPTR=TxdData->DAPTR;
for(ii=0;ii<(((TxdData->length)+1)/2);ii++)
{
send_buff.bytes[0]=*TEPTR;
TEPTR++;
send_buff.bytes[1]=*TEPTR;
TEPTR++;
WriteToNet(0x10,send_buff.words);
}
ExPtr=TxdData->STPTR;
while(ExPtr!=NULL)
{
TEPTR=ExPtr->DAPTR;
for(ii=0;ii<((ExPtr->length+1)/2);ii++)
{
send_buff.bytes[0]=*TEPTR;
TEPTR++;
send_buff.bytes[1]=*TEPTR;
TEPTR++;
WriteToNet(0x10,send_buff.words);
}
ExPtr=ExPtr->STPTR;
}
//Èç¹ûÉÙÓÚ60
/***************************************/
//ÒÔÏÂΪÖÕÖ¹DMA²Ù×÷
WriteToNet(0x0b,0x00);
WriteToNet(0x0a,0x00);
WriteToNet(0x00,0x22); //½áÊø»ò·ÅÆúDMA²Ù×÷
WriteToNet(0x07,0xff);
if(Tx_Buff_Sel)
{
WriteToNet(0x04,0x40); //txd packet start;
}
else
{
WriteToNet(0x04,0x46); //txd packet start;
}
ii=length;
if(length<60)
{ //Èç¹ûÊý¾Ý³¤¶È<60×Ö½Ú,ÉèÖó¤¶ÈΪ60×Ö½Ú
ii=60;
}
WriteToNet(0x06,ii>>8); //high byte counter
WriteToNet(0x05,ii&0x00ff);//low byte counter
WriteToNet(0x07,0xff);
WriteToNet(0x00,0x1e); //Æô¶¯Íø¿¨ÖØÐ·¢ËÍÊý¾Ý°ü;
/***************************************/
//ÖØ·¢Êý¾ÝµÄ´¦Àí
for(length=0;length<6;length++) //×î¶àÖØ·¢6´Î
{
for(ii=0;ii<1000;ii++)
{//¼ì²éCR¼Ä´æÆ÷µÄtxpλÊÇ·ñΪµÍ,Ϊ1˵Ã÷ÕýÔÚ·¢ËÍ,Ϊ0˵Ã÷·¢Íê»ò³ö´í·ÅÆú
if((ReadFromNet(0x00)&0x04)==0) break;
}
if(ReadFromNet(0x04)&0x01)//¶Á·¢ËÍ״̬¼Ä´æÆ÷TSR£¬ÅжÏÊÇ·ñÎÞ´í·¢ËÍ
break; //ÎÞ´í·¢ËÍÔòÍ˳ö·ñÔòÖØ·¢
WriteToNet(0x00,0x1e); //Æô¶¯Íø¿¨ÖØÐ·¢ËÍÊý¾Ý°ü
}
/**************************************/
}
/**********************************************************************
**º¯ÊýÔÐÍ£º unsigned char * Rec_Packet()
**Èë¿Ú²ÎÊý:º ÎÞ
**³ö¿Ú²ÎÊý: ·µ»ØÊý¾ÝÖ¸Õë unsigned char *
**·µ »Ø Öµ£º 0 ûÓÐÐÂÊý¾Ý°ü»ò³ö´í
2 4 ipÊý¾Ý°ü
** unsigned char * ½ÓÊÕµ½ÐÂÊý¾Ý°ü
**˵ Ã÷£º ²éѯÊÇ·ñÓÐÐÂÊý¾Ý°ü²¢½ÓÊÕ½ø»º³åÇø
½ÓÊÕÊý¾Ý°üÓÐЧÔò×öÊý¾Ý´¦Àí
************************************************************************/
uint8 Rec_Packet()
{
static uint8 REC_BUFF_NUM=0;
static uint8 bnry,curr; //
static uint16 tmp[2];
//static uint16 crt=0;
uint16 * REC_BUFF_PTR_WORDS;
uint8 * REC_BUFF_PTR_BYTES;
uint8 i,temp;
uint16 ii,length;
page(0);
temp=ReadFromNet(0x07);
if((temp&&0x01)==0) return 0;
page(1);
curr=ReadFromNet(0x07); //curr writepoint 8019дҳָÕë
page(0);
bnry=ReadFromNet(0x03); //bnry page have read ¶ÁÒ³Ö¸Õë
bnry++;//bnry=bnry++;
if(bnry>0x7f)
{
bnry=0x4c;
//crt++;//ͳ¼ÆÄÚ²¿16KÑ»·Á˶àÉٴΣ¨·ÂÕæÆ÷29´Îºó³ö´í£©52¡¢
}
WriteToNet(0x00,0x22);//Í£Ö¹DMA¶Áд²Ù×÷
if(bnry==curr)
{
// UartSendStr(N0_DATA);
return 0; //»º³åÇøÎÞÊý¾Ý·µ»Ø0
}
else//´Ëʱ±íʾÓÐеÄÊý¾Ý°üÔÚ»º³åÇøÀï
{ //ÔÚÈκβÙ×÷¶¼×îºÃ·µ»Øpage0
if(REC_BUFF_NUM==MAX_REC_BUFF)//½ÓÊÕ»º³åÇøºÅÇåÁã
{
REC_BUFF_NUM=0;
}
REC_BUFF_PTR_WORDS=REC_BUFF[REC_BUFF_NUM].words;//É趨½ÓÊÕ»º³åÇøµÄÆðʼµØÖ·
//=======================================
WriteToNet(0x09,bnry); //RSAR1дÈëÒ³µØÖ·µÄ¸ß×Ö½Ú
WriteToNet(0x08,0x00); //RSAR0дÈëÒ³µØÖ·µÄµÍ×Ö½Ú
WriteToNet(0x0b,0x00); //RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú
WriteToNet(0x0a,0x04); //RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊýµÍ×Ö½Ú
WriteToNet(0x00,0x0a); //Æô¶¯Remote DMA¶Á²Ù×÷
//¶Áȡһ°üµÄǰ4¸ö×Ö½Ú:4×Ö½ÚµÄ8019Í·²¿
//temp[0]µ±Ç°Ð´µØÖ·(16bit);temp[1]°ü³¤(×Ö½Ú³¤)
for(i=0;i<2;i++)
{
*REC_BUFF_PTR_WORDS=ReadFromNet(0x10);
tmp[i]=*REC_BUFF_PTR_WORDS;
REC_BUFF_PTR_WORDS++;
}
//0:½ÓÊÕ״̬£»1:ÏÂÒ»°üµÄÖ¸Õ룻2:±¾°üµÍλ£»3:±¾°ü¸ßλ£»
//=======================================ÖÐÖ¹DMA²Ù×÷
WriteToNet(0x0b,0x00); //RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú
WriteToNet(0x0a,0x00); //RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊýµÍ×Ö½Ú
WriteToNet(0x00,0x22); //½áÊø»ò·ÅÆúDMA²Ù×÷
//=======================================
tmp[1]=tmp[1]-4;//È¥µô4¸ö×Ö½ÚµÄCRC
REC_BUFF[REC_BUFF_NUM].words[1]=tmp[1]; //°ÑÕæÕýµÄ½ÓÊÕµÄÖ¡µÄ³¤¶È±£´æµ½»º³åÇø
//=====================ÒÔÉϸ÷²½²Ù×÷±íʾ¶ÁÈëµÄÊý¾Ý°üÓÐЧ
if(((tmp[0]&0x0001)==0)||((tmp[0]&0xff00)>0x7f00)
||((tmp[0]&0xff00)<0x4c00)||(tmp[1]>0x0600))
{//½ÓÊÕ״̬´íÎó»òÏÂÒ»Êý¾Ý°üµÄÆðʼҳµØÖ·´íÎó»ò½ÓÊÕµÄÊý¾Ý°ü³¤¶È>1536×Ö½Ú
page(1);
curr=ReadFromNet(0x07); //page1¶ÁÈ¡CURRµÄÖµ
page(0); //Çл»»Øpage0
bnry = curr -1; //°Ñbnry»Ö¸´ÎªÏÂ16KÖеĿÕÓಿ·Ö
if(bnry < 0x4c)
{
bnry =0x7f;
}
WriteToNet(0x03,bnry); //°ÑBNRY»Ö¸´µ½Ö¸ÏòÏÂÒ»Ö¡write to bnry
WriteToNet(0x07,0xff); //Çå³ýÖжϱêÖ¾
//UartSendStr(FALL_DATA);
return 0;
}//end of if(((tmp[0]&0x0001)
//=============================================
else//±íʾÊý¾Ý°üÊÇÍêºÃµÄ.¶ÁȡʣϵÄÊý¾Ý
{
WriteToNet(0x09,bnry); //RSAR1дÈë¶ÁÒ³µØÖ·µÄ¸ß×Ö½Ú
WriteToNet(0x08,4); //RSAR0дÈë¶ÁÒ³µØÖ·µÄµÍ×Ö½Ú
WriteToNet(0x0a,tmp[1]); //RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊýµÍ×Ö½Ú//read count high
WriteToNet(0x0b,tmp[1]>>8); //RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú//read count low;
WriteToNet(0x00,0x0a); //Æô¶¯Remote DMA¶Á²Ù×÷
//read dma
length=tmp[1];//¼ÆËã³öÒª¶ÁÈ¡µÄÖ¡µÄ³¤¶È
for(ii=0;ii<((length+1)/2);ii++)
{
*REC_BUFF_PTR_WORDS=ReadFromNet(0x10);
REC_BUFF_PTR_WORDS++;
}
//================ÖÕÖ¹DMA²Ù×÷
WriteToNet(0x0b,0x00); //RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú//read count high
WriteToNet(0x0a,0x00); //RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú//read count low;
WriteToNet(0x00,0x22); //½áÊø»ò·ÅÆúDMA²Ù×÷//½áÊø»ò·ÅÆúDMA
//============================
}//end of else
//=========================================
bnry=(tmp[0]/256)-1; //tmp[0]Êǵ±Ç°ÓÐЧµÄCURR
if(bnry<0x4c)
bnry=0x7f;
WriteToNet(0x03,bnry); //дÈëÓÐЧµÄBNRY //write to bnry
WriteToNet(0x07,0xff); //Çå³ýÖжϱêÖ¾
REC_BUFF_PTR_BYTES=REC_BUFF[REC_BUFF_NUM].bytes;
REC_BUFF_PTR_BYTES=REC_BUFF_PTR_BYTES+4;//°ÑÖ¸Õë»Ö¸´µ½Êý¾Ý°üµÄÆðʼ
#ifdef Little_End
if((((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0008)//¿ÉÒÔ¼õÉÙ¶ÔÊý¾Ý»º³åÈ¡µÄÀûÓÃ
||(((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0608))//²»¹ýÈç¹û»º³åÇø×ã¹»´ó¾Í×îºÃ²»Òª
#endif
#ifdef Big_End
if((((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0800)//¿ÉÒÔ¼õÉÙ¶ÔÊý¾Ý»º³åÈ¡µÄÀûÓÃ
||(((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0806))//²»¹ýÈç¹û»º³åÇø×ã¹»´ó¾Í×îºÃ²»Òª
#endif
{
REC_BUFF_NUM++; //ͳ¼Æ½ÓÊÜÓÐЧ°üµÄÊýÄ¿
//UartSendStr(NEX_PROL);
//UartSendStr((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal);
Rec_Ethernet_Packed(REC_BUFF_PTR_BYTES,0);
return 1;//¿ÉÒÔÖ±½ÓÍ˳ö¡£
}
return 0;
}//end of if(bnry!=curr)
}
/**********************************************************************
**º¯ÊýÔÐÍ: void InitNic()
**Èë¿Ú²ÎÊý:num ÍøÂç¶Ë¿ÚºÅ
**˵ Ã÷:º ¶ÔоƬµÄ¹¤×÷¼Ä´æÆ÷½øÐÐÉèÖÃ
************************************************************************/
void InitNic(uint8 num)
{
uint8 i;
uint8 j;
PINSEL0 = 0x00000000; // ÉèÖÃËùÓйܽÅÁ¬½ÓGPIO
PINSEL0 &= 0xffffffbf; //ÉèÖõÚ6λΪ0
//PINSEL1 = 0x00000000;
//IODIR=IODIR|(NET_DATA+NET_CS+NET_WR+NET_ALE+NET_RD+NET_RST);
//IOSET=NET_DATA+NET_CS+NET_WR+NET_ALE+NET_RD+NET_RST;
IODIR=IODIR|NET_RST; //ÀûÓø´Î»¶Ë¿ÚÀ临λ
IOCLR=NET_RST;
for(i=0;i<200;i++)
{
for(j=0;j<200;j++);
}
IOSET=NET_RST;
for(i=0;i<200;i++)
{
for(j=0;j<200;j++);
}
IOCLR=NET_RST;
for(i=0;i<200;i++)
{
for(j=0;j<200;j++);
}
WriteToNet(0x1f,0x00); //ÀûÓø´Î»¼Ä´æÆ÷Èȸ´Î»
for(i=0;i<200;i++)
{
for(j=0;j<200;j++);
}
/**********************************************************************
1.Reg00ÃüÁî¼Ä´æÆ÷: CR,ÃüÁî¼Ä´æÆ÷,µØÖ·Æ«ÒÆÁ¿00H,Ϊһ¸ö×Ö½Ú
λ: 7 6 5 4 3 2 1 0
Ãû×Ö: PS1 PS0 RD2 RD1 RD0 TXP STA STP
//============================================
2.
RD2,RD1,RD0: Õâ3¸öλ´ú±íÒªÖ´ÐеŦÄÜ¡£
0 0 1 : ¶ÁÍø¿¨ÄÚ´æ
0 1 0 : Ð´Íø¿¨ÄÚ´æ
0 1 1 : ·¢ËÍÍø¿¨Êý¾Ý°ü
1 * * : Íê³É»ò½áÊøDMAµÄ¶Áд²Ù×÷
//============================================
3.TXPλÖÃ1ʱ·¢ËÍÊý¾Ý°ü£¬·¢Íê×Ô¶¯ÇåÁã
//============================================
4.
STA,STP: ÕâÁ½¸öλÓÃÀ´Æô¶¯ÃüÁî»òÍ£Ö¹ÃüÁî
1 0 Æô¶¯ÃüÁî
0 1 Í£Ö¹ÃüÁî
//============================================
********************************************************/
WriteToNet(0x00,0x21); //ʹоƬ´¦ÓÚֹͣģʽ,Õâʱ½øÐмĴæÆ÷ÉèÖÃ
for(i=0;i<200;i++)
{
for(j=0;j<200;j++);
} //ÑÓʱ10ºÁÃë,È·±£Ð¾Æ¬½øÈëֹͣģʽ
page(0);
WriteToNet(0x0a,0x00); //Çårbcr0
WriteToNet(0x0b,0x00); //Çårbcr1
WriteToNet(0x0c, 0xe0); //RCR,¼àÊÓģʽ,²»½ÓÊÕÊý¾Ý°ü
WriteToNet(0x0d, 0xe2); //TCR,loop backģʽ
page(0);
WriteToNet(0x01,0x4c); //PSTART=0X4C
WriteToNet(0x02,0x80); //PSTOP=0X80
WriteToNet(0x03,0x4c); //bnry=0x4c;
WriteToNet(0x04,0x40); //TPSR,·¢ËÍÆðʼҳ¼Ä´æÆ÷
WriteToNet(0x07,0xff); //Çå³ýËùÓÐÖжϱê־룬ÖжÏ״̬¼Ä´æÆ÷
WriteToNet(0x0f,0x01); //ÖÐ¶ÏÆÁ±Î¼Ä´æÆ÷£¬Ê¹ÄÜÎÞ´í½ÓÊÜÖжÏ
WriteToNet(0x0e,0xc9); // Êý¾ÝÅäÖüĴæÆ÷£¬16λdma·½Ê½
page(1);
WriteToNet(0x07,0x4d); //curr=0x4d
WriteToNet(0x08,0x00);
WriteToNet(0x09,0x41);
WriteToNet(0x0a,0x00);
WriteToNet(0x0b,0x80);
WriteToNet(0x0c,0x00);
WriteToNet(0x0d,0x00);
WriteToNet(0x0e,0x00);
WriteToNet(0x0f,0x00);
//WriteToNet(0x00,0x22); //ÕâʱÈÃоƬ¿ªÊ¼¹¤×÷
//SetMacID(NetPort[0].My_Mac); //½«Ð¾Æ¬ÎïÀíµØÖ·Ð´Èëµ½MAR¼Ä´æÆ÷
SetMacID(SrcMacID);
page(0);
WriteToNet(0x0c,0xcc); //½«Ð¾Æ¬ÉèÖóÉÕý³£Ä£Ê½,¸úÍâ²¿ÍøÂçÁ¬½Ó
WriteToNet(0x0d,0xe0);
WriteToNet(0x07,0xff); //Çå³ýËùÓÐÖжϱê־λ
WriteToNet(0x00,0x22); //Æô¶¯Ð¾Æ¬¿ªÊ¼¹¤×÷
}
uint16 swap_int16(uint16 temp)
{uint16 temp1;
temp1=(temp&0xff00)>>8;
temp=(temp&0x00ff)<<8;
return(temp+temp1);
}
uint32 swap_int32(uint32 temp)
{
union w temp232,temp132;
temp232.dwords=temp;
temp132.bytes.byte0=temp232.bytes.byte3;
temp132.bytes.byte1=temp232.bytes.byte2;
temp132.bytes.byte2=temp232.bytes.byte1;
temp132.bytes.byte3=temp232.bytes.byte0;
return(temp132.dwords);
}
uint16 Char2ToInt16(uint8 * temp)
{
uint16 temp16;
temp16=((uint16)(*temp))<<8;
temp++;
temp16=temp16+(uint16)(*temp);
return(temp16);
}
uint32 Char4ToInt32(uint8 * temp)
{
uint32 temp32;
temp32=((uint32)(*temp))<<24;
temp++;
temp32=temp32+(((uint32)(*temp))<<16);
temp++;
temp32=temp32+(((uint32)(*temp))<<8);
temp++;
temp32=temp32+(uint32)(*temp);
return(temp32);
}