这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » AT32MCUIAR调试中不同复位类型

共1条 1/1 1 跳转至

AT32MCUIAR调试中不同复位类型

菜鸟
2024-12-16 16:01:18     打赏

IAR环境下调试有不同的复位类型,其中一些只复位内核不复位MCU外设的复位方式在特定情况下可能会造成仿真问题。

以常用的AT_Link(CMSIS DAP)Jlink为例:

                     CMSIS DAP

1)      Disabled (no reset):没有reset动作。

2)      Software:直接将CPUPC指针重置到应用程序入口函数,相当于软复位。

3)      Hardware:通过翻转DAPLinknSRST/nRESET引脚(一般接到MCU reset脚)来复位MCU

4)      Core:借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位功能来复位Core

5)      System:借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位和SYSRESETREQ位来同时复位CoreMCU外设模块。


 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位来同时复位CoreMCU外设模块。

4)      Reset Pin:通过拉低J-LinkRESET引脚(一般也会接到MCU reset脚)来复位MCU

注意:

以上复位方式中,有几种不会复位MCU的外设,这在特定情况下会引起一些问题,比如:

RESET按钮选择为Core并执行后,代码跳转到main函数入口,变量值被复位,但是寄存器值不会被复位。

此时如果客户的代码里在用TMR触发ADC采样,使用DMA搬运,那么点击复位后ADC、触发源TMR均还是保持正常工作,即TMR还是按照既定周期触发ADCADC也一直在响应触发转换并产生DMA请求;

但用于ADC转换数据传输的DMA由于配置的非loop mode,在之前传输完设定counter笔数据后就保持为停止传输状态;

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





关键词: IAR调试    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]