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

📄 debug.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         : debug.C                                    *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : Cyb 2006.11.29                                         *
****************************************************************/


#include "includes.h"
#include "roundbuf.h"
#include "tools.h"
#include "message.h"
#include "uart_drv.h"
#include "timetask.h"
#include "sensor.h"
#include "debug.h"
#include "audio.h"
#include "gpsrecer.h"
#include "flash.h"
#include "hardware.h"
#include "isddriv.h"
#include "voice.h"


#if DEBUG_UARTno_DEBUG <=1
#define MAX_LEN 100
static INT8U   simugps[][10] = {//0x18,0x1D,0x63,0x05,0x76,0x07,0x06,0x45,0x50,0x17,
                                    //0x18,0x1E,0x01,0x46,0x76,0x07,0x0C,0x5A,0x50,0x17,
                                    //0x18,0x1E,0x06,0x03,0x76,0x07,0x16,0x14,0x50,0x17,
                                    //0x18,0x1E,0x07,0x26,0x76,0x07,0x19,0x26,0x50,0x17,
                                    //0x18,0x1E,0x14,0x4E,0x76,0x07,0x1A,0x1C,0x50,0x75,
                                    //0x18,0x1E,0x30,0x48,0x76,0x07,0x0B,0x25,0x50,0x6A,
                                    //0x18,0x1E,0x33,0x2F,0x76,0x07,0x08,0x1E,0x50,0x6a,
                                    //0x18,0x1E,0x34,0x12,0x76,0x07,0x07,0x47,0x50,0x6A,
                                    //0x18,0x1E,0x31,0x59,0x76,0x06,0x60,0x1D,0x50,0x53,
                                    //0x18,0x1E,0x2F,0x11,0x76,0x06,0x5A,0x02,0x50,0x53,
                                    //0x18,0x1E,0x27,0x3F,0x76,0x06,0x3D,0x4C,0x50,0x5B,
                                    //0x18,0x1E,0x31,0x5E,0x76,0x06,0x39,0x47,0x50,0x01,
//new
                                    0x18,0x1C,0x02,0x34,0x76,0x0A,0x3D,0x23,0x06,0x27,
                                    0x18,0x1B,0x5F,0x61,0x76,0x0A,0x4C,0x1A,0x06,0x27,
                                    0x18,0x1B,0x58,0x38,0x76,0x0A,0x4C,0x44,0x16,0x4A,
                                    0x18,0x1B,0x45,0x4D,0x76,0x0A,0x3E,0x28,0x30,0x4A,
                                    0x18,0x1B,0x3E,0x53,0x76,0x0A,0x38,0x3C,0x16,0x4B,
                                    0x18,0x1B,0x1E,0x1B,0x76,0x0A,0x0D,0x01,0x1B,0x4F,
                                    0x18,0x1B,0x00,0x13,0x76,0x0A,0x0C,0x58,0x10,0x4F,
                                    0x18,0x1A,0x14,0x03,0x76,0x08,0x42,0x43,0x2B,0x4C,
                                    0x18,0x19,0x43,0x0E,0x76,0x07,0x0F,0x3C,0x10,0x67,
                                    0x18,0x19,0x57,0x60,0x76,0x06,0x3F,0x0D,0x2B,0x60,
									0x18,0x19,0x5E,0x09,0x76,0x06,0x1F,0x2B,0x05,0x1B,
                                    0x18,0x1A,0x07,0x61,0x76,0x05,0x5B,0x16,0x2B,0x63,
                                    0x18,0x1A,0x0D,0x09,0x76,0x05,0x4C,0x10,0x2B,0x5D,
                                    0x18,0x1A,0x0D,0x5C,0x76,0x05,0x45,0x62,0x2B,0x5D,
                                    0x18,0x1A,0x12,0x05,0x76,0x05,0x41,0x30,0x2B,0x65,
                                    0x18,0x1A,0x1B,0x2F,0x76,0x05,0x1A,0x04,0x2B,0x65,
                                    0x18,0x1A,0x22,0x3A,0x76,0x05,0x1B,0x44,0x2B,0x0D,
                                    0x18,0x1A,0x35,0x3C,0x76,0x05,0x1F,0x55,0x2B,0x04,
                                    0x18,0x1A,0x38,0x49,0x76,0x05,0x19,0x2B,0x2B,0x5B,
                                    0x18,0x1A,0x3C,0x51,0x76,0x05,0x0F,0x16,0x2B,0x6A,
                                    0x18,0x1A,0x41,0x51,0x76,0x05,0x09,0x41,0x2B,0x69,
                                    0x18,0x1A,0x3E,0x4F,0x76,0x05,0x02,0x05,0x2B,0x4C,
                                    0x18,0x1A,0x3A,0x00,0x76,0x04,0x61,0x0F,0x2B,0x4D,
                                    0x18,0x1A,0x3F,0x2D,0x76,0x04,0x53,0x35,0x2B,0x72 
                                    };

