📄 fiber.c
字号:
#include <msp430x16x.h>
#include <signal.h>
#include "eMSP.h"
#include "PCI.h"
//***** fixed delay to keep 128KHz *****
//void NETdelay() {int i;for(i=24;i;i--)_NOP();}
void NETdelay() {int i;for(i=30;i;i--)_NOP();}
//*********************************************************
// functions about read/write network data
//
// NETputWord() : put 1-word to node#X
// NETgetWord() : get 1-word to node#X
// NETputWords() : put N-word to node#X
// NETgetWords() : get N-word to node#X
//*********************************************************
void NETputWord(int n,int a, unsigned d){NETputWords(n,a,&d,1);}
unsigned NETgetWord(int n,int a){unsigned d; NETgetWords(n,a,&d,1);return(d);}
//***** put n-word to fiber-network *****
void NETputWords(int node,int addr,unsigned *dat,int len)
{ unsigned char x; int i;
csPGAon();
for (i=0; i<len; i++,addr++,dat++)
{ x=0x01+(node<<2)+((addr>>13)&0x02); SPItx(x); NETdelay();
x=(addr>>7)&0x7f; SPItx(x); NETdelay();
x= addr &0x7f; SPItx(x); NETdelay();
x=(*dat>>8)&0xff; SPItx(x); NETdelay();
x= *dat &0xff; SPItx(x); NETdelay();
}
csPGAoff();
}
//***** get n-word from fiber-network *****
void NETgetWords(int node,int addr,unsigned *dat,int len)
{ unsigned char x,dh,dl; int i;
csPGAon();
for (i=0; i<=len; i++,addr++)
{ if (i<len)
{ x=0x81+(node<<2)+((addr>>13)&0x02); SPItx(x); NETdelay();
x=(addr>>7)&0x7f; SPItx(x); NETdelay();
x= addr &0x7f; SPItx(x); NETdelay();
} else //**null frame
{ x=0xff; SPItx(x); NETdelay();
x=0; SPItx(x); NETdelay();
x=0; SPItx(x); NETdelay();
}
SPItx(0); NETdelay(); SPIrx(dh);
SPItx(0); NETdelay(); SPIrx(dl);
if (i>0) *dat++=(((unsigned)dh)<<8)+dl;
}
csPGAoff();
}
//***** get n-word from fiber-network *****
void NETtestWords(unsigned char *dat,int len)
{ unsigned char x; int i; unsigned node,addr;
csPGAon();
for (i=0; i<=len; i+=5)
{ node=0; addr=0x0010;
if (i<len)
{ x=0x81+(node<<2)+((addr>>13)&0x02); SPItx(x); NETdelay(); SPIrx(x); *dat++=x;
x=(addr>>7)&0x7f; SPItx(x); NETdelay(); SPIrx(x); *dat++=x;
x= addr &0x7f; SPItx(x); NETdelay(); SPIrx(x); *dat++=x;
} else //**null frame
{ x=0xff; SPItx(x); NETdelay(); SPIrx(x); *dat++=x;
x=0; SPItx(x); NETdelay(); SPIrx(x); *dat++=x;
x=0; SPItx(x); NETdelay(); SPIrx(x); *dat++=x;
}
SPItx(0x00); NETdelay(); SPIrx(x); *dat++=x;
SPItx(0x00); NETdelay(); SPIrx(x); *dat++=x;
}
csPGAoff();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -