在线时间0 小时
UID129343
ST金币0
蝴蝶豆0
注册时间2009-5-19
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
我用的是stm32,现在用的GPIOC1是人为模拟的信号,在实际项目中由外部信号源提供。
问题如下:我在主函数中对GPIOC1做如下操作产生脉冲信号,用GPIOC1触发GPIOC2中断,
中断设置为双边沿触发,然后上升沿置GPIOC8为高,下降沿置GPIOC8为低,GPIOC8输出脉冲与GPIOC1同步,问题是中断函数中采用寄存器直接操作GPIOC1和GPIOC8的上升沿之间的延时为450ns,即GPIOC8的上升沿滞后于GPIOC1上升沿450ns,如果中断程序里面采用调用库函数方式,则延时为850ns,能不能通过什么优化,使得采用寄存器操作,将450ns的延时再降低一点?注释:我单独将GPIOC2设置为上升沿触发,即在中断中无需判断上升沿,直接置GPIOC8为高,这样做延时也有350ns.还有没有降低的余地?
// 主函数操作:
GPIO_SetBits(GPIOC,GPIO_Pin_1); //置高
delay();
GPIO_ResetBits(GPIOC,GPIO_Pin_1);//置低
中断处理函数:
void EXTI2_IRQHandler(void)
{
if ((GPIOC->IDR & GPIO_Pin_2)) //上升沿
GPIOC->BSRR = GPIO_Pin_8;
else if(!(GPIOC->IDR & GPIO_Pin_2)) // 下降沿
GPIOC->BRR = GPIO_Pin_8;
EXTI->R = EXTI_Line2;
} |
|