UCOSIII 外部中断问题

2019-07-20 20:17发布

      我用STM32f407 GPIOC 控制 Max197 (ADC)采集数据,在没有UCOSIII的系统上用Max197外部中断 连GPIOC.13 ,在中断服务程序中读取 GPIOC0~7(连ADC数据总线线) 数值正常,
但在 UCOSIII系统下,外部中断能响应,单读取GPIOC.0~7的数值始终为“0", 不知道问题出在哪里? 感觉在UCOSIII再进入中断时,将GPIOC的状态改变了? 盼大神指教!!!
//启动max197采样程序
void WriteMax(u8 td)
{
  GPIO_ResetBits(GPIOC,GPIO_Pin_12);      //CS
   GPIOC->ODR= (GPIOC->IDR&0xff00)|0x60|td ;  
  GPIO_ResetBits(GPIOC,GPIO_Pin_11);    //WR
  __nop();
    GPIO_SetBits(GPIOC,GPIO_Pin_11);     //WR
   __nop();
  __nop();
  __nop();
  GPIOC->ODR= (GPIOC->IDR&0xff00)|0x50|td ;  
  __nop();
  __nop();
  __nop();
  __nop();
    GPIO_ResetBits(GPIOC,GPIO_Pin_11);    //WR
  __nop();
  GPIO_SetBits(GPIOC,GPIO_Pin_11);     //WR
  GPIO_SetBits(GPIOC,GPIO_Pin_12);      //CS  
   GPIOC->ODR=(GPIOC->IDR&0xff00)|0xff;   
}
//中断接收程序
void EXTI15_10_IRQHandler()
{
   OSIntEnter();   
  if(EXTI_GetITStatus(EXTI_Line13) != RESET)
  {   
    u8 adz0,adz1;
     GPIOC->ODR=(GPIOC->IDR&0xff00)|0xff;  
    GPIO_SetBits(GPIOC,GPIO_Pin_11);     //WR
    GPIO_ResetBits(GPIOC,GPIO_Pin_9);    //HBEN
    GPIO_ResetBits(GPIOC,GPIO_Pin_12);    //CS
    GPIO_ResetBits(GPIOC,GPIO_Pin_10);
    adz0=GPIOC->IDR&0x00ff;
    GPIO_SetBits(GPIOC,GPIO_Pin_10);
    __nop();   
    GPIO_SetBits(GPIOC,GPIO_Pin_9);      //HBEN
    GPIO_ResetBits(GPIOC,GPIO_Pin_10);
    adz1=GPIOC->IDR&0x000f;     
    GPIO_SetBits(GPIOC,GPIO_Pin_10);   
    GPIO_SetBits(GPIOC,GPIO_Pin_12);
    ccdz[sp]=adz1<<8|adz0;
    EXTI_ClearITPendingBit(EXTI_Line13);  
  }
   OSIntExit();  
}


0条回答

一周热门 更多>