智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1546|回复: 0
打印 上一主题 下一主题

求教我的摄像头程度有哪错误吗?串口不能向上位机传输数据,,,

[复制链接]

6

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
威望
146
贡献
94
兑换币
88
注册时间
2013-3-21
在线时间
33 小时
毕业学校
中原工学院信息商务学院
跳转到指定楼层
1#
发表于 2013-5-24 16:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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]);
                }
        }
    }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-28 14:17 , Processed in 0.068338 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表