static INT8U INDEX;
static INT8U simudata[10];
static INT8U SEG;


typedef struct 
{
    char* keyword;
    void (*handler)(INT8U* sptr, INT8U len);
}FUNC_STRUCT;


static TMR_TSK *scantmr;
static INT8U index;
static INT8U recvbuf[MAX_LEN];

#if 0
static void HdlAddRadar(INT8U *sptr,INT8U len)
{
    sptr = sptr;
    len  = len;
    SetSensor(0);
    
}
static void HdlAddEleceye(INT8U *sptr,INT8U len)
{
    sptr = sptr;
    len  = len;
    SetSensor(1);  
}

static void HdlTest(INT8U *sptr,INT8U len)
{
    sptr = sptr;
    len  = len;
    SetSensor(2); 
}

static void HdlDelete(INT8U *sptr,INT8U len)
{
   sptr = sptr;
    len  = len;
   SetSensor(3); 
}
#endif


static void HdlSendop(INT8U *sptr,INT8U len)
{
   INT8U temp[4];
   INT8U i;
   INT8U op;
   HWORD_UNION addr;
   INT16U back;
   i=0;
   sptr = sptr +7;
   
   while(*sptr!=CR)
   {
       temp[i] = SearchDigitalString(sptr,len, 0x20,1);
     
       sptr = sptr+3;
      
       SendFromUART_HEX(1, temp[i]);
       i++;
    }
   
    PrintFromUART(1,"\n");
    op = temp[0];
    addr.bytes.high = temp[1];
    addr.bytes.low  = temp[2]; 
   
    back = DebugSendop(op,addr.hword);
   
    SendFromUART_HEX(1, (INT8U)(back>>8));
    SendFromUART_HEX(1, (INT8U)back);
   
} 
static void HdlTestGps(INT8U *sptr,INT8U len)
{
    
    sptr = sptr;
    len  = len;
    if(GpsDataValid())
    {
        PrintFromUART(1, "GPS已定位!\n");  
    }
    else
    {
       PrintFromUART(1, "GPS未定位!\n");  
    }
}

static void HdlClear(INT8U *sptr,INT8U len)
{
    sptr = sptr;
    len  = len;
     
  //  SectorErase_Flash(_OBJECTDOT_RADARSECTOR);
  ///  SectorErase_Flash(_OBJECTDOT_ELECEYESECTOR);
} 
 
 
static void HdlPlayer1(INT8U *sptr,INT8U len)
{
    INT8U temp;
   
    sptr = sptr +7;
    temp = SearchDigitalString(sptr,len,CR,1);
    
    DebugSendPlayer(temp);
}

 

static void HdlPlayer(INT8U *sptr,INT8U len)
{
    INT8U temp;
   
    
    sptr = sptr +7;
    temp = SearchDigitalString(sptr,len,CR,1);
    
   
    PlaySingleAudio(FALSE, TRUE, temp);      
     
    
}

 


static void HdlInitISD(INT8U *sptr,INT8U len)
{
    sptr = sptr;
    len  = len;
    InitISD(); 
}

