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. 连接远程服务器CredSSP加密Oracle修正报错解决办法
  2. jQuery三级下拉菜单
  3. java电话计费系统_java 连接数据库开发的电话计费管理系统
  4. python和excel的结合新软件_Python处理Excel模块的对比分析!
  5. 关于安装oracle 11G R2 for Windows X64问题
  6. 遍历这些字符串,如果字符串没有包含数字的, * 就将字符串中的小写字母转成大写字母并打印字符串
  7. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-订阅主题)
  8. 编写批处理文件编译.Net工程
  9. 008-Shell 流程控制
  10. sm总线控制器找不到驱动程序_细说嵌入式系统下的驱动程序设计
  11. 春运期间长江海事局开辟四类运输“绿色通道”
  12. G.711U在RTP中的展现
  13. 全志F1C100S的BROM研究
  14. ubuntu系统安装socket服务器,ubuntu 服务器安装socket需要安装啥
  15. PHP5.5 ~ PHP7.2新特性总结
  16. [转载]W3C XML Schema 与文档类型定义
  17. 中西方对时间的差异_中西方文化交际中时间观的差异对比
  18. 移动端web app自适应布局探索与总结
  19. 计算机中信息的表示方法 教案,计算机中的数的表示教案
  20. Qt for Android获取手机序列号

热门文章

  1. rails 安装 ‘mysql2’ gem时的报错和解决方案
  2. OPPO 40万年薪招应届生,狂揽芯片人才;恶意差评小米新手机,一用户被判赔3万元;谷歌开源全同态加密通用转译器|极客头条
  3. 火山中文编程 -- 实现键盘HOOK
  4. 基于SSM的博客管理系统(mybatis逆向工程+简单CRUE)
  5. 2022年前端软件开发培训学校排名
  6. 检讨书生成微信小程序工具源码-拥有流量主安装搭建简单
  7. 分享快递批量查询高手工具,分析出问题原因或延误单号,赶紧收藏
  8. IOS8键盘模拟器无法显示,真机可以
  9. 恢复出厂设置后itms注册失败_宽带注册ITMS失败怎么弄呀?
  10. Mac安装oh-my-zsh网络错误curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.github解决方案