• 大小: 20KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: 其他
  • 标签: DMA  

资源简介

基于飞思卡尔单片机K60的OV7620数字摄像头DMA读写程序

资源截图

代码片段和文件信息

/**
* --------------基于“拉普兰德K60底层库V3“的工程(LPLD_OV7670)-----------------
* @file LPLD_OV7670.c
* @version 0.1
* @date 2013-9-29
* @brief 利用DMA模块,实现数字摄像头OV7670的图像读取。
*
* 版权所有:北京拉普兰德电子技术有限公司
* http://www.lpld.cn
* mail:support@lpld.cn
* 硬件平台:  LPLD K60 Card / LPLD K60 Nano
*
* 本工程基于“拉普兰德K60底层库V3“开发,
* 所有开源代码均在“lib“文件夹下,用户不必更改该目录下代码,
* 所有用户工程需保存在“project“文件夹下,以工程名定义文件夹名,
* 底层库使用方法见相关文档。 
*
*/
#include “common.h“
#include “DEV_SCCB.h“

/****************************************
说明:
*将MiniUSB线插入RUSH Kinetis开发板的USB
插座,并连接至电脑USB接口。
*将OV7670上位机波特率设置为115200
*使用上位机查看运行结果
****************************************/

//图像宽度
#define H 250
//图像高度
#define V 200
#define PHOTO_SIZE H*V

void porta_isr(void);
void portb_isr(void);
void gpio_init(void);
void dma_init(void);

uint8 ov7670_init();
void delay(void);

GPIO_InitTypeDef pta_init;
GPIO_InitTypeDef ptb_init;
GPIO_InitTypeDef pte_init;
GPIO_InitTypeDef ptd_init;
DMA_InitTypeDef dma_init_struct;

uint8 Pix_Data[PHOTO_SIZE];       //采集50行 200列的图像数据  
uint32 V_Cnt;                     //行采集计数
uint8 Is_DispPhoto;               //图像发送标志

/********************************************************************/
void main (void)
{
 
  //关闭全局中断
  DisableInterrupts;
  
  ov7670_init();
  delay();
  
  V_Cnt=0;          //行计数
  Is_DispPhoto=0;   //显示图像
  
  gpio_init();
  dma_init();
  
  //使能PORTA、PORTB中断
  enable_irq(PORTB_IRQn);
  enable_irq(PORTA_IRQn);
  //使能全局中断
  EnableInterrupts;
  
  
  while(1)
  {
    
    if(Is_DispPhoto==1)
    {   
      Is_DispPhoto = 0;
      //显示或发送图像数据
      //可根据上位机软件自行修改此处
      
      //清PORTA中断标志
      LPLD_GPIO_ClearIntFlag(PORTA);
      //使能PORTA中断
      enable_irq(PORTA_IRQn);
      
    } 
    
  } 
}

void gpio_init()
{
  //OV数据口初始化:PTD8~PTD15
  ptd_init.GPIO_PTx = PTD;
  ptd_init.GPIO_Dir = DIR_INPUT;
  ptd_init.GPIO_Pins = GPIO_Pin8_15;
  ptd_init.GPIO_PinControl = IRQC_DIS | INPUT_PULL_DIS;
  LPLD_GPIO_Init(ptd_init);
  
  //OV行信号接口初始化:PTB3-H
  ptb_init.GPIO_PTx = PTB;
  ptb_init.GPIO_Dir = DIR_INPUT;
  ptb_init.GPIO_Pins = GPIO_Pin3;
  ptb_init.GPIO_PinControl = IRQC_RI|INPUT_PULL_DOWN;
  ptb_init.GPIO_Isr = portb_isr;
  LPLD_GPIO_Init(ptb_init); 
  
  //OV场信号接口初始化:PTA5-V
  pta_init.GPIO_PTx = PTA;
  pta_init.GPIO_Dir = DIR_INPUT;
  pta_init.GPIO_Pins = GPIO_Pin5;
  pta_init.GPIO_PinControl = IRQC_RI|INPUT_PULL_DOWN;
  pta_init.GPIO_Isr = porta_isr;
  LPLD_GPIO_Init(pta_init); 
  
  //OV PCLK信号接口初始化:PTE6-PCLK
  pte_init.GPIO_PTx = PTE;
  pte_init.GPIO_Pins = GPIO_Pin6;
  pte_init.GPIO_Dir = DIR_INPUT;
  pte_init.GPIO_PinControl = IRQC_DMARI | INPUT_PULL_DIS;
  LPLD_GPIO_Init(pte_init); 
  
}

void dma_init()
{
  //DMA参数配置
  dma_init_struct.DMA_CHx = DMA_CH0;    //CH0通道
  dma_init_struct.DMA_Req = PORTE_DMAREQ;       //PORTE为请求源
  dma_init_struct.DMA_MajorLoopCnt = H; //主循环计数值:行采集点数,宽度
  dma_init_struct.DMA_MinorByteCnt = 1; //次循环字节计数:每次读入1字节
  d

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-10-09 23:35  33-(DMA)LPLD_OV7670\
     目录           0  2013-10-09 23:35  33-(DMA)LPLD_OV7670\app\
     文件        3091  2013-10-04 17:53  33-(DMA)LPLD_OV7670\app\k60_card.h
     文件        5190  2013-10-04 16:11  33-(DMA)LPLD_OV7670\app\LPLD_OV7670.c
     目录           0  2013-11-04 18:54  33-(DMA)LPLD_OV7670\iar\
     文件         169  2013-10-04 15:05  33-(DMA)LPLD_OV7670\iar\LPLD_OV7670.eww
     文件      125429  2013-11-04 18:53  33-(DMA)LPLD_OV7670\iar\LPLD_OV7670_K60.dep
     文件       94871  2013-10-04 15:05  33-(DMA)LPLD_OV7670\iar\LPLD_OV7670_K60.ewd
     文件       84290  2013-11-04 18:53  33-(DMA)LPLD_OV7670\iar\LPLD_OV7670_K60.ewp

评论

共有 条评论