注册 登录
查看: 492|回复: 2

[平衡组] 图像采集与直立加到一起程序就不进定时器了。

[复制链接]
发表于 2014-6-12 22:44:13 | 显示全部楼层 |阅读模式
图像采集与直立加到一起程序就不进定时器了,或者说是定时器里面的程序就不运行了;
第一:定时器初始化
  1. void My_Pit_Init(void)
  2. {
  3.     pit_init_ms(PIT0, 1);                               //定时器初始化     
  4.     set_vector_handler(PIT_VECTORn,PIT_Handler);    //设置PIT0的中断复位函数为 PIT0_IRQHandler
  5.     enable_irq (PIT_IRQn);                              //使能PIT0中断
  6. }
第二中断初始化
  1. void My_NVIC_Init(void)
  2. {
  3.     NVIC_SetPriority(PORTA_IRQn, 0);
  4.     // NVIC_SetPriority(PORTC_PORTD_IRQn, 2);
  5.     NVIC_SetPriority(PIT_IRQn, 1);
  6. }
第三:定时器内部执行函数
  1. void PIT_Handler(void)
  2. {
  3.     if(PIT_TFLG(PIT0) == 1)             //判断是否 PIT0 进入中断
  4.     {
  5.         DisableInterrupts;
  6.         PIT_Flag_Clear(PIT0);                    //PIT中断同时对PIT0 PIT1有效
  7. /******************中断程序开始*****************/
  8.         volatile static unsigned char times = 0;
  9.         times++;
  10.         
  11.         switch(times)
  12.         {
  13.           case 1:
  14.             AD_Calculate();             //陀螺仪及加速度计处理
  15.             led(LED0, LED_ON);
  16.             led(LED1, LED_OFF);
  17.             led(LED2, LED_OFF);
  18.             led(LED3, LED_OFF);
  19.             break;
  20.             
  21.           case 2:
  22. //            Speed_Calculate(angle,Gyro_Now);
  23.             Pulse_Calculate();            
  24.           led(LED0, LED_OFF);
  25.           led(LED1, LED_ON);
  26.           led(LED2, LED_OFF);
  27.           led(LED3, LED_OFF);
  28.             break;
  29.             
  30.           case 3:
  31.           led(LED0, LED_OFF);
  32.           led(LED1, LED_OFF);
  33.           led(LED2, LED_ON);
  34.           led(LED3, LED_OFF);
  35.             break;
  36.             
  37.           case 4:
  38.             times = 0;
  39.           led(LED0, LED_OFF);
  40.           led(LED1, LED_OFF);
  41.           led(LED2, LED_OFF);
  42.           led(LED3, LED_ON);
  43.             
  44.             break;
  45.         }
  46. /******************中断程序结束*****************/
  47. //  PIT_Flag_Clear(PIT0);           //清中断标志位      
  48. //        enable_irq(PIT_IRQn);
  49.           EnableInterrupts;
  50.     }
  51. }
定时器中断内部的switch中的LED 控制相当于流水灯;但是如果我把
  1. AD_Calculate();
这个函数注释掉程序就能正常运行;后来发现是AD_Calculate()中的
  1. i = adc_once(adcn_ch, bit);
这句AD采样程序导致程序进入不了定时器如果我将i = adc_once(adcn_ch, bit);换成i = 123;//123是随便赋值的,程序就能正常运行;

当然,上述程序是我加入摄像头图像采集后才出问题的;单独的下载直立控制或者摄像头程序进去都能正常工作;但是程序融合到一块就有问题了。不知道其他大神有没有遇到类似的问题,帮帮忙啊!就是因为这个原因,今年的省赛也没能参加,到现在还没有解决。真心希望各位帮帮忙,谢谢!

摄像头初始化(OV7620 使用DMA)



回复

使用道具 举报

发表于 2014-6-13 07:55:42 | 显示全部楼层
摄像头+ DMA ,和 ADC 采集会导致 没法进定时中断?

试试调一下频率,看看行不行。这问题太异常,没遇到过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-13 10:33:41 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-13 07:55
摄像头+ DMA ,和 ADC 采集会导致 没法进定时中断?

试试调一下频率,看看行不行。这问题太异常,没遇到 ...

我们使用的是KL26哦!
回复 支持 反对

使用道具 举报

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

本版积分规则

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