基于RT1052 Awroks 使能看门狗记录(二)

本文主要是通过迁移的思维,记录本人初次使用周立功的Aworks框架进行BSP开发

1. 首先阅读原理图


正常来说看门狗超时,CPU会直接复位,有时会要求输出复位脉冲。这个功能可以使能,也可以不使能。
在Easy_arm_rt1052 开发板上面不使能复位脉冲也是可以复位成功的。

2. 使能Watchdong

在Awork框架下面,模块功能的开启都是在aw_prj_params.h文件内修改。而aw_prj_param_auto_cfg.h则是有依懒的,比如说,使能的LCD显示,一般都配置PWM控制背光,或者访问I2C总线访问EEPROM,需要使能其总线驱动。如下所示:

使能watchdog只需要在aw_prj_params.h 定义相关的宏即可,如下所示

3. 如何测试

在Aworks框架之下,周立功公司提供了对应的编程接口,本人参考AWorks标准API参考手册1.10.chm

static struct awbl_wdt wdt_dev;
void wdt_test(){
     aw_wdt_add(&wdt_dev, 1000);
	 aw_wdt_feed(&wdt_dev);
    // force trigger watchdog timeout;
    aw_mdelay(2000);
}

4. SDK BUG

在SDK 2.1.0 下,存在看门狗超时,系统复位不成功的问题。
在FAE支持下,通过如下补丁可解决改问题。在笔者的开发初期,只看了Aworks的编程手册,而没有了解其背后的设计框架,认为只要打开相应的宏,即可通过上层接口进行编程,后面跳入坑中。

Index: awbl_imx1050_flexspi.c
===================================================================
--- awbl_imx1050_flexspi.c	(revision 1)
+++ awbl_imx1050_flexspi.c	(working copy)
@@ -42,7 +42,7 @@
 *******************************************************************************/
 #if defined (__CC_ARM)
 extern unsigned int Image$$ER_FLEXSPI_DRV_START$$Base;   /*  __flexspi_drv_start__  */
-#define __FLEXSPI_DRV_START        (&Image$$ER_FLEXSPI_DRV_START$$Base)
+#define __FLEXSPI_DRV_START        (&Image$$ER_FLEXSPI_DRV_START$$Base)
 #elif defined (__GNUC__)
 extern int __flexspi_drv_start__;
 #define __FLEXSPI_DRV_START        (&__flexspi_drv_start__)
@@ -1673,12 +1673,27 @@
     } else {
         status |= (temp & 0x3c);
     }
+		/*
+		Note:change for watchdog timeout, but reboot halted, follow it the booting log:
+		
+		Application Start. 
+    feed wdt
+		force trigger watchdog timeout /r/n
+		AWorks for i.MX RT1050, build Oct 13 2020
 
+		AWorks SDK Version is 2.1.0 <2020-04-20>  
+		use panel: tft_panel 0 (480 x 272  16 bpp)
+		current time: 1970-01-01 00:08:51
+		P/IP i|AWorks->>> nitializing
+		Hostname set to AWorks
+		TCP/IP initialized
+		*/
+#if 0
     while ((status != temp) && (times-- > 0)) {
         p_this->serv_func.pfunc_flexspi_nor_flash_write_status(p_dev, status);
         p_this->serv_func.pfunc_flexspi_nor_flash_read_status(p_dev, &temp, 1);
     }
-
+#endif
    /* 进入四字节地址模式 */
    if (p_devinfo->dev_cfg.flash_size >= 16 *1024*1024) {
        __flexspi_nor_flash_enter_4byte(p_dev);

Index: flexram_config_for_armcc.S
===================================================================
--- flexram_config_for_armcc.S	(revision 1)
+++ flexram_config_for_armcc.S	(working copy)
@@ -35,7 +35,7 @@
 
 
 ; 配置GPR17中的FLEX RAM,全部为DTCM
-                ldr     r1, = 0xAAAAAAAA;
+                ldr     r1, = 0xAAAAAAA5;
                 ldr     r0, = REG_IOMUXC_GPR17;
                 str     r1,[r0];
                 dsb

Index: easy_arm_rt1052_flexspi_flash.sct
===================================================================
--- easy_arm_rt1052_flexspi_flash.sct	(revision 1)
+++ easy_arm_rt1052_flexspi_flash.sct	(working copy)
@@ -13,9 +13,9 @@
 #define     FLASH_SIZE              0x400000    /* flash size: 4M */ 
 
 #define     DATA_START              0x20000000  /* data start address */
-#define     DATA_SIZE               0x7F000     /* code size: 508k */
+#define     DATA_SIZE               0x6F000     /* code size: 444k */
 
-#define     RELOAD_CODE_START       0x2007F000  /* reload code start address */
+#define     RELOAD_CODE_START       0x2006F000  /* reload code start address */
 #define     RELOAD_CODE_SIZE        0x1000      /* reload code size: 4k */
 
 #define     STACK_START             DATA_START  /* stack start address */

原文地址:https://www.cnblogs.com/lianghong881018/p/15169430.html