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

📄 midi.c

📁 好东东
💻 C
字号:
#include   "config.h"
#include   "midi.h"
#include   "portdataIO.h"
// 31.25k

MIDIDATAREG  mididatareg;
_DMXINCONTROL dmxincontrol;

unsigned char    dmxdata[defaultlightchannel];
unsigned char    *dataprt;


uint32   rxcount;    
uint8    lightstatus;
void  FIQ_Exception(void)
{
unsigned char intsourss;
unsigned char datatemp1;
unsigned char datatemp2; 
uint8         datatemp;  
  
    datatemp1=U1MSR;
    datatemp2=U1IIR;    
    intsourss=U1LSR;
    datatemp=U1RBR;
    
    if ((intsourss & 0x01)==0x01)                //       数据有效
    {
       if ((intsourss & 0x10)==0x10)             //       收到的是数据头
       {
           rxd_handbyte(datatemp);                    //   
            
       }
       else
       {
          if (dmxincontrol.handbyte == TRUE)         //  上字节是头数据
          {
             if (dmxincontrol.dmxrxdend ==TRUE)
             {
                 if (datatemp==0)                         // 第二个字接   
                 {
                    dmxincontrol.handbyte = FALSE;     
                 }
                 else
                 {
                    dmxincontrol.handbyte = FALSE;
                    dmxincontrol.rxdit    = FALSE;          // 第二字节错误
                    dmxincontrol.dmxrxdend = FALSE;  
                }
             }
             else
             {
                 dmxincontrol.handbyte = FALSE;
                 dmxincontrol.rxdit    = FALSE;
                 dmxincontrol.dmxrxdend = FALSE; 
             }
                
          }
          else  
          {
              if (dmxincontrol.dmxrxdend==TRUE)         // 
              {
                  if (dmxincontrol.rxdit == TRUE)                 //     rxd data
                  { 
                      *dataprt = datatemp;
                      dmxincontrol.lightchannel--;
                      if (dmxincontrol.lightchannel==0)
                      {
                          rxd_fals_led(); 
                                               
                          
                          dmxincontrol.handbyte = FALSE;
                          dmxincontrol.rxdit    = FALSE;
                          dmxincontrol.dmxrxdend = FALSE; 
                      }
                      else
                      {
                         dataprt++;
                      }
                  }
                  else                                            //  
                  {
                       if  (dmxincontrol.lightaddress == defaultlightaddress)
                       {
                           dataprt = dmxdata;
                           *dataprt = datatemp;
                           dmxincontrol.lightchannel--;
                           if (dmxincontrol.lightchannel==0)
                           {
                               rxd_fals_led(); 
                               dmxincontrol.handbyte = FALSE;
                               dmxincontrol.rxdit    = FALSE;
                               dmxincontrol.dmxrxdend = FALSE; 
                           }
                           else
                           {
                              dmxincontrol.rxdit=TRUE;
                              dataprt++;
                           }
                       }
                       else
                       {
                            dmxincontrol.lightaddress++;
                       }  
                  //   dmxincontrol.lightaddress--;
                  //   if (dmxincontrol.lightaddress ==0)
                  //   {
                  //       dataprt = dmxdata;
                  //       dmxincontrol.rxdit=TRUE;  
                  //   }
                  }        
              }
              else
              {
                  dmxincontrol.handbyte = FALSE;
                  dmxincontrol.rxdit    = FALSE;
                  dmxincontrol.dmxrxdend = FALSE; 
              }
          }   
       }
    }
   
} 


void   rxd_dataop(void)
{
}


void   rxd_handbyte(unsigned char datatemp)
{
    
      if (datatemp==0)                               //   确定是数据头
      {
       //  rxd_fals_led();
         dmxincontrol.handbyte = TRUE;
         dmxincontrol.dmxrxdend = TRUE;
         dmxincontrol.lightchannel=defaultlightchannel; 
     //    dmxincontrol.lightaddress=defaultlightaddress-1;
         dmxincontrol.lightaddress=1;
         dmxincontrol.rxdit     = FALSE;
         
      }
      else                                           //   数据头接收错误
      {
           dmxincontrol.handbyte = FALSE;
           dmxincontrol.rxdit    = FALSE;
           dmxincontrol.dmxrxdend = FALSE;
      }   
}


void   rxd_fals_led(void)
{
     if (dmxincontrol.led_div>=15)
     {
         dmxincontrol.led_div=0;
         if (dmxincontrol.ledstatus==FALSE)
         {
               dmxincontrol.ledstatus=TRUE;
               IO1SET = rxled;
         }
         else
         {
               dmxincontrol.ledstatus=FALSE;
               IO1CLR = rxled;
         }
     }
     else
     {
         dmxincontrol.led_div++;
     }
}


void  UART1_initiall(void)
{
    dmxincontrol.led_div=0; 
    dmxincontrol.ledstatus=FALSE;
    dmxincontrol.handbyte = FALSE;
    dmxincontrol.rxdit    = FALSE;
    dmxincontrol.dmxrxdend = FALSE;
    
    
//
    U1LCR =0x87;//1000 0011
    U1DLL = 0x06;   //  31.25K
    U1DLM = 0x00;
    U1LCR = 0x07;

    VICIntSelect=VICIntSelect | uart1selectFRQ;
    VICIntEnable=VICIntEnable | uart1enableFRQ; 
    U1IER=0x01;    //  open interrput
     
    
    
//
    mididatareg.commandflags=FALSE;
    mididatareg.renbit=FALSE;
    mididatareg.songstatus=0;
    mididatareg.songcount=0;
    mididatareg.position=0;
}

void  readmididata(void)
{

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -