1、EWM和WDOG的区别

内部看门狗:看门狗是对单片机的CPU和外设进行复位的内部看门狗,通常用于监控嵌入式软件的流程和执行,在一个单片机。看门狗由一个计数器组成,如果允许它溢出,则强制执行内部复位

所以为了安全起见,有一个冗余的看门狗系统,即外部看门狗监控(EWM), EWM与内部看门狗的区别在于它不复位MCU的CPU和外围设备。EWM提供一个独立的EWM_OUT_b信号将外部电路复位或置于安全模式。一个可选的外部输入EWM_in是允许对EWM_OUT_b信号进行额外的控制。

2、EWM模块的特点

  • 独立的LPO_CLK时钟源
  • 可编程超时时间,由EWM_LPO_CLK的数量指定
  • 一个输出端口,EWM_OUT_b,当断言被用来重置或放置外部电路进入安全模式。
  • 一个输入端口,EWM_in,允许外部电路控制断言EWM_OUT_b信号。
  • 在15个外围总线时钟周期内,向EWM刷新寄存器写入0xB4和0x2C的值

3、EWM模式

  • STOP模式:当EWM处于停止模式时,CPU不回刷新EWM,在停止模式时,EWM的计数器会冻结
  1. 从停止模式退出有两种可能的方法:
  2. 重启退出停止模式时,EWM仍然处于禁用状态
  3. 当中断退出停止模式时,EWM将重新启用,计数器也重新启用
  • 调试模式:进入调试模式对EWM没有影响。
  1. 如果在进入调试模式之前已经开启EWM,则EWM将保持开启状态。
  2. 如果在进入调试模式之前,EWM已被关闭,则EWM将保持关闭状态

4、EWM信号

EWM_in

EWM输入,用于外部安全电路的安全状态。

EWM_in电平是通过EWM_CTRL[ASSIN]位可编程的。默认低电平

EWM_OUT_b

EWM复位信号

5、EWM寄存器

EWM寄存器默认是8bit的,16bit和32bit不适用

5.1、CTRL:Control Register

注意:EWMEN、ASSIN和INEN在CPU复位后写入一次,多次写入会造成总线错误

0

EWMEN

EWM启用。

设置此位后,将使能EWM模块。这将重置EWM计数器为零,并取消EWM_OUT_b信号。如果不设置该位,则保持EWM模块处于禁用状态。它不能重新启用,直到由于这个位的写一次性质,下一次重置。

1

ASSIN

EWM_in的断言状态选择。

2

INEN

输入启用。

设置此位时,将启用EWM_in端口

3

INTEN

中断使能

当设置EWM_OUT_b并断言时,将生成一个中断请求。de-assert中断请求时,用户应该写0来清除此位

5.2、SERV:Service Register

此寄存器提供了CPU到EWM的接口,只读

0-7

SERVICE

EWM刷新机制要求CPU向服务寄存器写入两个值:第一个数据字节后面是0xB4的第二个数据字节0x2C

5.3、CMPL:Compare Low Register

设置最小刷新时间,在CPU复位后写入一次,多次写入会造成总线错误

5.4、CMPH:Compare High Register

设置最大刷新时间,在CPU复位后写入一次,多次写入会造成总线错误

如果设置CMPH=0xFF,那么EWM计数器永远不会触发,因为触发条件EWM计数器需要大于CMPH值

6、代码

void PORT_init (void)
{/*!* Pins definitions* ===================================================** Pin number        | Function* ----------------- |------------------* PTA2              | [EWM_OUT_b]*/PCC->PCCn[PCC_PORTA_INDEX] = PCC_PCCn_CGC_MASK;  /* Enable clock for PORT A      */PORTA->PCR[2] |= PORT_PCR_MUX(4);                 /* Port A2: MUX = ALT4, EWM_OUT_b  *//* External Watchdog Monitor Output */
}
void Enable_Interrupt(uint8_t vector_number)
{S32_NVIC->ISER[(uint32_t)(vector_number) >> 5U] = (uint32_t)(1U << ((uint32_t)(vector_number) & (uint32_t)0x1FU));S32_NVIC->ICPR[(uint32_t)(vector_number) >> 5U] = (uint32_t)(1U << ((uint32_t)(vector_number) & (uint32_t)0x1FU));
}
void EWM_init(void)
{/*!*EWM clocking*==========================================*/PCC->PCCn[PCC_EWM_INDEX] |= PCC_PCCn_CGC_MASK;EWM->CLKPRESCALER = 127;  /*! Prescaled clock frequency =*   low power clock source frequency / ( 1 + CLK_DIV ) =*  LPO 128KHz / 128 = 1KHz.*//*!* The EWM compare registers are used to create a* refresh window to refresh the EWM module.*/EWM->CMPH = 0xFE;   /* When the counter passes this value outb will be asserted */EWM->CMPL = 0x0F; /* Refresh window is [15ms - 255ms]. */EWM->CTRL |= EWM_CTRL_INTEN_MASK|    /* Enable interrupt */EWM_CTRL_EWMEN_MASK;  /* Enable EWM */
}void WDOG_EWM_IRQHandler(void)
{/* EWM_OUT_b is asserted */EWM->CTRL &= ~EWM_CTRL_INTEN_MASK;  /* de-assert interrupt request *//* does not affect EWM_OUT_b. */
}int main(void)
{WDOG_disable();        /* Disable WDOG */SOSC_init_8MHz();      /* Initialize system oscilator for 8 MHz xtal */SPLL_init_160MHz();    /* Initialize SPLL to 160 MHz with 8 MHz SOSC */NormalRUNmode_80MHz(); /* Init clocks: 80 MHz sysclk & core, 40 MHz bus, 20 MHz flash */PORT_init();            /* Configure ports */EWM_init();        /* Initialize EWM. */Enable_Interrupt(WDOG_EWM_IRQn);   /* Enable EWM interrupt. */while(1){}return 0;
}

