注册会员
- 积分
- 97
- 威望
- 51
- 贡献
- 30
- 兑换币
- 29
- 注册时间
- 2017-4-10
- 在线时间
- 8 小时
- 毕业学校
- 新疆大学
|
用的OV7620摄像头,K60核心板,测试程序下载好了,硬件连接好了,用的蓝牙通信,但是在上位机上怎么也看不到图像,这是什么原因????求大神告知!!!!!已经困在这里好多天了…………
我的硬件连接是正确的,蓝牙配置和连接也是正确的,波特率配置也是正确的。测试程序中采集到的图像是存放在一个二维数组当中的,但是现在二维数组中没有任何数值!!!!
我的代码
#include "include.h"
#include "common.h"
extern uint8 Is_SendPhoto;
extern unsigned char Pix_Data[ROW][COL];
void vcan_sendware(uint8*wareaddr, uint32 waresize);
void main(void)
{
uint16 i,j;
uart_init(UART0,115200);
OV7620_Init();//摄像头相关IO初始化
//DELAY_MS(100);
while(1)
{
if(Is_SendPhoto ==1)//单幅图像采集完成
{
DisableInterrupts;//关总中断,不进行图像采集
uart_putchar(UART0,0xff);//发送帧头
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
if(Pix_Data[i][j]==255) Pix_Data[i][j]--;//防止出现对个帧头
uart_putchar(UART0,Pix_Data[i][j]);//发送像素点
}
}
EnableInterrupts;//开总中断,再次进行图像采集
}
// DELAY_MS(100);
//uart_putchar(UART5,'A');
}
}
#include "common.h"
#include "MK60_gpio.h"
#include "MK60_port.h"
#include "MK60_dma.h"
#include "OV7620.h"
#include "VCAN_SCCB.h"
void DMA_CH4_Handler(void);//DMA中断服务函数
void PORTC_IRQHandler(void);///行、场中断服务函数
uint16 V_Cnt=0;
uint8 Is_SendPhoto=0;
unsigned char Pix_Data[ROW][COL] ={1,1,1,1,1,1};
void OV7620_Init()
{
DisableInterrupts;//关总中断
gpio_init(PTE0, GPI,0); //摄像头数据传输的引脚 GPI改为GPO
gpio_init(PTE1, GPI,0);
gpio_init(PTE2, GPI,0);
gpio_init(PTE3, GPI,0);
gpio_init(PTE4, GPI,0);
gpio_init(PTE5, GPI,0);
gpio_init(PTE6, GPI,0);
gpio_init(PTE7, GPI,0);
SCCB_GPIO_init();//SCCB初始化
SCCB_WriteByte(0x11,0x03);//四分频
/*
SCCB_WriteByte(0x11,0x01);//二分频
SCCB_WriteByte(0x11,0x00);//不分频
SCCB_WriteByte(0x11,0x01); //地址0X11-中断四分频(1280*480) PCLK:166ns HREF:254.6us VSYN:133.6ms
SCCB_WriteByte(0x14,0x24); //地址0X14-QVGA(320*240) PCLK:332ns HREF:509.6us VSYN:133.6ms
SCCB_WriteByte(0x28,0x40); //地址0X28-黑白模式(320*240 PCLK:332ns HREF:127us VSYN:33.6ms
*/
//PTC8像素中断,行中断,场中断设置为输入状态
port_init(PTC18, ALT1 | IRQ_FALLING | PULLUP ); //场中断,上拉,上降沿触发中断
port_init(PTC19, ALT1 | IRQ_RISING | PULLDOWN ); //行中断,下拉,上降沿触发中断
// port_init(PTC8, ALT1 | IRQ_FALLING | PULLUP ); //像素中断
//配置中断复位函数
set_vector_handler(PORTC_VECTORn ,PORTC_IRQHandler);//设置PORTC外部中断的中断复位函数为 PORTC_IRQHandler
set_vector_handler(DMA4_VECTORn ,DMA_CH4_Handler);//设置DMA4的中断复位函数为 DMA_CH4_Handler
enable_irq(PORTC_IRQn);//使能PORTC中断,即开启行中断,PORTC的ISR中断号为89
// PORTC_IRQHandler();
EnableInterrupts;//开总中断
}
void DMA_CH4_Handler(void)
{
DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 (这样才能再次进入中断)
DMA_DIS(DMA_CH4); //采集完H个数据后进入这个DMA中断,停止DMA传输。行中断中打开DMA传输
/********************/
//串口调试用到
if(V_Cnt == ROW)
Is_SendPhoto = 1;
/*******************/
}
//行场中断
void PORTC_IRQHandler()
{
if((PORTC_ISFR & (1<<19))) //PTC18触发中断,行中断
{
PORTC_ISFR |= (1<<19); //写1清中断标志位
/**************用户任务**************************************************/
// if((++V_Cnt)%4 == 0) //判断该行数据是否需要,根据自己需要的行数自己设定判别条件
// {
V_Cnt++;
DMA_EN(DMA_CH4); //使能通道CHn 硬件请求
//}
}
//场中断
if(PORTC_ISFR & (1<<18)) //PTB0触发中断,场中断
{
PORTE_ISFR |= (1<<18); //写1清中断标志位
Is_SendPhoto = 0; //发送图像标志,串口调试要用
/**************用户任务*************************************************/
OV7620_DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTE_B0_IN, Pix_Data, PTC16, DMA_BYTE1, COL, DMA_rising_keepon);
//DMA_CH4_Handler();
//DMA通道4初始化,PTC16上升沿触发DMA传输,源地址为PTE_BYTE0_IN,
//目的地址为:Pix_Data ,每次传输1Byte,传输COL次后停止传输,目的地址保持不变,关闭通道CHn 硬件请求
V_Cnt=0; //行采集计数清零
Is_SendPhoto =0; //发送图像标志
}
}
|
|