基于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 */