CLKPRESCALER:Clock Prescaler Register

开启EWM之前,需要先填写预分频值,在CPU复位后写入一次,多次写入会造成总线错误

S32K144(16)EWM相关推荐

  1. 从零开始编写自己的C#框架(16)——Web层后端父类

    从零开始编写自己的C#框架(16)--Web层后端父类 原文:从零开始编写自己的C#框架(16)--Web层后端父类 本章节讲述的各个类是后端系统的核心之一,涉及到系统安全验证.操作日志记录.页面与按 ...

  2. E1载波的数据速率是(16)Mb/s,E3载波的数据速率是(17)Mb/s。答案】B D

    E1载波的数据速率是(16)Mb/s,E3载波的数据速率是(17)Mb/s. (16)A.1.544 B.2.048 C.8.448 D.34.368 (17)A.1.544 B.2.048 C.8. ...

  3. 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C

    在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种. (16)A.数据流和事务流 B.变换流和数据流 C.变换流和事务流 D.控制流和事务流 数据流的类型决定映射的方法.数据流有 ...

  4. C# 学习笔记(16)ComboBox下拉列表框宽度自适应

    C# 学习笔记(16)ComboBox下拉列表框宽度自适应 当下拉列表框中内容宽度大于下拉列表框宽度时 下拉列表框不能将内容全部显示出来 可以在下拉时,对下拉列表框内容进行重绘 /// <sum ...

  5. 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation

    台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...

  6. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  7. 『高级篇』docker之开发课程EdgeService(16)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之开发课程EdgeService(16) 课程的edgeService依赖于课程服务的dubbo服务,对 ...

  8. SpringBoot学习笔记(16):单元测试

    SpringBoot学习笔记(16):单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小 ...

  9. 深度学习(16)TensorFlow高阶操作五: 张量限幅

    深度学习(16)TensorFlow高阶操作五: 张量限幅 1. clip_by_value 2. relu 3. clip_by_norm 4. Gradient clipping 5. 梯度爆炸实 ...

最新文章

  1. Python代码运行不够流畅?看大神如何多角度优化!
  2. 用户都跑了,你却还分不清流失用户和流失率
  3. python numpy矩阵运算加速器 NumExpr
  4. 回溯时间是什么意思_《凡人修仙之仙界篇》分析时间法则的不同体现形式
  5. php v9 如何获取超级管理员权限,Windows8.1如何获取超级管理员权限
  6. 王道考研 计算机网络7 TCP/IP参考模型
  7. php 观察者模式怎么用,php怎么实现观察者模式
  8. 回调函数 相当于线程_C++屌屌的观察者模式-同步回调和异步回调
  9. easyui的因为url名和视图名相同出现上面的异常。
  10. 生活不可缺的46个搜索引擎
  11. 灰度MANA信托增持729.04万MANA,FIL持仓增长185%
  12. android Baseadapter 和 ViewHolder的使用
  13. Freemarker简单封装
  14. eclipse 使用心得
  15. lucene查询索引之Query子类查询——(七)
  16. 地铁线路项目-结对编程
  17. 特朗普签署《美国人工智能倡议》,释放了哪些重要信号?
  18. 数据结构:算法的时间复杂度和空间复杂度
  19. 阿里巴巴高并发架构到底多牛逼?是如何抗住淘宝双11亿级并发量?
  20. 元数据管理器中存在错误。 ID 为“DESKTOP-99BPLMI”的 server 中不存在 ID 为“T3DATA_ZYM”的 database,或用户没有访问该对象的权限。

热门文章

  1. HTML5期末大作业:商城网站设计——防锤子手机商城官网首页模板(HTML+CSS+JavaScript ) 电商网页HTML代码
  2. 德汇律师事务所任命Ray Liu为北京办事处主管
  3. 基于Nginx的媒体服务器技术-线上公开课
  4. 【Nodejs】文件读写综合案例
  5. 2020年淘宝店铺“补单”失败的原因分析总结
  6. 你怎么会懂?字节跳动是如何落地微前端的?
  7. 支付清算体系介绍及案例说明
  8. 微信小程序项目真机调试图片不显示处理
  9. 大师级设计师才会的这个CAD技巧,你会吗?
  10. R语言——学习笔记(一)