当前位置: 首页 > news >正文

S32K312 RTD 4.0.0 版本 OCU 例程配置流程说明

一、前言

由于 RTD 4.0.0 版本并没有 S32K312 相关例程,本文基于已有的 S32K344 OCU 例程,新建 S32K312 工程,讲解 OCU 例程的相关配置流程。

二、基本概念

  1. OCU(Output Compare Unit – 输出比较单元)本质上是一个计数器,计数器逐一累加直到达到预设值,达到预设值后计数器会清零,重新开始累加,循环往复。
  2. OCU 配置需要一个绑定到一个可用硬件通道的逻辑通道,当比较匹配发生(即计数器达到预设值)时,会触发一个硬件中断和一个输出引脚的状态改变(电平翻转)。
  3. OCU 逻辑通道包含计数器预设值的定义,最大计数器值(一般为 65535),通知回调到用户定义的函数、硬件通道指定引脚的行为和预分频器值(可选第二个预分频器)的设置,如下图 1 所示:

图 1 OCU 逻辑通道配置

三、OCU 配置流程

  1. OCU 配置需要一个绑定到一个可用硬件通道的逻辑通道,当比较匹配发生(即计数器达到预设值)时,会触发一个硬件中断和一个输出引脚的状态改变(电平翻转),这里使能 PTB13 为 OCU 的输出引脚(配置为 eMIOS、输出),使能 PTA29 为输出 GPIO(控制红灯亮灭)。

图 2 PTA29 & PTB13 管脚配置

  1. 添加如图 3 所示外设模块,并配置 Emios_Ocu、Emios_Mcu_Ip 及 IntCtrl_Ip 模块。

图 3 具体驱动模块

a. Emios_Ocu 模块配置

图 4 使能 OCU API 函数功能

图 5 使能 EMIOS0_CH1 对应 OCU 功能

图 6 设置 OCU 计数方式及计数阈值

图 7 OCU 通知函数及输出引脚状态变化配置

图 8 设置 OCU 关联硬件中断通道及预分频值

b. Emios_Mcl_Ip 模块配置

图 9 使能 EMIOS 通用功能

图 10 设置时钟分频及计数模式

c. IntCtrl_Ip 模块配置:查看图 11,可知 EMIOS0_CH1 对应中断服务函数为 EMIOS0_5_IRQ,具体配置如图 12 所示。
 

图 11 EMIOS 通道对应的中断服务函数

图 12 使能 EMIOS0_CH1 对应中断服务函数

  1. main.c 函数
#include "Emios_Ocu_Ip.h"
#include "Emios_Mcl_Ip.h"
#include "Emios_Mcl_Ip_Irq.h"
#include "Clock_Ip.h"
#include "IntCtrl_Ip.h"
#include "Siul2_Port_Ip.h"
#include "Siul2_Dio_Ip.h"#define clockConfig &Clock_Ip_aClockConfig[0]
#define EMIOS_0       (0U)
#define CHANNEL_1     (1U)
/* Global flag updated in irq */
static volatile uint8 toggleLed = 0U;void OcuChannel_0_notification(void);
/**
* @brief    Emios notification periodically called by the configured channel
* @details  Used to blink a led
*/
void OcuChannel_0_notification(void)
{static uint16 count = 0U;if (++count >= 10U){toggleLed = 1U;count = 0;}
}
/**
* @brief        Main function of the example
* @details      Initialize the used drivers and uses the Ocu
*               and Siul2_Dio drivers to toggle a LED periodically
*/int main(void)
{uint8 stateLed = 0;/* Initialize clock */Clock_Ip_Init(clockConfig);/* Initialize all pins using the Siul2_Port driver */Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals, g_pin_mux_InitConfigArr_PortContainer_0_BOARD_InitPeripherals);/* Set eMios interrupt */IntCtrl_Ip_Init(&IntCtrlConfig_0);IntCtrl_Ip_EnableIrq(0U);/* Initialize eMios_Mcl for enable global counter bus */Emios_Mcl_Ip_Init(EMIOS_0, &Emios_Mcl_Ip_0_Config_BOARD_INITPERIPHERALS);/* Initialize eMios_Ocu */Emios_Ocu_Ip_Init(&Emios_Ocu_Ip_0_ModuleCfgPB);/* Enable eMios_Ocu channel notification */Emios_Ocu_Ip_EnableNotification(EMIOS_0,CHANNEL_1);/* Start eMios_Ocu Channel */Emios_Ocu_Ip_StartChannel(EMIOS_0,CHANNEL_1);while (1){/* Toggle the LED when the Ocu notification is called */if (1U == toggleLed){toggleLed = 0;Siul2_Dio_Ip_WritePin(LED_RED_PORT, LED_RED_PIN, stateLed);stateLed = stateLed ^ 1U;}}
}
  1. 完成工程的编译和烧录之后,原厂 S32K312 开发板红灯会持续 1s 亮一次,具体如下图所示:

图 13 硬件现象

四、总结

        参照上述【OCU 配置流程】的步骤 1、2、3 完成管脚使能、相关外设模块的添加与配置以及 main.c 源程序的复制与修改,即可完成 OCU 例程配置,感谢您阅读本文!

五、参考文献

[1] RTD_OCU_UM.pdf

[2] S32K3XXRM Rev7.pdf

欢迎登录大大通,阅读原文,浏览更多精彩技术内容吧!

相关文章:

  • Linux centerOS 服务器搭建NTP服务
  • Android Glide(一):源码分析,内存缓存和磁盘缓存的分析,实现流程以及生命周期
  • SCAU学习笔记 - 面向对象程序设计课后习题
  • hive如何删除分区
  • “避开死锁泥潭:开发者必知的技巧与工具“
  • 提升SAP归档效率的5个实用技巧
  • 智慧城市交通管理中的云端多车调度与控制
  • uniapp数据缓存
  • C#源码安装ZedGraph组件,并且立即演示使用
  • GIS在构建虚拟世界中的新机遇
  • 滚雪球学MySQL[1.1讲]:MySQL简介与环境配置
  • el-upload自定上传列表删除,上传列表已删除,提交数据仍存在问题
  • 什么情况?上交所服务器被你们给买崩了?
  • 将Mixamo的模型和动画导入UE5
  • Android OpenGLES2.0开发(三):绘制一个三角形
  • 30天自制操作系统-2
  • Android单元测试 - 几个重要问题
  • extract-text-webpack-plugin用法
  • iOS 系统授权开发
  • Javascript编码规范
  • JAVA之继承和多态
  • Lsb图片隐写
  • React的组件模式
  • React系列之 Redux 架构模式
  • Service Worker
  • session共享问题解决方案
  • sublime配置文件
  • 测试开发系类之接口自动化测试
  • 成为一名优秀的Developer的书单
  • 回流、重绘及其优化
  • 精彩代码 vue.js
  • 前端面试总结(at, md)
  • 深入浅出webpack学习(1)--核心概念
  • 使用API自动生成工具优化前端工作流
  • 微信小程序填坑清单
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)C#调用WebService 基础
  • (转)Google的Objective-C编码规范
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 6.0--通用帮助类--FileHelper
  • .NET CORE Aws S3 使用
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • /proc/vmstat 详解