01 2022 档案
摘要:PWM的原理我这里就不再说了,脉冲宽度调制,通过改变周期和产空比满足负载不同的功率需求。 I.MX6UL的PWM功能 I.MX6UL的PWM和处理器内核对接的时候遵循外设总线协议,PWM和其他模块之间只有时钟信号(CCM模块)和重启信号(SRC模块)相关(还有中断处理),还有一个单独的输出信号。功能
阅读全文
摘要:在前面一章我们已经铺垫了I2C的使用流程,下面我们就按照I2C的通讯流程写对应的代码,这个流程应该严格按照参考手册给出的定义 上面两幅图就是I2C通讯的流程 master代码流程 I2C的代码流程比较复杂,我们一个个函数来说 初始化 首先是初始化 void i2c_init(I2C_Type *ba
阅读全文
摘要:I2C是一种最常用的接口,有很多传感器或IC都提供了I2C接口来和MCU连接。所以I2C是我们必须要掌握的接口。今天这个I2C的实现流程会有些复杂,我们要从I2C的通讯流程、从机设备等几个方面来讲解。 I2C硬件结构 I2C只用来两根线:SCL(Serial Clock Line 串行时钟线)和SD
阅读全文
摘要:今天我们来搞一下I.MX6UL的RTC,这个RTC确切来说是个SRTC。要注意点是,6U和6ULL的RTC在48章SNVS里,但是6ULL里并没有讲清楚RTC相关功能的寄存器,反而在6U的手册里写明白了。主要是因为SNVS有些内容是和加密有关的,里面的具体内容要和恩智浦签订NDA协议才能拿到具体内容
阅读全文
摘要:一个嵌入式设备,串口基本上就是最常用到的外设了,通过串口可以将开发板和电脑连接,也有很多外设是通过串口来进行数据交互的。今天就来搞一下I.MX6UL的串口通讯,实现和电脑通讯的效果。 UART接口 I.MX6UL的串口外设叫做UART(Universal Asynchronous Receiver/
阅读全文
摘要:今天我们来学习一种新的定时器——GPT(General Purpose Timer通用定时器)。I.MX6UL可以通过GPT来实现高精度的定时效果。 GPT定时器原理 GPT和前面讲的EPIT的基础有很多相似度地方: 计数器都是32位; 时钟源可选择,但是GPT除过关闭时钟源还有5组可选择 12位分
阅读全文
摘要:在讲中断那一章我们留了个BUG:中断服务函数应该是快进快出的,中间是严禁使用定时函数的,那样会严重浪费CPU的性能,在delay中什么事都做不了。而机械按键确实要考虑到消抖的效果,所以使用定时器来实现功能。 定时器消抖原理 按键消抖的原理网上一搜一大把,这里就不说了,总之就是按下按钮当时不反应,过一
阅读全文
摘要:今天来讲一个常用的外设:定时器,I.MX6U提供了多种硬件计时器,有些定时器的作用非常强大,我们从最基础的EPIT定时器开始学习。 EPIT定时器简介 EPIT(Enhanced Periodic Interrupt Timer)增强型周期中断定时器,主要功能就是用来完成周期性中断定时。对Corte
阅读全文
摘要:在完成了通用的中断程序编写后,我们就要针对不同的外设进行中断函数的编写了。这一章我们使用的硬件是还是那个按钮,当按钮按下时,触发中断、调用终端函数。 GPIO中断初始化 在构造函数前,我们先要对GPIO进行中断初始化,这里要参考I.MX6ULL的参考手册28章GPIO,我们前面做通用GPIO驱动时已
阅读全文
摘要:在上一章我们大概讲了中断原理,并且在放出来汇编的中断向量表和预留的中断服务函数,下面我们就要结合前面学过的知识完善这些中断服务函数。 复位中断函数 I.MX6U在上电开始或复位的时候就会调用这个复位中断,在这个中断要做的工作有: 关闭全局终端 关闭I Cache、D Cache、MMU 设置中断向量
阅读全文
摘要:教程I.MX6U的中断系统讲解是从STM32引入的,这就对我这种没接触过STM32的小白不太友好!并且中断可以说是到目前为止最最重要的知识点。还好,STM32只是大致过了几个知识点 STM32的中断系统回顾 参考教程给出的STM32的中断系统,主要有下面几个知识点 中断向量表 向量中断控制器NVIC
阅读全文
摘要:我们前面做了个用户的管理系统,为了以后的学习,我们这次做一个稍微复杂的项目——图书管理系统。 说他复杂,但是功能上跟前面的第一个项目差不多,但是数据库里多了一些关联,数据库里有三个表:图书,出版社和作者。出版社和图书是一对多的关系,也就是说一个出版社可以出版很多书;书跟作者是多对多的关系:一本书可以
阅读全文
摘要:我们前面在试各种功能的时候都是在admin下把数据硬插在table里,但是这明显不符合我们的日常使用环境,博客里最常用的就是添加新的文章了,所以这里我们就看一看文章的添加是怎么实现的。 富文本编辑器 看一看博客园在添加文章的页面,新的文章是怎么添加进去的呢? 这个图片里的文本编辑器就是一个富文本编辑
阅读全文
摘要:在做裸机开发前,我们要掌握一些基础的ARM汇编语法,因为即使后面我们用C去写驱动,也要用汇编去执行配置指针、中断、清除session等操作。我们使用的芯片是I.MX6UL,这是款Cortex-A7的内核芯片,所以使用的就是Cortex-A的汇编指令,这里有两份资料可以参考点击下载(提取码:l1rg)
阅读全文
摘要:我们前面所有的试验,都是使用默认配置下单I.MX6U的默认配置,在默认配置下单工作频率是396MHz,但是I.MX6U系列的标准工作频率是528MHz,下面我们就来学习一下如何配置I.MX6U的系统时钟和其他外设时钟,使其工作频率为528MHz,其他外设时钟源都工作在恩智浦推荐的频率。 I.MX6U
阅读全文
摘要:在前面的试验中,我们分别点亮了LED和蜂鸣器,这两个设备都是使用的GPIO的输出功能,下面我们来通过按键来做测试板子的输入功能。 硬件原理 还是查看底板原理图, 开发板上有两个按钮,其中ON_OFF是将系统重启的,不用考虑,我们要用到就是KEY0,在按键按下时,IO通过KEY0接地被拉低,默认情况是
阅读全文
摘要:今天按照点亮LED的流程,来试下蜂鸣器的驱动编写。 硬件简介 查底板原理图 开发板的蜂鸣器是有源的,这个有源指的是振荡源,这种蜂鸣器只需要给个激励源就可以发声,而对应的无源是需要给个方波来驱动的。蜂鸣器接在PNP三极管集电极上,三极管作为开关使用时有个简单的方法判定其是否打开:看三极管上箭头所在方向
阅读全文
摘要:随着我们的代码功能完善,在一个文件夹下放置所有文件已经不太合适了,针对我们上一章使用NXP提供的库来说,简简单单一个点亮LED的试验,目录结构就很乱了 在做复杂功能项目的时候,需要对目录结构进行优化,这里引入一个新概念——BSP(Board Support Package 板级支持包),目录的结构先
阅读全文