我用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();
}
一周热门 更多>