static void RepNop(INT8U nums)
{
    INT8U i;
    
    for(i=0;i<nums;i++)
    {
__asm
{
    NOP
}
       
    }
}
static void HdlMeasureClk(INT8U *sptr,INT8U len)
{
    INT8U temp;
   
    sptr = sptr +4;
    temp = SearchDigitalString(sptr,len,CR,1);
    
    Init_PIN_SCLK();
    CLEAR_PIN_NSS();
    
    for(;;)
    { 
       ClearWatchdog();
       SET_PIN_SCLK();
       RepNop(temp);
       CLEAR_PIN_SCLK();
       RepNop(temp);
    } 
}

static void Hdlpinmosi(INT8U *sptr,INT8U len)
{
    sptr = sptr;
    len  = len;
    
    if (Read_PIN_MOSI())
    {
        PrintFromUART(1, "电平为高!\n");  
    }
    else
    {
        PrintFromUART(1, "电平为低!\n"); 
    }
   
}
static void Hdlplayerall(INT8U *sptr,INT8U len)
{
    INT8U i;
    
    sptr = sptr;
    len  = len; 
    
    for(i =0;i<AD_MAX;i++)
    {
      PlaySingleAudio(FALSE, TRUE, i); 
    }
    
}
static FUNC_STRUCT func_array[] = {
#if 0
                                      "radar",    HdlAddRadar,
                                      "eleceye",  HdlAddEleceye,
                                      "test",     HdlTest,
                                      "del",      HdlDelete,
#endif
                                      "sendop:",  HdlSendop,
                                      "gps",      HdlTestGps,
                                      "clear",    HdlClear,
                                      "player:",  HdlPlayer,
                                      "initisd",  HdlInitISD,
                                      "clk:",     HdlMeasureClk,
                                      "mosi",     Hdlpinmosi,
                                      "playerall",Hdlplayerall,
                                      "_player:", HdlPlayer1
                                   };

static void HdlRecvDebug(void)
{
    INT8U i;
    
    for (i = 0; i < sizeof(func_array)/sizeof(func_array[0]); i++) 
    {
        if (SearchKeyWordFromHead(recvbuf, index, func_array[i].keyword)) 
        {
            if (func_array[i].handler != NULL) 
            {
                func_array[i].handler(recvbuf, index);
            }
            PrintFromUART(1, "OK\n");
        }
    }
}


static void InputSimuData(INT8U *Data)
{
     memcpy(simudata ,Data,10);
}
INT8U GetSimuVector(void)
{
    return simudata[8];
}

static void  UpIndex(void)
{
    
     PrintFromUART(1, "\n");
     PrintFromUART(1, "前进!\n");
     SendFromUART_HEX(1,INDEX);
     InputSimuData(simugps[INDEX]);
     
     INDEX++;
     
     if( INDEX == 0x18)
     {
         INDEX = 0;
     }
}


static void  DownIndex(void)
{
   
    PrintFromUART(1, "\n");
    PrintFromUART(1, "后退!\n");
    SendFromUART_HEX(1,INDEX);
    InputSimuData(simugps[INDEX]);
     
    INDEX--;
    
    if( INDEX == 0x00)
    {
         INDEX = 0x17;
    }

}

static void  GoAdvance(void)
{
  
   PlaySingleAudio(FALSE, TRUE, SEG); 
   
   SEG++;
   
   if ( SEG == AD_MAX)
   {
        SEG = 0;
   }
   
}

static void GoBack(void)
{
   PlaySingleAudio(FALSE, TRUE, SEG); 
   
   SEG--;
   
   if (SEG == 0x00)
   {
      SEG = AD_MAX;
   }
}
static void ScanFunc(void)
{
   INT8S ch;
    
    StartTmr(scantmr, MILTICK, 2);
    
    for (;;) 
    {
        if ((ch = uarts_read(1)) == -1) break;
        
        if ( ch == 0x3d)
        {
            UpIndex();
            return;
        }
        if ( ch == 0x2d)
        {
            DownIndex();
            return;
        }
        
        if ( ch == 0x2e)
        {
            GoAdvance();
            return;
        }
        
        if ( ch == 0x2c)
        {
           GoBack();
           return;
        }
        recvbuf[index] = ch;
        
        SendFromUART_BYTE(1, ch);
        
        if (ch == CR) 
        {
            SendFromUART_BYTE(1, LF);
        }
        
        index++;
        
        if (index >= MAX_LEN) 
        {
            index = 0;
        }
        if ((ch == 0x0d)||(ch == 0x0a)) 
        {//收到一帧,处理
            if (index >= 3) 
            {
                HdlRecvDebug();
            }
            
            index = 0;
        }
    }
 
}  
 
void InitDebug(void)
 {
     index = 0;
     uarts_init(1, 57600L);
     scantmr = CreateTimer(ScanFunc, 0);
     StartTmr(scantmr, MILTICK, 2);

          
 }
 
void GetSimuData(DATUM_STRUCT  *datum)
{
     datum->hbit = 0x40;
     memcpy(datum->latitude,simudata,10);
}

#if 0
static void Printendhit(INT8U type)
{
    
     type = type;
   /* switch(type)
	{
		 case ZONE_LAT :
         PrintFromUART(1,"\n测试纬度区间数据......\n");
		 break;
    	 case ZONE_LONGT:
         PrintFromUART(1,"\n测试经度区间数据......\n");
		 break;
		 case AREA_VALID:
		 PrintFromUART(1,"\n测试有效区域筛网数据......\n");
		 break;
	     case OFT_CROSSINGDOT:
         PrintFromUART(1,"\n测试路口信息点偏移量数据......\n");
		 break;
		 case OFT_ELECEYESORT:
         PrintFromUART(1,"\n测试电子眼偏移量数据......\n");
		 break;
		 case DATA_CROSSDOT:
		 PrintFromUART(1,"\n测试路口信息点数据......\n");
		 break;
	     case DATA_ELECEYESORT:
         PrintFromUART(1,"\n测试电子眼数据......\n");
		 break;
		 case DATA_VECLIMSEC:
         PrintFromUART(1,"\n测试限速路段数据......\n");
		 break;
		 case DATA_ACCIDENT:
         PrintFromUART(1,"\n测试事故地段数据......\n");
		 break;
		 case OFT_RADARSORT:
         PrintFromUART(1,"\n测试雷达偏移量数据......\n");
		 break;
		 case DATA_RADARSORT:
         PrintFromUART(1,"\n测试雷达数据......\n");
		 break;
		 default:
	     break;
   }
  */

}
#endif 
#if 0
static void TesATypetMapData(INT8U type,INT16U len)
{
     INT32U address;
     INT32U offset;
     INT8U  temp;
     
     address = SST_DATA_BASE + type * 4;
     
     offset = *(INT32U *)address;
     
     address =  SST_DATA_BASE + offset;
     
     Printendhit(type);
     
     for(; len>0; len--)
     {
	    ClearWatchdog();
        temp   = *( INT8U *) address++;
        SendFromUART_HEX(1,temp);
     }
}
#endif 
void TestMapData(void)
{
   /* TesATypetMapData(ZONE_LAT,0x6a);
    TesATypetMapData(ZONE_LONGT,0x52);
    TesATypetMapData(AREA_VALID,0x104);
    TesATypetMapData(OFT_CROSSINGDOT,0x0CC);
    TesATypetMapData(OFT_ELECEYESORT,0x088);
    TesATypetMapData(OFT_VECLIMSEC,0x10);
    TesATypetMapData(OFT_RADARSORT,0x10);
    TesATypetMapData(DATA_CROSSDOT,0x167a);
    TesATypetMapData(DATA_ELECEYESORT,0x02da);
    TesATypetMapData(DATA_VECLIMSEC,0x3c);
    TesATypetMapData(DATA_RADARSORT,0x30); 
    */
} 

#endif  

⌨️ 快捷键说明

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