智能车制作

标题: 求教我的摄像头程度有哪错误吗?串口不能向上位机传输数据,,, [打印本页]

作者: 刘亚鑫    时间: 2013-5-24 16:25
标题: 求教我的摄像头程度有哪错误吗?串口不能向上位机传输数据,,,
#include "common.h"
#include "HAL_MCG.H"
#include "HAL_FTM.h"
#include "HAL_LPTMR.H"
#include "HAL_GPIO.h"
#include "HAL_ADC.h"
#include "HAL_eDMA.h"
#include "HAL_UART.h"

//函数声明
void portb_handle(void);
void porte_handle(void);
void DelayUs(uint16 t);
void DelayMs(uint16 t);
void Send_Data(void);

//变量定义

#define SAMP_ROW_END   233
#define IMAGE_ROW       40
#define IMAGE_COLUMN  200
uint8 uc_FrameBuffer[IMAGE_ROW][IMAGE_COLUMN]={0};//图像数据缓存区uc_FrameBuffer[11200]
uint8 uc_ImageOver=FALSE;// 采集完成标志
uint8 ui_OddFieldFlag=FALSE;
uint8 send_F=TRUE;//发送完成标志,1表示发送完成

uint16 *Sample_point;
uint16 SampleRow[40] = {39,42,47,53,58,63,68,73,78,83,88,93,98,103,108,113,118,123,128,133,138,143,148,153,158,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233};      //前160行中要采集的行 曲线拟合 查表
                                  // 0  1  2  3  3  5  6  7    8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  31  32  33  34  35  36  37  38  39                  



#define DMA_MAX_NUM (hang_end)


LPLD_eDMA_Cfg_t User_Def_DMA_Init_a;//声明DMA初始化结构体

void main(void)
{
  DisableInterrupts;
  LPLD_PLL_Setup(PLL_200);      //设置PLL,启动系统始终,80MHZ
  ////打开所有IO 时钟
  LPLD_ADC_Init(ADC0, MODE_8, CONV_SING);  //AD0模块,8位精度,单端输入
  LPLD_ADC_Channel_Init(ADC0, 8 ,ADC_DMA_ENABLE,NULL);
  //DMA初始化结构体赋值
  User_Def_DMA_Init_a.Channelx          =DMA_CH0;               //设置为通道0,通道0采集第一路脉冲输出
  User_Def_DMA_Init_a.Peri_DmaReq       =ADC0_DMAREQ;          //ADC0产生DMA请求
  User_Def_DMA_Init_a.Minor_loop_Length =IMAGE_COLUMN;           //主循环次数
  User_Def_DMA_Init_a.Trans_bytesNum    =1;//每一次DMA请求后,传输的字节个数
  User_Def_DMA_Init_a.Source_Addr       =(uint32_t)&(ADC0_RA); //设置源地址,
  User_Def_DMA_Init_a.Source_Size       =DMA_SRC_8BIT;//源地址数据长度为:  8bit
  User_Def_DMA_Init_a.Source_Addr_inc   =ADDR_HOLD;//执行完一次DMA操作以后,地址不变
  User_Def_DMA_Init_a.Dest_Addr         =(uint32_t)(uc_FrameBuffer);      //
  User_Def_DMA_Init_a.Dest_Size         =DMA_SRC_8BIT; //数据长度为:  8bit
  User_Def_DMA_Init_a.Dest_Addr_inc     =ADDR_INCREASE;   //目的地址加1
  User_Def_DMA_Init_a.Dma_irqc          =2;//开DMA中断
  User_Def_DMA_Init_a.Dma_AutoClose     =0;

  LPLD_DMA_Init(&User_Def_DMA_Init_a);

  //LPLD_FTM0_PWM_Init(10000);//输入期望频率值  FTM1
  //LPLD_FTM0_PWM_Open(0, 0);//相应PWM通道开启,并配置占空比。PTC1引脚   电机
  //LPLD_FTM1_PWM_Init(50);//输入期望频率值  FTM1
  //LPLD_FTM1_PWM_Open(0, 75);//相应PWM通道开启,并配置占空比。pta8   舵机

  //LPLD_LPTMR_Init(MODE_PLACC, 0, LPTMR_ALT2, 0, NULL); //PTC5,脉冲累加,不使能中断   编码器

  LPLD_GPIO_Init(PTB, 1, DIR_INPUT, INPUT_PUP, IRQC_RI); //行中断接PTB1通道,输入,上拉电阻,上升沿中断,
  LPLD_GPIO_Init(PTE, 0, DIR_INPUT, INPUT_PUP, IRQC_FA); //场中断接PTE0通道,输入,上拉电阻,下升沿中断,
  LPLD_GPIO_SetIsr(PTB,portb_handle); //设置GPIO通道用户定义的中断服务函数,同时使能相应中断。
  LPLD_GPIO_SetIsr(PTE,porte_handle);

  LPLD_UART_Init(UART0, 38400);//PTB17

  EnableInterrupts;


  while(1)
  {
         if(uc_ImageOver==TRUE)
        {
          Send_Data();//串口发送169ms左右
         enable_irq(91);
          uc_ImageOver=FALSE;
       }
  }


}
void portb_handle()
{

    PORTB_ISFR    = (PORTB_ISFR|(1<<1));   //清中断
    static uint16 ui_SampleRow=0;   //采集的行数
    ui_SampleRow++;//行计数
    if(ui_SampleRow==*Sample_point) //判断是否为采集的行
      {
        DMA_ERQ|=DMA_ERQ_ERQ0_MASK;//使能通道0硬件DMA请求
      }
    if(ui_SampleRow>=SAMP_ROW_END)
      {
         uc_ImageOver=TRUE;
          ui_SampleRow=0;    //清采集图像上行
          disable_irq(88); //关行中断

      }
  }
void porte_handle()
{
    PORTE_ISFR    = (PORTE_ISFR|(1<<0));   //清中断
    LPLD_DMA_Init(&User_Def_DMA_Init_a);
    Sample_point=SampleRow;//赋地址指针
    enable_irq(88);//使能行中断

}
void DMA0_isr(void){
    DMA_INT|=DMA_INT_INT0_MASK;                     //清除通道0中断
    Sample_point++;
}
//延时函数
void DelayUs(uint16 t){
  uint16 i,j;
  for(j=0;j<t;j++){
    for(i=0;i<60;i++){
    }
  }
}


void DelayMs(uint16 t){
  uint16 i,j;
  for(j=0;j<t;j++){
    for(i=0;i<20000;i++){
    }
  }
}

void Send_Data(void)
    {
        uint8 l,r;
       
        for(r=0;r<IMAGE_ROW;r++)
        {
                for(l=0;l<IMAGE_COLUMN;l++)
                {
                        LPLD_UART_PutChar(UART0, uc_FrameBuffer[r][l]);
                }
        }
    }







欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2