注册 登录
查看: 446|回复: 7

摄像头采集影响了编码器对速度的采集

[复制链接]
发表于 2014-7-12 15:14:04 | 显示全部楼层 |阅读模式
程序采用1路ftm和一路lptmr采集编码器数据,但是由于摄像头采集会使中断时间边长(实测,摄像头采集的时候中断时间会变为6ms),采集程序如下:
  g_iCarLeftPulse = lptmr_pulse_get();                  //保存脉冲计数器计算值
  g_iCarRightPulse = FTM_QUAD_get(FTM2);
  FTM_QUAD_clean(FTM2);
  lptmr_pulse_clean();                                    //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)

摄像头采集放在main函数中,中断优先级设为了
  NVIC_SetPriorityGrouping(4);            //设置优先级分组,4bit 抢占优先级,没有亚优先级
  
  NVIC_SetPriority(PORTA_IRQn,0);         //配置优先级
  NVIC_SetPriority(PORTE_IRQn,1);         //配置优先级
  NVIC_SetPriority(PIT0_IRQn,2);          //配置优先级
  NVIC_SetPriority(DMA0_IRQn,3);          //配置优先级
  
回复

使用道具 举报

发表于 2014-7-12 15:19:04 | 显示全部楼层
摄像头的中断时间是很短的啊,除非你把采集也放在中断里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-12 15:25:17 | 显示全部楼层
main函数是这样的。
void main()
{
  DisableInterrupts;
  AllInit();
  InterruptInit();
  
  EnableInterrupts;
  enable_irq (PIT0_IRQn);                                 //使能PIT0中断
  
  while(1)
  {
    camera_get_img();                                   //摄像头获取图像
    img_extract(*img, imgbuff, CAMERA_SIZE);          //解压为灰度图像,方便发送到上位机显
    nrf_msg_tx(COM_IMG,nrf_tx_buff);
    while(nrf_tx_state() == NRF_TXING);             //等待发送完成
}
每次进中断的时候执行  gpio_turn(PTB20)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-12 15:25:44 | 显示全部楼层
本帖最后由 HoS 于 2014-7-12 15:27 编辑

示波器的图像是

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-7-12 15:38:33 | 显示全部楼层
HoS 发表于 2014-7-12 15:25
main函数是这样的。
void main()
{

进去的是否反转一下,退出的时候反转一下,这样才知道进去的时间是多少啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-12 15:41:33 | 显示全部楼层
把优先级设为  NVIC_SetPriorityGrouping(4);            //设置优先级分组,4bit 抢占优先级,没有亚优先级
  
  NVIC_SetPriority(PORTA_IRQn,2);         //配置优先级
  NVIC_SetPriority(PORTE_IRQn,1);         //配置优先级
  NVIC_SetPriority(PIT0_IRQn,0);          //配置优先级
  NVIC_SetPriority(DMA0_IRQn,3);          //配置优先级

就正常了,但是采样回来的图有时候会出错,闪一下。
回复 支持 反对

使用道具 举报

发表于 2014-7-12 16:05:58 | 显示全部楼层
你用什么摄像头啊?
回复 支持 反对

使用道具 举报

发表于 2014-7-12 16:13:52 | 显示全部楼层
HoS 发表于 2014-7-12 15:41
把优先级设为  NVIC_SetPriorityGrouping(4);            //设置优先级分组,4bit 抢占优先级,没有亚优先级
...

出错,闪一下,是怎么闪法?
场中断的优先级,最好还是配置为最高。否则有可能反应不过来
回复 支持 反对

使用道具 举报

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

本版积分规则

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