[AT32 IDE] IAR调试中不同复位类型

[复制链接]
113|0
MCU学习帮 发表于 2025-10-11 14:30 | 显示全部楼层 |阅读模式
QuestionsIAR环境下调试有不同的复位类型,其中一些只复位内核不复位MCU外设的复位方式在特定情况下可能会造成仿真问题
Answer
以常用的AT_Link(CMSIS DAP)和Jlink为例:
1.     CMSIS DAP:
1)     Disabled (no reset):没有reset动作。
2)     Software:直接将CPU的PC指针重置到应用程序入口函数,相当于软复位。
3)     Hardware:通过翻转DAPLink的nSRST/nRESET引脚(一般接到MCUreset脚)来复位MCU。
4)     Core:借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位功能来复位Core。

5)     System:借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位和SYSRESETREQ位来同时复位Core和MCU外设模块。
2.     Jlink/J-Trace
1)     Normal:默认的复位策略,等同于Core and peripherals方式。
2)     Core:借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位功能来复位Core。
3)     Core and peripherals:借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位和 SYSRESETREQ位来同时复位Core和MCU外设模块。

4)     Reset Pin:通过拉低J-Link的RESET引脚(一般也会接到MCUreset脚)来复位MCU。
注意:
以上复位方式中,有几种不会复位MCU的外设,这在特定情况下会引起一些问题,比如:
RESET按钮选择为Core并执行后,代码跳转到main函数入口,变量值被复位,但是寄存器值不会被复位。
此时如果客户的代码里在用TMR触发ADC采样,使用DMA搬运,那么点击复位后ADC、触发源TMR均还是保持正常工作,即TMR还是按照既定周期触发ADC,ADC也一直在响应触发转换并产生DMA请求;
但用于ADC转换数据传输的DMA由于配置的非loopmode,在之前传输完设定counter笔数据后就保持为停止传输状态;

重新启动运行后,代码从头执行,当执行完dma_config后(即重新配置了DMA的counter),DMA会立即响应ADC挂起的DMA请求搬运数据,该次搬运数据为非预期的,因此会导致adc1_ordinary_valuetab(DMA搬运ADC数据到该数组)内存储的数据出现错位现象。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部