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

📄 uartser.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
📖 第 1 页 / 共 2 页
字号:
static void ClrAdTimeFunc(void)
{
     AdVoiceIDPara.status_time = CLOSE_;
     StorePubPara(ADVOICEID_);
}

static void ChoiceHitId(INT8U hit_id)
{
     HitChoicePara.Hit_id = hit_id;
     StorePubPara(HITCHOICE_);
}

static void SaveAdObject(INT8U *ptr,INT8U nums)
{
     
     
     AdObjectPara.nums = nums;
     
     memcpy((INT8U*)AdObjectPara.object,ptr, nums * sizeof(AD_OBJ));
     
     StorePubPara(ADOBJ_);
}



static void HdlLineLayout(INT8U len)
{
      
      INT16U linenum;
      INT8U  result;
     
      linenum =AsciiToDec(&Hdlrecbuf[1],len-2);

#if DEBUG_UARTNo_BUSSTATION <=1      
      SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,linenum);
#endif
      result = LayoutStation_Line(linenum);

#if DEBUG_UARTNo_BUSSTATION <=1     
      SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,result);
#endif
     
      switch(result)
      {
         case NOLINE:
         OSQPost(AlmTaskMsgQue, MSG_LAYOUT_NOLINE, 0 ,0);

#if DEBUG_UARTNo_BUSSTATION <=1         
         PrintFromUART(DEBUG_UARTNo_BUSSTATION, "无该线路!!!\n");
#endif
         break;
         case NOSTATION:
         OSQPost(AlmTaskMsgQue, MSG_LAYOUT_NOSTA, 0 ,0);
#if DEBUG_UARTNo_BUSSTATION <=1
         PrintFromUART(DEBUG_UARTNo_BUSSTATION, "有不满足条件的站点!!!\n");
#endif
         break;
         case SUCCESS:
         OSQPost(AlmTaskMsgQue, MSG_LAYOUT_SUCCESS, linenum ,0);

#if DEBUG_UARTNo_BUSSTATION <= 1        
         PrintFromUART(DEBUG_UARTNo_BUSSTATION, "规划成功!!!\n");
         PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n始发站1:");
         SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.start_sta1);
         PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n始发站2:");
         SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.start_sta2);
         PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n终点站1:");
         SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.end_sta1);
         PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n终点站2:");
         SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.end_sta2); 
#endif
         break;
         default:
         break;
      } 
     
}

#if DEBUG_UARTNo_BUSSTATION <=1

static void GoForward(void)
{
     if(Index >= MAX_INDEX)
     {
        Index = 0;
     }
     
     PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\nIndex=");
     SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,Index);
     RecerGpsData(ManualData[Index++]);
}

static void GoBackward(void)
{
    if(Index == 0)
    {
       Index = MAX_INDEX;
    }
    
    PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\nIndex=");
    SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,Index);
    RecerGpsData(ManualData[Index--]);
}

static void InStation(void)
{
    HdlPullInStation();
}

static void OutStation(void)
{
    HdlPullOutStation();
}

static void HdlRepeat(void)
{
    HdlManualRepeat();
}

static void HdlSetUpStream(void)
{
    SetUpLine();
}

static void HdlSetDownStream(void)
{
    SetDownLine();
}

#endif 

