打印

潜水7年第一贴。stm32的中断延迟是12周期么

[复制链接]
3161|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lllaaa|  楼主 | 2011-10-8 19:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lllaaa 于 2011-10-8 19:39 编辑

我测试出来第一条指令到了20周期了。不知道香水版主能不能帮忙科普一下。
别的不说先上测试代码



void ccc(uint32_t r0, uint32_t r1, uint32_t r2, uint32_t r3)
{   
    /* 此处由于ABI,寄存器已经被我赋值*/   
    while(r0);
}

int main(void)
{   
/* System clocks configuration ---------------------------------------------*/   
    RCC_Configuration();
    /* GPIO configuration ------------------------------------------------------*/
   GPIO_Configuration();       
   TIM_Configuration();

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12);               
/* Configure EXTI0 line */       
EXTI_InitStructure.EXTI_Line = EXTI_Line12;       
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                EXTI_InitStructure.EXTI_LineCmd = ENABLE;       
EXTI_Init(&EXTI_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        NVIC_Init(&NVIC_InitStructure);

     /* 让r0 r1 r2 r3变成我想要的值,死循环 */   
ccc(0x40010808,1<<7,0x40010808,1<<7);
}



然后中断处理程序里第一条指令就是给GPIO置位
  ALIGN
EXTI15_10_IRQHandler    PROC
                 EXPORT  EXTI15_10_IRQHandler  
                 STR R3, [R2, #8]   ;给PA7置1.


但是我量到PA12的上升沿和PA7的上升沿相差了20个周期如图


沙发
lllaaa|  楼主 | 2011-10-8 19:46 | 只看该作者
哦。忘了说。stm32f103c8t6 cpu跑在24Mhz

使用特权

评论回复
板凳
香水城| | 2011-10-8 20:13 | 只看该作者
1)请查一下执行你的中断程序里的第一条指令需要几个周期,肯定不是0个周期。
2)从设置端口的指令结束,至端口处电平发生变化,因为总线的延迟,需要4个时钟周期的时间。

使用特权

评论回复
地板
lllaaa|  楼主 | 2011-10-8 21:14 | 只看该作者
本帖最后由 lllaaa 于 2011-10-8 21:18 编辑

cortex-m3的文档上说str是1个周期的。
STR Rx,[Ry,#imm] is always one cycle. This is because the address generation is
performed in the initial cycle, and the data store is performed at the same time as
the next instruction is executing. If the store is to the store buffer, and the store
buffer is full, the next instruction is delayed until the store can complete. If the
store is not to the store buffer, such as to the Code segment, and that transaction
stalls, the impact on timing is only felt if another load or store operation is
executed before completion.
另外请问总线延迟这个时间在哪个资料上可以查到?多谢。

使用特权

评论回复
5
香水城| | 2011-10-9 11:05 | 只看该作者
不记得总线延迟时间在哪个资料上看到了,但这是一个事实。

使用特权

评论回复
6
lllaaa|  楼主 | 2011-10-9 13:44 | 只看该作者
但左算右算也拼不出多出来的那8个周期哇。

使用特权

评论回复
7
无冕之王| | 2011-10-9 22:39 | 只看该作者
楼主都潜水7年了:lol

使用特权

评论回复
8
lllaaa|  楼主 | 2011-10-10 13:30 | 只看该作者
呵呵。有另外一个id忘记叫啥了。所以只好用回这个

使用特权

评论回复
9
lllaaa|  楼主 | 2011-10-10 13:36 | 只看该作者
晚上回家试一试用sysclk计数器去测量一下到第一条isr指令的延迟

使用特权

评论回复
10
香水城| | 2011-10-10 13:40 | 只看该作者
但左算右算也拼不出多出来的那8个周期哇。
lllaaa 发表于 2011-10-9 13:44


对不起,我没有这么仔细地研究过,这个中断响应的12个周期是ARM核心的实现,由ARM的设计保证。

关于你那多出的8个周期,因为没有相应的资料,我只能做一个猜测:外部信号进入EXTI模块,产生了内部触发信号,这个内部触发信号进到Cortex-M核心有一定延迟,类似于输出信号的总线延迟。

为什么你要算这么精确?好奇吗?

使用特权

评论回复
11
lllaaa|  楼主 | 2011-10-10 13:43 | 只看该作者
业余爱好折腾折腾

想用gpio去实现usb时序。让低端的stm32也能有lowspeed usb功能。所以把c8t6降到24Mhz去做实验

使用特权

评论回复
12
香水城| | 2011-10-10 15:49 | 只看该作者
业余爱好折腾折腾

想用gpio去实现usb时序。让低端的stm32也能有lowspeed usb功能。所以把c8t6降到24Mhz去做实验
lllaaa 发表于 2011-10-10 13:43


精神可嘉;但是对于有流水线的CPU,这样做法将非常地累,:$

使用特权

评论回复
13
lllaaa|  楼主 | 2011-10-10 17:03 | 只看该作者
本帖最后由 lllaaa 于 2011-10-10 17:04 编辑

是的。同样的指令前后组合不同,消耗的周期不一样。

cortex-m3的文档又写得不是那么清楚。很多地方需要自己测时间

昨天刚刚搞定usb前导sync的读取,为了精确读这1个字节就折腾了将近一周。

使用特权

评论回复
14
mcuisp| | 2011-10-10 18:42 | 只看该作者
24M运行时,FLASH可以关闭预读,时序可以精确些。

使用特权

评论回复
15
hsbjb| | 2011-10-10 18:59 | 只看该作者
爱折腾才能搞好技术,很看好楼主

使用特权

评论回复
16
cy757| | 2011-10-11 12:34 | 只看该作者
我试过在72M的情况下使用示波器检测从下降沿开始到STM32响应大概经历了1.2uS左右。

使用特权

评论回复
17
香水城| | 2011-10-11 12:41 | 只看该作者
我试过在72M的情况下使用示波器检测从下降沿开始到STM32响应大概经历了1.2uS左右。
cy757 发表于 2011-10-11 12:34


你这个测试不如LZ的测试精确。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
lllaaa + 1
18
lllaaa|  楼主 | 2011-10-11 14:25 | 只看该作者
咦。咋结贴哇

使用特权

评论回复
19
香水城| | 2011-10-11 17:01 | 只看该作者
咦。咋结贴哇
lllaaa 发表于 2011-10-11 14:25


不给分的帖子,从一开始系统就会自动结帖。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

83

帖子

1

粉丝