智能车制作
标题:
K60-OV762无法进入DMA中断
[打印本页]
作者:
°Destiny
时间:
2015-4-10 23:26
标题:
K60-OV762无法进入DMA中断
[attach]76038[/attach][attach]76039[/attach]
作者:
°Destiny
时间:
2015-4-10 23:27
#include "common.h"
#include "include.h"
#include "isr.h"
void main(void)
{
int i=0,j=0;
DisableInterrupts;
//变量初始化
V_Cnt=0; //行计数
Is_SendPhoto=0; //从串口发送图像
gpio_init(PORTA,14,GPO,0);
gpio_init(PORTA,15,GPO,0);
gpio_init(PORTA,16,GPO,1);
gpio_init(PORTA,17,GPO,1);
/*********************************************************************************/
exti_init(PORTA,29,rising_down); //行中断,PORTA29 端口外部中断初始化 ,上升沿触发中断,内部下拉
disable_irq(87); //行中断关闭
exti_init(PORTB,0,falling_down); //场中断,PORTB0 端口外部中断初始化 ,下降沿触发中断,内部下拉
uart_init(UART5,115200);
/*********************************************************************************/
DELAY_MS(1000);//延时1秒钟
EnableInterrupts;
for(;;)
{
GPIO_TURN(PORTA,17);
#ifdef TIAOSHI //串口调试
if(1==Is_SendPhoto)
{
/*************************************************************************/
//直接发送灰度数据,上位机软件会把图像信息显示出来
disable_irq(88); //关闭PORTB中断,即关闭场中断,防止串口发送图像数据进程被打乱
disable_irq(87);
//以下四句话是固定格式,是串口和上位机软件之间的协议
uart_putchar(UART5,0XFF);
for(i=0;i<V;i++)
{
for(j=0;j<H;j++)
{
if(Pix_Data[i][j]<255)
{
uart_putchar(UART5,Pix_Data[i][j]);
}
else
{
uart_putchar(UART5,254);
}
}
}
作者:
°Destiny
时间:
2015-4-10 23:28
void DMA_CH4_Handler(void)
{
PORTA_ISFR = ~0; //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
enable_irq(87); //采集了一行,便又使能PORTB行中断
DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 (这样才能再次进入中断)
DMA_IRQ_DIS(DMA_CH4); //采集完H个数据后进入这个DMA中断,停止DMA传输。行中断中打开DMA传输
/********************/
//串口调试用到
if(V_Cnt ==240) //行计数达到240
{
Is_SendPhoto = 1;
}
/*******************/
}
/************************************************************************/
//晓克添加
//行中断处理函数
void PORTA_IRQHandler()
{
if((PORTA_ISFR & (1<<29))) //PTB9触发中断,行中断
{
DMA_IRQ_DIS(DMA_CH4); //采集完H个数据后进入这个DMA中断,停止DMA传输。行中断中打开DMA传输
PORTA_ISFR |= (1<<29); //写1清中断标志位
/**************用户任务**************************************************/
if((++V_Cnt)%4 == 0) //判断该行数据是否需要,根据自己需要的行数自己设定判别条件
{
disable_irq(87);
DMA_IRQ_EN(DMA_CH4); //使能DMA4通道的传输完成中断
DMA_EN(DMA_CH4); //使能通道CHn 硬件请求
}
//可以在这里判断需要的数据是否已经采集完,可以设置一个标志位
/****************
*这里也可以进行数据处理
*****************/
/************************************************************************/
}
}
//场中断处理函数
void PORTB_IRQHandler()
{
if(PORTB_ISFR & (1<<0)) //PTA29触发中断,场中断
{
PORTB_ISFR |= (1<<0); //写1清中断标志位
Is_SendPhoto = 0; //发送图像标志,串口调试要用
/**************用户任务**************************************************/
//奇偶场判别
/*
FieldCounter++;
if(FieldCounter>= 2)
{
FieldCounter = 0;
}
*/
//奇场 采集图像
// if(FieldCounter == 0)
// {
DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN, Pix_Data, PTC0, DMA_BYTE1, H, DMA_rising_keepon);
//DMA通道4初始化,PTB8上升沿触发DMA传输,源地址为PTD_BYTE0_IN,目的地址为:Pix_Data ,每次传输1Byte,传输H次后停止传输,目的地址保持不变,关闭通道CHn 硬件请求
DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 (这样才能再次进入中断)
DMA_IRQ_EN(DMA_CH4); //使能通道CHn 硬件请求
//disable_irq(88);
enable_irq(87); //使能PORTB中断,即开启行中断,PORTB的ISR中断号为88
V_Cnt=0; //行采集计数清零
Is_SendPhoto =0; //发送图像标志
作者:
singsongs
时间:
2015-4-11 15:30
能共享下你的工程吗?谢谢
singsongs@foxmail.com
!
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2