#if DEBUG_UARTNo_LEDDRV <=1
void GetTest(INT8U *tr);
#endif
static void  HdlProc(INT16S len)
{
    
    INT8U hdllen;
    INT8U chksum;
    INT8U type;
    INT8U nums;
   
      
    memcpy(Hdlrecbuf, &Recerbuf[1], len-2);                                // 去掉帧头帧尾
    hdllen = len -2;
    type = Hdlrecbuf[0];
    chksum = Hdlrecbuf[hdllen - 1];
    
    if (hdllen >= 1) 
     {
         
#if DEBUG_UARTNo_BUSSTATION <=1         
          PrintFromUART(DEBUG_UARTNo_BUSSTATION, "<receive a frame from UART1>\n");
#endif 
          if (GetChkSum(Hdlrecbuf , hdllen - 1) == chksum)
          {
              switch(type)
              {
                 case GPS_DATA:
                 
                 RecerGpsData(&Hdlrecbuf[1]);
                 break;
                 
                 case ADPos_OPEN:
                 
                 SetAdPosFunc(Hdlrecbuf[1],Hdlrecbuf[2]);
                 break;
                 
                 case ADPos_CLOSE:
                 
                 ClrAdPosFunc();
                 break;
                 
                 case ADTime_OPEN:
                 SetAdTimeFunc(Hdlrecbuf[1],Hdlrecbuf[2]);
                 break;
                 
                 case ADTime_CLOSE:
                 ClrAdTimeFunc();
                 break;
                 
                 case HIT_CHOICE:
                 
                 ChoiceHitId(Hdlrecbuf[1]);
                 break;
                 
                 case SIMU_BEGIN:
                 OpenIndicator();
                 SetSimuStatus();
                 OSQPost(AlmTaskMsgQue, MSG_UARTSER_SIMUBEGIN, 0, 0);
                 break;
                 
                 case SIMU_END:
                 
                 CloseIndicator();
                 ClearSimuStatus();
                 OSQPost(AlmTaskMsgQue, MSG_UARTSER_SIMUEND, 0, 0);
                 break;
                 
                 case AD_OBJECT:
                 
                 nums = Hdlrecbuf[1];
                 SaveAdObject(&Hdlrecbuf[2],nums);
                 break;
                 
                 case LINE_LAYOUT:
                 HdlLineLayout(hdllen);
                 break;
                 case SYS_TIME:
                 SetSysTime_Time(&Hdlrecbuf[1]);
#if DEBUG_UARTNo_LEDDRV <=1                 
                 case 0x0b:
                 GetTest(&Hdlrecbuf[1]);
                 break;
#endif                 
                 default:
                 break;
              }
	  	    
          } 
          else 
          {
#if DEBUG_UARTNo_BUSSTATION <=1                 
                 PrintFromUART(DEBUG_UARTNo_BUSSTATION, "<sorry, check sum error(UART1)>\n");
#endif 
          }
          
       }

}



static void scanTmrProc(void)	 
{
   INT8U Errorflag;    
   
 
   for (;;) 
   {
       if ((cur = uarts_read(1)) == -1) break;
       
#if DEBUG_UARTNo_BUSSTATION <=1
       
      
       if(cur == 0x2e)
       {
          GoForward();
          break;
       }
       else if (cur == 0x2c)
       {
          GoBackward();
          break;
       }
       else if (cur == 0x3d)
       {
          InStation();
          break;
       }
       else if (cur == 0x2d)
       {
          OutStation();
          break;
       }
       else if (cur == 0x5c)
       {
          HdlRepeat();
          break;
       }
       else if (cur == 0x5b)
       {
          HdlSetUpStream();
       }
       else if (cur == 0x5d)
       {
          HdlSetDownStream();
       }
       
#endif        
      
     
    
       if (rlen == 0) 
       {                                   /* search flags */
            if (cur == 0x7e)
            {
               	Recerbuf[rlen++] = cur;
                pre  = 0;
            }
            continue;
       } 
       else 
       {
            if (cur == 0x7e) 
            {
               	Recerbuf[rlen] = cur;
               	
                if(( rlen>=3)&&(Recerbuf[0] == 0x7e))
                {
                     HdlProc(rlen+1);
		        }
		        
		        rlen = 0;
		        break;
            }
      }
      
      if (pre == 0x7d) 
      {  
           if (cur == 0x02)             
           {
                Recerbuf[rlen++] = 0x7e;
	       }
           else if (cur == 0x01)        
           {
                Recerbuf[rlen++] = 0x7d;
	       }
	       else 
           {
                Errorflag = 1;
                break;
           }
     }
     else
     {
          if (cur != 0x7d)                  
          {
                Recerbuf[rlen++] = cur;
	      }
     }
        
     pre = cur;
  }

   if (Errorflag == 1)
   {
         
   }

}


void InitUartSer(void)
{
    
    rlen = 0;
#if DEBUG_UARTNo_BUSSTATION <=1
    Index = 0;
#endif    
    uarts_init(1, 57600L);
    scantmr = CreateTimer(scanTmrProc, 0);
    StartTmr(scantmr, MILTICK, 2);
}

 

⌨️ 快捷键说明

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