📄 blke.c
字号:
#include <msp430x16x.h>
#include <signal.h>
#include "eMSP.h"
#include "PCI.h"
#include "PLC.h"
static void SPI_function(void);
static void CFG_function(void);
static void PCI_function(void);
static void PHY_function(void);
static void I2C_function(void);
static void STEP_function(void);
void BLK_function()
{ int cmd;
cmd=(RAM_BLKp0>>4)&0xff;
switch (cmd)
{
case 0x01: LED_function(); break;
case 0x02: KEY_function(); break;
case 0x03: SPI_function(); break;
case 0x04: CFG_function(); break;
case 0x05: PCI_function(); break;
case 0x06: PHY_function(); break;
case 0x07: I2C_function(); break;
case 0x09: STEP_function(); break;
default:
if (cmd>=0x10 && cmd<0x20) {IMG_function(); break;}
break;
}
}
//*********************************************************
// SPI_function()
// <cmd=0x031> <addr> <pnt> : read SPI word
// <cmd=0x032> <addr> <dat> : write SPI word
// <cmd=0x033> <addr> <pnt> : read SPI words (16-word)
static void SPI_function()
{ int cmd,n;
cmd=RAM_BLKp0&0xf; n=(RAM_BLKp0>>12)&0xf;
switch (cmd)
{
case 1: //**readSPI <addr> <pnt>
*(unsigned *)RAM_BLKp2=getSPI(RAM_BLKp1);
break;
case 2: //**writeSPI <addr> <dat>
putSPI(RAM_BLKp1,RAM_BLKp2);
break;
case 3: //**readSPI <addr> <pnt>
for (n=0; n<16; n++,RAM_BLKp1++,RAM_BLKp2+=2)
*(unsigned *)RAM_BLKp2=getSPI(RAM_BLKp1);
break;
}
}
static void CFG_function()
{ int cmd,n;
cmd=RAM_BLKp0&0xf; n=(RAM_BLKp0>>12)&0xf;
switch (cmd)
{
case 1 : //**readCFG <addr> <data>
*(long *)RAM_BLKp2=getConfigPCI(RAM_BLKp1);
break;
case 2 : //**writeCFG <addr> <dL> <dH>
putConfigPCI(RAM_BLKp1,*(long *)(&RAM_BLKp2));
break;
case 3 : //**readCFG <addr> <data>
for (n=0; n<8; n++,RAM_BLKp1+=4,RAM_BLKp2+=4)
*(long *)RAM_BLKp2=getConfigPCI(RAM_BLKp1);
break;
}
}
//*********************************************************
// PCI_function()
// <cmd=0x051> <addr> <pnt> : read PCI-IO word
// <cmd=0x051> <addr> <pnt> <dummy> : read PCI-IO dword
// <cmd=0x052> <addr> <dat> : write PCI-IO word
// <cmd=0x052> <addr> <dL> <dH> : write PCI-IO dword
// <cmd=0x053> <addr> <pnt> : read PCI-IO dwords (16-word)
static void PCI_function()
{ int cmd,n;
cmd=RAM_BLKp0&0xf; n=(RAM_BLKp0>>12)&0xf;
switch (cmd)
{
case 1 : //**readPCI <addr> <dL> <dH>
if (n==3) *(unsigned *)RAM_BLKp2=getIoPciW(RAM_BLKp1);
if (n==4) *(long *)RAM_BLKp2=getIoPciW(RAM_BLKp1);
break;
case 2 : //**writePCI <addr> <dL> <dH>
if (n==3) putIoPciW(RAM_BLKp1, RAM_BLKp2);
if (n==4) putIoPciL(RAM_BLKp1,*(long *)(&RAM_BLKp2));
break;
case 3 : //**readPCI <addr> <data>
for (n=0; n<8; n++,RAM_BLKp1+=4,RAM_BLKp2+=4)
*(long *)RAM_BLKp2=getIoPciW(RAM_BLKp1);
}
}
//*********************************************************
// PHY_function()
// <cmd=0x061> <addr> <pnt> : read PCI-physical word
// <cmd=0x062> <addr> <dat> : write PCI-physical word
// <cmd=0x063> <addr> <pnt> : read PCI-physical words (16-word)
static void PHY_function()
{ int cmd,n;
cmd=RAM_BLKp0&0xf; n=(RAM_BLKp0>>12)&0xf;
switch (cmd)
{
case 1 : //**readPHY <addr> <data>
*(unsigned *)RAM_BLKp2=getPHYregister(0x18,RAM_BLKp1);
break;
case 2 : //**writePHY <addr> <data>
putPHYregister(0x18,RAM_BLKp1,RAM_BLKp2);
break;
case 3 : //**readPHY <addr> <data> 16
for (n=0; n<16; n++,RAM_BLKp1++,RAM_BLKp2+=2)
*(unsigned *)RAM_BLKp2=getPHYregister(0x18,RAM_BLKp1);
break;
}
}
static void I2C_function()
{ int cmd,n;
cmd=RAM_BLKp0&0xf; n=(RAM_BLKp0>>12)&0xf;
switch (cmd)
{
case 1 : //**readI2C <addr> <data>
if (n==3) *(unsigned *)RAM_BLKp2=getI2C(RAM_BLKp1)&0x00ff;
break;
case 2 : //**writeI2C <addr> <data>
if (n==3) putI2C(RAM_BLKp1,RAM_BLKp2);
break;
case 3 : //**readI2C <addr> <data> 16
if (n==3)
for (n=0; n<16; n++,RAM_BLKp1++,RAM_BLKp2+=2)
*(unsigned *)RAM_BLKp2=getI2C(RAM_BLKp1)&0x00ff;
break;
}
}
// STEP_function()
// <cmd=0x096> <port> <data> : output port=data
// <cmd=0x097> <port> <addr> : input addr=port
static void STEP_function()
{ int cmd,n;
cmd=RAM_BLKp0&0xf; n=(RAM_BLKp0>>12)&0xf;
switch (cmd)
{
case 1 : //**readI2C <addr> <data>
if (n==3) *(unsigned *)RAM_BLKp2=getI2C(RAM_BLKp1)&0x00ff;
break;
// case 2 : //**manual <port> <spd> <dir>
// n=RAM_BLKp1&3; spd=RAM_BLKp2; dir=(RAM_BLKp3)?1:0;
// port=0x20+n*4;
// putSPI(port+0,0);
// putSPI(port+1,0x8000);
// putSPI(port+2,spd);
// putSPI(port+3,0x8000+(dir<<12)+acc);
// break;
case 6 : //**writeOP <port> <data>
if (n!=3) break;
putSPI(0x10,0x8000+(RAM_BLKp1<<8)+(RAM_BLKp2&0xff));
break;
case 7 : //**readIP <port> <addr>
if (n!=3) break;
putSPI(0x10,(RAM_BLKp1<<8));
*(unsigned *)RAM_BLKp2=(~getSPI(0x10))&0x1f;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -