在线时间0 小时
UID390778
ST金币0
蝴蝶豆0
注册时间2012-9-21
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
我用IAR Embedded Workbench for ARM 6.10软件编写串口中断程序
设置STM32为串口接收中断,串口在接收到PC机数据后,产生中断,并将数据发回PC机。
将程序下载到STM32上全速运行的话,接收及返回给PC机的数据均是正确的。
现在我想看STM32串口中断的运行过程,所以采用单步运行方式,进入串口中断程序后,再单步运行至出串口中断,
此时程序不知运行到哪里去了。这是为什么? 我的中断程序很简单,如下:
void USART1_IRQHandler(void)
{
asm("nop");
asm("nop");
u8 t=USART1->SR;
u8 i=USART1->DR;
USART1->DR=i+1;
u8 p=USART1->SR;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
另外有个问题:
我查看DISASSEMBLY 窗口对上中断程序的译码时,没有看到有PUSH指令,其内容如下:
USART1_IRQHandler:
0x800017c: 0xbf00 NOP
asm("nop");
0x800017e: 0xbf00 NOP
u8 t=USART1->SR;
0x8000180: 0xf8df 0x04b8 LDR.W r0, ??DataTable10_1 ; USART1_SR
0x8000184: 0x8800 LDRH r0, [r0]
u8 i=USART1->DR;
0x8000186: 0xf8df 0x14b8 LDR.W r1, ??DataTable10_2 ; USART1_DR
0x800018a: 0x8809 LDRH r1, [r1]
USART1->DR=i+1;
0x800018c: 0xb2c9 UXTB r1, r1
0x800018e: 0x1c4a ADDS r2, r1, #1
0x8000190: 0xf8df 0x34ac LDR.W r3, ??DataTable10_2 ; USART1_DR
0x8000194: 0x801a STRH r2, [r3]
u8 p=USART1->SR;
0x8000196: 0xf8df 0x24a4 LDR.W r2, ??DataTable10_1 ; USART1_SR
0x800019a: 0x8812 LDRH r2, [r2]
asm("nop");
0x800019c: 0xbf00 NOP
asm("nop");
0x800019e: 0xbf00 NOP
asm("nop");
0x80001a0: 0xbf00 NOP
asm("nop");
0x80001a2: 0xbf00 NOP
}
0x80001a4: 0x4770 BX lr
麻烦高手指教
|
|