中级会员
- 积分
- 416
- 威望
- 219
- 贡献
- 117
- 兑换币
- 124
- 注册时间
- 2014-11-3
- 在线时间
- 40 小时
- 毕业学校
- 南昌大学
|
这是我的图像采集程序 思路感觉是对的 调试了几天了 我是用串口采集图像的 但是串口助手一直没现象 检查过了 串口 连线都没问题 求大神帮我看看程序有什么问题
main.c
#include "common.h"
#include "include.h"
#include "isr.h"
void main(void)
{
DisableInterrupts;
u16 i,j;
exti_init(PORTA,29,rising_down); //行中断,PORTA29 端口外部中断初始化 ,上升沿触发中断,内部下拉
disable_irq(87); //行中断关闭
exti_init(PORTB,0,falling_down); //场中断,PORTB0 端口外部中断初始化 ,下降沿触发中断,内部下拉
uart_init(UART1,115200);
EnableInterrupts;
while(Is_SendPhoto)
{
if(1)
{
/*************************************************************************/
//直接发送灰度数据,上位机软件会把图像信息显示出来
disable_irq(87);
disable_irq(88); //关闭PORTB中断,即关闭场中断,防止串口发送图像数据进程被打乱
// 以下四句话是固定格式,是串口和上位机软件之间的协议
uart_putchar(UART1,0);
uart_putchar(UART1,255);
uart_putchar(UART1,1);
uart_putchar(UART1,0);
for(i=0;i<V;i++)
{
for(j=0;j<H;j++)
{
if(Pix_Data[i][j] <60)
{
uart_putchar(UART1,'0');
}
else
{
uart_putchar(UART1,'1');
}
}
uart_putchar(UART1,'\r');
uart_putchar(UART1,'\n');
}
uart_putchar(UART1,'\r');
uart_putchar(UART1,'\n');
}
}
}
isr.c
#include "common.h"
#include "include.h"
#include "isr.h"
unsigned int V_Cnt=0; //行采集计数
unsigned char Is_SendPhoto=0; //图像发送标志
unsigned char Pix_Data[80][200] = {0}; //采集V行 H列的图像数据
void DMA_CH4_Handler(void)
{
DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位
DMA_DIS(DMA_CH4); //采集完H个数据后进入这个DMA中断,停止DMA传输。行中断中打开DMA传输
/********************/
//串口调试用到
if(V_Cnt>=304)
{Is_SendPhoto = 1;
PTA17_OUT=~PTA17_OUT;}
/*******************/
}
/************************************************************************/
//晓克添加
//行中断处理函数
void PORTA_IRQHandler()
{
if((PORTA_ISFR & (1<<29))) //PTA29触发中断,行中断
{
PORTA_ISFR |= (1<<29); //写1清中断标志位
/**************用户任务**************************************************/
V_Cnt++;
if(V_Cnt<13)
{ }
else
{
if(V_Cnt%4 == 0) //判断该行数据是否需要,根据自己需要的行数自己设定判别条件
{
DMA_EN(DMA_CH4); //使能通道CHn 硬件请求
}
}
}
}
//场中断处理函数
void PORTB_IRQHandler()
{
if(PORTB_ISFR & (1<<0)) //PTB0触发中断,场中断
{
PORTB_ISFR |= (1<<0); //写1清中断标志位
V_Cnt=0;
Is_SendPhoto = 0; //发送图像标志
DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN, Pix_Data, PTC0, DMA_BYTE1, 200, DMA_rising_keepon);
//DMA通道4初始化,PTC0上升沿触发DMA传输,源地址为PTD_BYTE0_IN,目的地址为:Pix_Data ,每次传输1Byte,传输H次后停止传输,目的地址保持不变,关闭通道CHn 硬件请求
enable_irq(87);
//使能PORTA中断,即开启行中断,PORTA的ISR中断号为87 //行采集计数清零
}
}
|
|