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

化妆品备案查询网站品牌设计书籍

化妆品备案查询网站,品牌设计书籍,网上商城建设杭州服务商,简述seo的优化流程前言#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM#xff08;MX6U#xff09;裸机篇”视频的学习笔记#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…前言 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARMMX6U裸机篇”视频的学习笔记在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用 正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com 《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》 正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档 正文 本文是 “正点原子[第二期]Linux之ARMMX6U裸机篇--第16 讲” 的读书笔记。第16讲主要是介绍I.MX6U处理器的EPIT定时器。本节将参考正点原子的视频教程第16讲和配套的正点原子开发指南文档进行学习。 0. 概述 定时器是最常见的外设常常需要使用定时器来完成精准的定时功能I.MX6U 提供了多种硬件定时器有些定时器功能非常强大。本章我们从最基本的EPIT定时器开始学习如何配置EPIT定时器使其按照给定的时间周期性的产生定时器中断在定时器中断里面我们可以做其他处理比如翻转LED灯。 1. EPIT定时器原理 EPIT的全称是Enhanced Period Interrupt Timer直译过来就是增强的周期中断定时器它主要是完成周期性中断的。当学过STM32的话应该知道STM32里面的定时器还有很多其他的功能比如输入捕获PWM输出等等。但是I.MX6U的EPIT定时器只是完成周期性中断定时的功能仅此一项功能。至于输入捕获PWM输出灯这些功能I.MX6U由其他的外设来完成。 EPIT是一个32位定时器在处理器几乎不用介入的情况下提供精准的定时中断软件使能以后EPIT就会开始运行EPIT定时器有如下特点 时钟源可选的32位向下定时器12位分频值当计数值和比较值相等的时候产生中断 EPIT定时器的结构如下图所示 这是一个多路选择器用来选择EPIT定时器的时钟源EPIT共有三个时钟源可以选择 ipg_clk, ipg_clk_32k, ipg_clk_highfrq这是一个12位的分频器负责对时钟源进行分频12位对应的值是0~4095对应着1~4096分频经过分频的时钟进入到EPIT定时内部在EPIT定时器内部有三个重要的寄存器技术寄存器EPIT_CR加载寄存器EPIT_LR和比较寄存器EPIT_CMPR这3个寄存器都是32位的。EPIT是一个向下计数器也就是说给它一个初始值它就会从这个给定的初始值开始递减直到减为0计数寄存器里面保存的就是当前的计数值。如果EPIT工作在 set-and-forget 模式下当计数寄存器里面的值减少到0EPIT就会重新从加载寄存器读取数值到技术寄存器里面重新开始向下计数。比较寄存器里面保存的数值用于和计数寄存器里面的计数值比较如果相等的话就会产生一个比较事件。比较器EPIT可设置引脚输出如果设置了的话就会通过制定的引脚输出信号。产生比较中断也就是定时中断。 EPIT定时器有两种工作模式: set-and-forget 和 free-running 这两个工作模式的区别如下 set-and-forget 模式EPITx_CRx1,2寄存器的RLD位置1的时候EPIT工作在此模式下在此模式下EPIT的计数器值从加载寄存器EPITx_LR中获取初始值不能直接向计数寄存器写入数据。不管什么时候只要计数器计数到0那么就会从加载寄存器EPITx_LR中重新加载数据到计数器中周而复始。free-running模式EPITx_CR寄存器的RLD位清零的时候EPIT定时器工作在此模式下当计数器数到0以后会重新从 0xFFFFFFFF 开始计数并不是从加载寄存器EPITx_LR中获取数据。 1.1 EPIT定时器关联的 EPITx_XX 寄存器如下 寄存器描述EPITx_CRControl Register 控制寄存器EPITx_SRStatus Regisetr 状态寄存器EPITx_LRLoad Register 加载寄存器EPITx_CMPRCompare Register 比较寄存器EPITx_CNRCounter Register 计数寄存器 1.2 EPIT 比较重要的几个寄存器 加下来看一下GPIT重要的几个寄存器第一个就是EPIT的配置寄存器EPITx_CR此寄存器的结构如下图所示 EPITx_CR控制寄存器描述CLKSRC bit[25:24] EPIT时钟源选择位为0时关闭时钟源1时使用ipg_clk时钟源2时使用ipg_clk_higrfreq时钟源3时使用 ipg_clk_32k 时钟源。 在本例程中我们设置为 1也就是选择 ipg_clk 作为 EPIT 的时钟源 ipg_clk66MHz。 IOVW bit[17] EPIT计数值覆盖写使能。为0写EPIT LR加载寄存器不影响计数寄存器里的值为1写EPIT LR加载寄存器会立即覆盖写计数寄存器。 PRESCALAR bit[15:4] EPIT时钟源分配值可设置范围0~4095分别对应1~4096分频。RLD bit[3]EPIT工作模式为0的时候工作在free-running模式为1的时候工作在set-and-forget模式。本章例程设置为1也就是工作在set-and-forget模式OCIEN bit[2]比较中断使能位为0时关闭比较中断为1的时候使能比较中断。本章实验使能比较中断。ENMOD bit[1]设置计数器初始值为0时计数器初始值等于上次关闭EPIT定时器以后计数器里面的值为1的时候来源于加载寄存器。EN bit[0]EPIT使能位为0的时候关闭EPIT为1的时候使能EPIT。 寄存器EPITx_SR 寄存器结构如下图所示 寄存器EPITx_SR寄存器只有一个有效位那就是 OCIFOutpurt Comparte Interrupt Flagbit[0]为0时表示没有比较事件发生为1的时候表示有比较事件发生。当比较事件发生以后需要手动清除此位此位是写1清零。 关于 EPIT 的寄存器就介绍到这里关于这些寄存器详细的描述请参考《I.MX6ULL 参考手册》第 1174 页的 24.6 小节。 2. EPIT定时器程序编写 本章我们使用EPIT产生功能定时中断然后在中断服务函数里面翻转LED0接下来以EPIT1为例讲解需要哪些步骤来实现这个功能。EPIT1的配置步骤如下 设置EPIT1的时钟源 设置EPIT1_CR寄存器的 CLKSEL bit[25:24]位选择 EPIT1的时钟源。设置分频值 设置EPIT1_CR寄存器的 PRESCALER bit[15:4]位设置分频值设置工作模式 设置EPIT1_CR寄存器的 RLD bit[3] 位设置计数器的初始值来源。设置计数值的初始值来源 设置EPIT1_CR寄存器的 ENMODE bit[1] 位设置计数器的初始值来源。使能比较中断 我们要使用到比较中断因此需要设置EPIT1_CR寄存器的 OCIEN bit[2] 位使能比较中断。设置加载值和比较值 设置寄存器EPIT1_LR中国加载值和寄存器EPIT1_CMPR中的比较值通过这两个寄存器就可以决定计时器的中断周期。EPIT1中断设置和中断服务函数编写 使能GIC中对应的EPIT1中断注册中断服务函数如果需要的话还可以设置中断优先级。最后编写中断服务函数。使能EPIT1定时器 配置好EPIT1以后就可以使能EPIT1了通过EPIT1_CR寄存器的 EN bit[0] 位来设置。 通过以上几步我们就配置好EPIT了通过EPIT的比较中断来实现LED0的翻转。 2.1 本节用到的硬件资源 LED0定时器EPIT1 本实验通过EPIT的中断来控制LED0的亮灭LED0的硬件原理前面已经介绍过了。 EIPT定时器输出比较中断的中断ID号为 885632: 2.2 实验程序编写 经过上面的分析EPIT1定时器的使用方法和配置EPIT1寄存器的步骤已经清楚接下来实现正点原子I.MX6U ALPHA/Mini 开发板上的EPIT定时器驱动程序。 #include bsp_epittimer.h #include bsp_beep.h #include bsp_led.h #include bsp_int.hvoid epittimer_init(int frac, int counterValue) {if(frac0 || frac 0xFFF){return;}/* 首先清零EPIT1-CR 控制寄存器.* I.MX6U手册要求在修改EPIT定时器时钟源之前必须先去使能EPIT定时器 */EPIT1-CR 0x0;/* CLKSEL bit[25:24] EPIT时钟源选择, 1ipg_clk */EPIT1-CR | (1 24);/* PRESCALAR bit[15:4] EPIT分频值01分频, 66MHz/166MHz */EPIT1-CR | (frac 4);/* RLD bit[3] EPIT工作模式1set-and-foret 模式 */EPIT1-CR | (1 3);/* OCIEN bit[2] EPIT输出比较中断使能1使能比较中断 */EPIT1-CR | (1 2);/* ENMODE bit[1] EPIT使能模式1EPIT使能是计数器值从LR寄存器获取 */EPIT1-CR | (1 1);/* EPITx_LR 加载值寄存器设置 */EPIT1-LR counterValue;/* EPIT_CMPR 比较值寄存器设置 */EPIT1-CMPR 0;/* 使能GIC IRQn 中断 */GIC_EnableIRQ(EPIT1_IRQn);/* 注册EPIT1比较中断 EPIT1_IRQn 的中断处理函数 */system_irqhandler_register(EPIT1_IRQn, eptitimer_irq_handler, NULL);/* 使能EPIT1 EN bit[0], 1: 是能EPIT */EPIT1-CR | (1 0); }void eptitimer_irq_handler(IRQn_Type irq, void *userparam) {static int beep_state 0;static int led_state 0;if((EPIT1-SR (1 0))){ /* 判断比较中断事件发生 */beep_state !beep_state;beep_switch(beep_state);led_state !led_state;led_switch(LED_0, led_state);}/* 清除EPITx_ISR 中断标志位 */EPIT1-SR | (1 0); }3. 编译烧写SD卡验证按键EPIT定时器中断实验结果 译修改主频后源码烧录SD卡验证本节的EPIT定时器实验是否生效。预期烧录SD卡后正点原子I.MX6ULL ALPHA/Mini 开发板会周期性的每500ms鸣叫一次。 我本地验证的结果是EPIT定时器正常工作每500ms触发一次EPIT输出比较事件中断在EPIT定时器中断里翻转一次蜂鸣器的开关蜂鸣器正常鸣叫。 4. 总结和实验遇到的问题记录 4.1 问题1EPIT定时器驱动程序烧录SD开发板上电需要等待大概1分钟之后蜂鸣器才会开始按照500ms的间隔鸣叫。 对照正点原子的示例源码找到了问题原因 原因忘记了配置EPITx-CR寄存器的ENMODE bit[1] 位置1这样CR寄存器 ENMOE0EPIT计数寄存器就使用上一次残留的寄存器值开始向下递减可能是从0XFFFFFFFF 开始递减的所以需要等待大概1分钟才能递减到 0. 5. 结束 本文至此结束
http://www.yingshimen.cn/news/22562/

