⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blke.c

📁 非常重要的嵌入式单片机开发语言 是美国德州仪器的MSP430系列的系统语言1
💻 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 + -