📄 cs8900.i
字号:
__no_init volatile unsigned char DCOCTL @ (0x0056);
__no_init volatile unsigned char BCSCTL1 @ (0x0057);
__no_init volatile unsigned char BCSCTL2 @ (0x0058);
__no_init volatile unsigned short FCTL1 @ (0x0128);
__no_init volatile unsigned short FCTL2 @ (0x012A);
__no_init volatile unsigned short FCTL3 @ (0x012C);
__no_init volatile unsigned char CACTL1 @ (0x0059);
__no_init volatile unsigned char CACTL2 @ (0x005A);
__no_init volatile unsigned char CAPD @ (0x005B);
__no_init volatile unsigned short ADC12CTL0 @ (0x01A0);
__no_init volatile unsigned short ADC12CTL1 @ (0x01A2);
__no_init volatile unsigned short ADC12IFG @ (0x01A4);
__no_init volatile unsigned short ADC12IE @ (0x01A6);
__no_init volatile unsigned short ADC12IV @ (0x01A8);
__no_init volatile unsigned short ADC12MEM0 @ (0x0140);
__no_init volatile unsigned short ADC12MEM1 @ (0x0142);
__no_init volatile unsigned short ADC12MEM2 @ (0x0144);
__no_init volatile unsigned short ADC12MEM3 @ (0x0146);
__no_init volatile unsigned short ADC12MEM4 @ (0x0148);
__no_init volatile unsigned short ADC12MEM5 @ (0x014A);
__no_init volatile unsigned short ADC12MEM6 @ (0x014C);
__no_init volatile unsigned short ADC12MEM7 @ (0x014E);
__no_init volatile unsigned short ADC12MEM8 @ (0x0150);
__no_init volatile unsigned short ADC12MEM9 @ (0x0152);
__no_init volatile unsigned short ADC12MEM10 @ (0x0154);
__no_init volatile unsigned short ADC12MEM11 @ (0x0156);
__no_init volatile unsigned short ADC12MEM12 @ (0x0158);
__no_init volatile unsigned short ADC12MEM13 @ (0x015A);
__no_init volatile unsigned short ADC12MEM14 @ (0x015C);
__no_init volatile unsigned short ADC12MEM15 @ (0x015E);
__no_init volatile unsigned char ADC12MCTL0 @ (0x0080);
__no_init volatile unsigned char ADC12MCTL1 @ (0x0081);
__no_init volatile unsigned char ADC12MCTL2 @ (0x0082);
__no_init volatile unsigned char ADC12MCTL3 @ (0x0083);
__no_init volatile unsigned char ADC12MCTL4 @ (0x0084);
__no_init volatile unsigned char ADC12MCTL5 @ (0x0085);
__no_init volatile unsigned char ADC12MCTL6 @ (0x0086);
__no_init volatile unsigned char ADC12MCTL7 @ (0x0087);
__no_init volatile unsigned char ADC12MCTL8 @ (0x0088);
__no_init volatile unsigned char ADC12MCTL9 @ (0x0089);
__no_init volatile unsigned char ADC12MCTL10 @ (0x008A);
__no_init volatile unsigned char ADC12MCTL11 @ (0x008B);
__no_init volatile unsigned char ADC12MCTL12 @ (0x008C);
__no_init volatile unsigned char ADC12MCTL13 @ (0x008D);
__no_init volatile unsigned char ADC12MCTL14 @ (0x008E);
__no_init volatile unsigned char ADC12MCTL15 @ (0x008F);
#pragma language=default
extern void DelayCycles(unsigned int Count);
extern void WriteDWBE(unsigned char *Add, unsigned long Data);
typedef struct
{
unsigned int Addr;
unsigned int Data;
} TInitSeq;
extern const unsigned int MyMAC[];
void Init8900(void);
void Write8900(unsigned char Address, unsigned int Data);
void WriteFrame8900(unsigned int Data);
unsigned int Read8900(unsigned char Address);
unsigned int ReadFrame8900(void);
unsigned int ReadHB1ST8900(unsigned char Address);
unsigned int ReadFrameBE8900(void);
void CopyToFrame8900(void *Source, unsigned int Size);
void CopyFromFrame8900(void *Dest, unsigned int Size);
void DummyReadFrame8900(unsigned int Size);
void RequestSend(unsigned int FrameSize);
unsigned int Rdy4Tx(void);
const unsigned int MyMAC[] =
{
0 + (unsigned int)(1 << 8),
2 + (unsigned int)(3 << 8),
4 + (unsigned int)(5 << 8)
};
static const TInitSeq InitSeq[] =
{
(0x0158), 0 + (1 << 8),
(0x0158) + 2, 2 + (3 << 8),
(0x0158) + 4, 4 + (5 << 8),
(0x0112), (0x0040) | (0x0080),
(0x0104), (0x0100) | (0x0400) | (0x0800)
};
void Init8900(void)
{
unsigned int i;
P3OUT = (0x40) | (0x80);
P3DIR = 0xff;
P5OUT = 0;
P5DIR = 0xff;
DelayCycles(40000);
DelayCycles(40000);
Write8900((0x000a), (0x0114));
Write8900((0x000c), (0x0040));
do
Write8900((0x000a), (0x0136));
while (!(Read8900((0x000c)) & (0x0080)));
for (i = 0; i < sizeof InitSeq / sizeof (TInitSeq); i++)
{
Write8900((0x000a), InitSeq[i].Addr);
Write8900((0x000c), InitSeq[i].Data);
}
}
void Write8900(unsigned char Address, unsigned int Data)
{
P5DIR = 0xff;
P3OUT = (0x40) | (0x80) | Address;
P5OUT = Data;
P3OUT &= ~(0x80);
P3OUT = (0x40) | (0x80) | (Address + 1);
P5OUT = Data >> 8;
P3OUT &= ~(0x80);
P3OUT |= (0x80);
}
void WriteFrame8900(unsigned int Data)
{
P5DIR = 0xff;
P3OUT = (0x40) | (0x80) | (0x0000);
P5OUT = Data;
P3OUT &= ~(0x80);
P3OUT = (0x40) | (0x80) | ((0x0000) + 1);
P5OUT = Data >> 8;
P3OUT &= ~(0x80);
P3OUT |= (0x80);
}
void CopyToFrame8900(void *Source, unsigned int Size)
{
unsigned int *pSource = Source;
P5DIR = 0xff;
while (Size > 1)
{
P3OUT = (0x40) | (0x80) | (0x0000);
P5OUT = *pSource;
P3OUT &= ~(0x80);
P3OUT = (0x40) | (0x80) | ((0x0000) + 1);
P5OUT = (*pSource++) >> 8;
P3OUT &= ~(0x80);
P3OUT |= (0x80);
Size -= 2;
}
if (Size)
{
P3OUT = (0x40) | (0x80) | (0x0000);
P5OUT = *pSource;
P3OUT &= ~(0x80);
P3OUT |= (0x80);
}
}
unsigned int Read8900(unsigned char Address)
{
unsigned int ReturnValue;
P5DIR = 0x00;
P3OUT = (0x40) | (0x80) | Address;
P3OUT &= ~(0x40);
ReturnValue = P5IN;
P3OUT = (0x40) | (0x80) | (Address + 1);
P3OUT &= ~(0x40);
ReturnValue |= P5IN << 8;
P3OUT |= (0x40);
P5DIR = 0xff;
return ReturnValue;
}
unsigned int ReadFrame8900(void)
{
unsigned int ReturnValue;
P5DIR = 0x00;
P3OUT = (0x40) | (0x80) | (0x0000);
P3OUT &= ~(0x40);
ReturnValue = P5IN;
P3OUT = (0x40) | (0x80) | ((0x0000) + 1);
P3OUT &= ~(0x40);
ReturnValue |= P5IN << 8;
P3OUT |= (0x40);
P5DIR = 0xff;
return ReturnValue;
}
unsigned int ReadFrameBE8900(void)
{
unsigned int ReturnValue;
P5DIR = 0x00;
P3OUT = (0x40) | (0x80) | (0x0000);
P3OUT &= ~(0x40);
ReturnValue = P5IN << 8;
P3OUT = (0x40) | (0x80) | ((0x0000) + 1);
P3OUT &= ~(0x40);
ReturnValue |= P5IN;
P3OUT |= (0x40);
P5DIR = 0xff;
return ReturnValue;
}
unsigned int ReadHB1ST8900(unsigned char Address)
{
unsigned int ReturnValue;
P5DIR = 0x00;
P3OUT = (0x40) | (0x80) | (Address + 1);
P3OUT &= ~(0x40);
ReturnValue = P5IN << 8;
P3OUT = (0x40) | (0x80) | Address;
P3OUT &= ~(0x40);
ReturnValue |= P5IN;
P3OUT |= (0x40);
P5DIR = 0xff;
return ReturnValue;
}
void CopyFromFrame8900(void *Dest, unsigned int Size)
{
unsigned int *pDest = Dest;
P5DIR = 0x00;
while (Size > 1)
{
P3OUT = (0x40) | (0x80) | (0x0000);
P3OUT &= ~(0x40);
*pDest = P5IN;
P3OUT = (0x40) | (0x80) | ((0x0000) + 1);
P3OUT &= ~(0x40);
*pDest++ |= P5IN << 8;
P3OUT |= (0x40);
Size -= 2;
}
if (Size)
{
P3OUT = (0x40) | (0x80) | (0x0000);
P3OUT &= ~(0x40);
*(unsigned char *)pDest = P5IN;
P3OUT |= (0x40);
}
P5DIR = 0xff;
}
void DummyReadFrame8900(unsigned int Size)
{
P5DIR = 0x00;
while (Size--)
{
P3OUT = (0x40) | (0x80) | (0x0000);
P3OUT &= ~(0x40);
}
P3OUT |= (0x40);
P5DIR = 0xff;
}
void RequestSend(unsigned int FrameSize)
{
Write8900((0x0004), (0x00C0));
Write8900((0x0006), FrameSize);
}
unsigned int Rdy4Tx(void)
{
Write8900((0x000a), (0x0138));
return Read8900((0x000c)) & (0x0100);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -