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

📄 gxtm201.c

📁 微处理器在arm的编程
💻 C
字号:
#include"71x_type.h"
#include "uart.h"
extern void Delay_NS(u32 dly);

///////////////////////////////////////////////////////////////////////////////
u8 CAM_SendBuf[6];        //命令
u8 CAM_ReceiveBuf[600];
u8 CAM_ReceiveLen;
u16 UARTStatus;

////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendsleep(void) //休眠
{ 
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x09;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

/////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendend(void)  //发送结束
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0E;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0xF0;
  CAM_SendBuf[5]=0xF0;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

////////////////////////////////////////////////////////////////////////////////
void CAM_Sendanswer(void)//发送应答
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0E;
  CAM_SendBuf[2]=0x0D;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

////////////////////////////////////////////////////////////////////////////////
void CAM_SendNext(u16 count)//下一包
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0E;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=(u8)(count&0xFF);
  CAM_SendBuf[5]=(u8)((count>>8)&0xFF);
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20); 
}

/////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendsys(void)//发送同步
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0D;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendinit(void)//初始化
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x01;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x07;
  CAM_SendBuf[4]=0x05;
  CAM_SendBuf[5]=0x05;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

/////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendbag(void)//包大小
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x06;
  CAM_SendBuf[2]=0x08;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x02;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendcap(void)//快照
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x05;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

/////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendget(void)//获取图像
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x04;
  CAM_SendBuf[2]=0x01;
  CAM_SendBuf[3]=0x00; 
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}

/////////////////////////////////////////////////////////////////////////////////
void Clear_ReceiveBufA0(void)//清缓冲0
{
  u8 i;
  for(i=0;i<7;i++)
    CAM_ReceiveBuf[i]=0;
}

/////////////////////////////////////////////////////////////////////////////////
void Clear_ReceiveBufA1(void)//清缓冲1
{
  u8 i;
  for(i=0;i<600;i++)
    CAM_ReceiveBuf[i]=0;
}

////////////////////////////////////////////////////////////////////////////////
extern void ReceiveData()//Uart0中断数据处理
{
  u8 bRByte;
  u16 i=0,count=0;
 
  UART_ByteReceive(UART0,(u8 *)&bRByte,0xFF);
  CAM_ReceiveBuf[CAM_ReceiveLen]=bRByte;
   
   CAM_ReceiveLen=0;
   if((CAM_ReceiveBuf[0]==0xAA)&&(CAM_ReceiveBuf[1]==0x0D)&&(CAM_ReceiveBuf[5]==0x00)) 
    CAM_Sendanswer();//摄像头发同步命令主机返回应答
 
   if((CAM_ReceiveBuf[0]==0xAA)&&(CAM_ReceiveBuf[1]==0x0A)&&(CAM_ReceiveBuf[2]==0x01))
    CAM_SendNext(0);//开始传输第一包影像命令

   if((CAM_ReceiveBuf[0]==0x00)&&(CAM_ReceiveBuf[3]==0x02))//接收数据
   {                                                     
     ++count;//计数器
     UARTStatus=UART_ByteReceive(UART0,(u8 *)&CAM_ReceiveBuf,0xFF);
     UART_ByteSend(UART1,(u8 *)&CAM_ReceiveBuf);
     Delay_NS(18);
     //收到的数据帧、运行和超时有错误
     if(UARTStatus&(UART_FrameError|UART_OverrunError|UART_TimeOutIdle)) 
       //错重新接收
       UARTStatus=UART_ByteReceive(UART0,(u8 *)&CAM_ReceiveBuf,0xFF);
   
     if(count==512)//等于512字节发下一包  
     { //下一包                             
      Clear_ReceiveBufA1();//清缓冲1
      CAM_SendNext(++i);//发下一包
     } 
     
     if(count!=512)//不等于512字节
     {
      Delay_NS(300);//等待中断是否接收数据
      Clear_ReceiveBufA1();//清缓冲1
      CAM_SendNext(++i);//发下一包
      Delay_NS(300);//等待中断是否接收数据
      CAM_Sendend();//结束
      CAM_Sendsleep();//休眠
     }
   } 
} 

////////////////////////////////////////////////////////////////////////////////
u8 InitCamera(void)//初始化摄像头
{
  u8 i; 
  
  Clear_ReceiveBufA0();//清缓冲0
  for(i=0;i<60;i++)
  {
    CAM_Sendsys();   //同步命令
    Delay_NS(168);
    Clear_ReceiveBufA0();//清缓冲0
    if(CAM_ReceiveBuf[2]==0x0D)    
      { //判断是否是摄像头应答命令
        break;
      }
  }
  
  if(i==60)
    return 1;
  CAM_Sendinit();//发送初始化
  Delay_NS(168);
  if(CAM_ReceiveBuf[2]!=0x01) 
    return 1; 
  CAM_Sendbag();//包大小
  Delay_NS(168);
  if(CAM_ReceiveBuf[2]!=0x06)
    return 1;
  CAM_Sendcap();//快照
  Delay_NS(168);
  if(CAM_ReceiveBuf[2]!=0x05)
    return 1; 
  CAM_Sendget();//获取图像 
  Delay_NS(168);
  if(CAM_ReceiveBuf[2]!=0x04)
    return 1;

  return 0; //初始化成功
}

////////////////////////////////////////////////////////////////////////////////
extern void CompareCmd()//是不是想要的命令是发送图像数据
{
   u8 i,bRet; 
   u8 CAM_Receive1[9];
   u8 CAM_Receive2[9]={"%%CMD0L!!"};
   
   UART_StringReceive(UART1,(u8 *)&CAM_Receive1);//接收计算机发来的命令
   Delay_NS(168);
 
   for(i=0;i<9;i++)
    {
      if(CAM_Receive1[i]!= CAM_Receive2[i])     //不相等  
        break; 
     else
        if(CAM_Receive1[8]==CAM_Receive2[8])    //相等发送摄像头数据
        {
          bRet=InitCamera();     
          if(bRet==1)                         //摄像头初始化未成功
          break;
        }
   }
}


⌨️ 快捷键说明

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