相关文章:

  • 仿58同城分类信息网站源码网络运营需要学什么
  • 广告网站模板下载平面设计免费网站推荐
  • 免费推广网站软件网页设计大赛演讲稿
  • 青岛昌隆文具网站是哪家公司做的个人建站流程详解
  • 深圳外贸网站推广曲靖建设局网站
  • 嘉兴优化网站排名沈阳妇科医院哪个好
  • 电影网站推广万网云服务器怎么上传网站
  • 农产品网站设计方案网页设计实验报告3000
  • 外贸网站推广哪家好网页源代码查找指定文字
  • 全球跨境电商平台排名网站关键词优化推广哪家快
  • 做网站的工作怎么样上海网络科技有限公司排名
  • 网站视频背景怎么做织梦网站模板如何安装教程视频教程
  • 方一凡和磊儿做家教的网站建筑设计公司名称大全
  • jsp网站建设项目实战 pdf施工企业的期间费用包括哪些
  • 泾县网站建设android wordpress 源码分析
  • 建怎样的网站挣钱快网站设计要如何做支付功能
  • 常州网站外包wordpress html5的关系
  • 梅州建站塔山双喜服装网站建设费用
  • 网站名称填写什么网站建设与管理课程报告
  • phpmysql网站开发全程实例phpnow搭建本地网站
  • 汕头seo建站网站地图深度做多少合适
  • 威海建设公司网站茶叶网络营销网站建设
  • 石材公司网站源码像淘宝购物网站建设需要哪些专业人员?
  • 长沙3合1网站建设263企业邮箱后缀是什么
  • 郑州地方网络推广网站对于职业规划做的好的网站
  • 0基础1小时网站建设教程办公空间设计经典案例
  • flash网站片头动画佛山南海区建设局网站
  • 如何做积分商城网站个人网站建设发布信息
  • 福州市高速公路建设指挥部网站qq登录网站怎么做
  • 美橙互联网站备案平台遵义网络科技公司