注册 登录
查看: 722|回复: 12

kl26的DMA采集图像一直进不了中断怎么破

[复制链接]
发表于 2014-7-3 18:17:53 | 显示全部楼层 |阅读模式
如题大神快粗线
回复

使用道具 举报

发表于 2014-7-3 23:20:26 | 显示全部楼层
用我们的鹰眼驱动吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 09:53:30 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-3 23:20
用我们的鹰眼驱动吗?

不是啊,因为你们的那个里边没有行中断,只能一行一行的扫描,但是我们只需要45行啊
回复 支持 反对

使用道具 举报

发表于 2014-7-4 10:39:10 | 显示全部楼层
miss可可 发表于 2014-7-4 09:53
不是啊,因为你们的那个里边没有行中断,只能一行一行的扫描,但是我们只需要45行啊

DMA初始化,不要放在行中断里哦。

你把你的中断代码贴出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 11:38:35 | 显示全部楼层
  1. void DMA0_IRQHandler ()
  2. {
  3.   
  4.   DMA_IRQ_DIS(DMA_CH0);
  5.   DMA_IRQ_CLEAN(DMA_CH0);
  6.                      
  7. }
  8. void PORTA_IRQHandler()
  9. {
  10.    chang_isr();//场中断
  11. }

  12. void PORTC_PORTD_IRQHandler()
  13. {
  14.   hang_isr();//行中断
  15.   }


  16. void chang_isr()
  17. {
  18.     uint8 n;
  19.     n=4;
  20.     if(PORTD_ISFR&(1<<n))                            //检测PORTX的引脚PINX是否产生外部中断  PORTA_ISFR
  21.     {
  22.      PORTA_ISFR = ~0;                                //清标志
  23.      disable_irq(PORTA_IRQn);                        //关闭场中断
  24.      ImageStatus = IMAGE_START;                      //标记图像状态   开始采集
  25.      enable_irq(PORTC_PORTD_IRQn );                                 //使能行中断  端口还要确定啊啊啊啊啊???????

  26.      //DMA_IRQ_EN(DMA_CH0);
  27.     //可以添加指示灯
  28.     }
  29. }
  30. void hang_isr()
  31. {
  32.     uint8 m;
  33.     m=4;
  34.     //uint8 i=76;
  35.     if(PORTD_ISFR & (1 << m))
  36.     {
  37.         PORTD_ISFR = ~0;
  38.         //清中断标志位 while
  39.         vusHangCount++;                                     //CCD自身行
  40.          if((usGather[HANG_MAX-1]+1) == vusHangCount)
  41.          {
  42.             vusHangCount = 0;
  43.             usGetHang = 0;
  44.             enable_irq(PORTA_IRQn);                                             //开启场中断  这里需要改变端口
  45.             disable_irq(PORTC_PORTD_IRQn );                                     //关闭行中断   这里需要改变端口
  46.              DMA_DIS(DMA_CH0);                                                  //关闭通道请求
  47.             //DMA_DAR(DMA_CH0) =(uint32)ucImageData;                              // 设置目的地址
  48.              dma_repeat(DMA_CH0, (void *)&PTE_B2_IN, (void *)ucImageData,260);

  49.             ImageStatus = IMAGE_FINISH;                                       //标记图像状态   采集完成

  50.          }
  51.          else if(usGather[usGetHang] == vusHangCount)                         //如果是所需要的行,使能DMA传输
  52.          {

  53.             //while(i--);
  54.             //DMA_DCR_REG(4000_8000h,10Ch)= 0x10000;
  55.            // DMA_DCR0 |= 0x10000;
  56.             DMA_EN(DMA_CH0);                                          //使能通道CHn 硬件请求
  57.             DMA_IRQ_EN(DMA_CH0);

  58.             usGetHang++;                                             //所需要的行
  59.          }
  60.     }
  61. }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 15:39:35 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-4 10:39
DMA初始化,不要放在行中断里哦。

你把你的中断代码贴出来看看

大神,帮忙看看代码吧
回复 支持 反对

使用道具 举报

发表于 2014-7-4 21:17:33 | 显示全部楼层
miss可可 发表于 2014-7-4 15:39
大神,帮忙看看代码吧

chang_isr 是 A中断口的,怎么这函数内部由用 PORTD_ISFR ???
回复 支持 反对

使用道具 举报

发表于 2014-7-4 21:18:18 | 显示全部楼层
你的场中断管脚,到底是 A4还是D4?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 21:19:25 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-4 21:18
你的场中断管脚,到底是 A4还是D4?

是D4。。。今天改来改去的有点乱
回复 支持 反对

使用道具 举报

发表于 2014-7-4 21:26:18 | 显示全部楼层
miss可可 发表于 2014-7-4 21:19
是D4。。。今天改来改去的有点乱

那你把chang_isr 放到A端口,肯定有问题啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 21:41:35 | 显示全部楼层
我的PCB上是把场中断和行中断都接在了PTDA端口,现在我把场中断的管脚跳线接到了PTD4管脚,因为场中断来了之后要把场中断关闭行中断打开。我想问你一下 如果我不跳线的话,场中断行中断都在A端口,场中断来了之后我不再关闭场中断 还能不能采集图像
回复 支持 反对

使用道具 举报

发表于 2014-7-4 21:51:15 | 显示全部楼层
miss可可 发表于 2014-7-4 21:41
我的PCB上是把场中断和行中断都接在了PTDA端口,现在我把场中断的管脚跳线接到了PTD4管脚,因为场中断来了之 ...

用个标志位来判断是否需要处理场中断就好了。

不过场中断来了后,后续都是 行中断,等图像采集完,才会再来场中断的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-5 09:38:07 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-4 21:51
用个标志位来判断是否需要处理场中断就好了。

不过场中断来了后,后续都是 行中断,等图像采集完,才会 ...

好的,我再改改调一下,谢谢大神
回复 支持 反对

使用道具 举报

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

本版积分规则

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