S32K144(16)EWM
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的计数器会冻结
- 从停止模式退出有两种可能的方法:
- 重启退出停止模式时,EWM仍然处于禁用状态
- 当中断退出停止模式时,EWM将重新启用,计数器也重新启用
- 调试模式:进入调试模式对EWM没有影响。
- 如果在进入调试模式之前已经开启EWM,则EWM将保持开启状态。
- 如果在进入调试模式之前,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相关推荐
- 从零开始编写自己的C#框架(16)——Web层后端父类
从零开始编写自己的C#框架(16)--Web层后端父类 原文:从零开始编写自己的C#框架(16)--Web层后端父类 本章节讲述的各个类是后端系统的核心之一,涉及到系统安全验证.操作日志记录.页面与按 ...
- 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. ...
- 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C
在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种. (16)A.数据流和事务流 B.变换流和数据流 C.变换流和事务流 D.控制流和事务流 数据流的类型决定映射的方法.数据流有 ...
- C# 学习笔记(16)ComboBox下拉列表框宽度自适应
C# 学习笔记(16)ComboBox下拉列表框宽度自适应 当下拉列表框中内容宽度大于下拉列表框宽度时 下拉列表框不能将内容全部显示出来 可以在下拉时,对下拉列表框内容进行重绘 /// <sum ...
- 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation
台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- 『高级篇』docker之开发课程EdgeService(16)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之开发课程EdgeService(16) 课程的edgeService依赖于课程服务的dubbo服务,对 ...
- SpringBoot学习笔记(16):单元测试
SpringBoot学习笔记(16):单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小 ...
- 深度学习(16)TensorFlow高阶操作五: 张量限幅
深度学习(16)TensorFlow高阶操作五: 张量限幅 1. clip_by_value 2. relu 3. clip_by_norm 4. Gradient clipping 5. 梯度爆炸实 ...
最新文章
- Python代码运行不够流畅?看大神如何多角度优化!
- 用户都跑了,你却还分不清流失用户和流失率
- python numpy矩阵运算加速器 NumExpr
- 回溯时间是什么意思_《凡人修仙之仙界篇》分析时间法则的不同体现形式
- php v9 如何获取超级管理员权限,Windows8.1如何获取超级管理员权限
- 王道考研 计算机网络7 TCP/IP参考模型
- php 观察者模式怎么用,php怎么实现观察者模式
- 回调函数 相当于线程_C++屌屌的观察者模式-同步回调和异步回调
- easyui的因为url名和视图名相同出现上面的异常。
- 生活不可缺的46个搜索引擎
- 灰度MANA信托增持729.04万MANA,FIL持仓增长185%
- android Baseadapter 和 ViewHolder的使用
- Freemarker简单封装
- eclipse 使用心得
- lucene查询索引之Query子类查询——(七)
- 地铁线路项目-结对编程
- 特朗普签署《美国人工智能倡议》,释放了哪些重要信号?
- 数据结构:算法的时间复杂度和空间复杂度
- 阿里巴巴高并发架构到底多牛逼?是如何抗住淘宝双11亿级并发量?
- 元数据管理器中存在错误。 ID 为“DESKTOP-99BPLMI”的 server 中不存在 ID 为“T3DATA_ZYM”的 database,或用户没有访问该对象的权限。