龙空技术网

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

嵌入式实操 77

前言:

现时同学们对“周立功使用教程”可能比较关切,看官们都需要学习一些“周立功使用教程”的相关知识。那么小编同时在网络上汇集了一些关于“周立功使用教程””的相关资讯,希望同学们能喜欢,你们一起来学习一下吧!

本文主要是通过迁移的思维,记录本人初次使用周立功的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 */

标签: #周立功使用教程