
I.MX6U Linux嵌入式开发
文章平均质量分 93
基于正点原子I.MX6U-MINI开发板
猿来这样1
编程圈子,谢厂节的博客
展开
-
I.MX6U 裸机开发21. LCD原理及eLCDIF接口介绍
配置 CSCDR2[LCDIF1_PRE_CLK_SEL],bit[17:15],值为2,表示选择 LCDIF_CLK_ROOT 为时钟源;在初始化的时候,先读取ID来识别屏幕。继续设置 CCM_CSCDR[LCDIF1_CLK_SEL],bit[9:11],值为0,表示LCDIF的最终时钟源来源于 pre-muxed LCDIF clock。配置 CBCMR[LCDIF1_PODF],bit[25:23] 为LCDIF_PODF,设置第二级分频,可以设置0~7,表示1 ~ 8分频。原创 2024-11-27 10:14:13 · 851 阅读 · 0 评论 -
I.MX6U 裸机开发20. DDR3 内存知识
SRAM(Static Random - Access Memory)即静态随机存取存储器,是一种半导体存储器。SRAM 存储单元通常由 6 个晶体管组成(CMOS 工艺)。这种结构可以在不进行刷新操作的情况下保持数据的存储状态,容量小、价格高、速度快。在传统的51单片机、STM32中,会有芯片内部RAM,即SRAM。在高级一点单片机,可以使用外扩RAM。以 IS62WV51216 SRAM为例,这是一个1M Byte存储器,从数据手册可以看到其功能框图:A0-A18:19根地址线。原创 2024-11-25 14:38:49 · 1121 阅读 · 0 评论 -
I.MX6U 裸机开发19.串口通讯实验和printf scanf 重定向
在《IMX6U参考手册》P3561UART(Universal Asynchronous Receiver/Trasmitter),通用异步串行收发器。它可以通过电平转换器和 RS - 232 电缆或外部电路提供与外部设备的串行通信能力。外部电路可以将红外信号转换为电信号(用于接收),或将电信号转换为驱动红外 LED 的信号(用于传输),以提供低速 IrDA 兼容性。NRZ(非归零)编码格式RS485 兼容的 9 位数据格式IrDA 兼容的红外低速数据率(SIR)格式。原创 2024-11-22 16:04:46 · 965 阅读 · 0 评论 -
I.MX6U 裸机开发18.GPT定时器实现高精度延时
GPT 有一个 32 位的向上计数器。定时器的计数值可以通过外部引脚上的事件被捕获到一个寄存器中。捕获触发可以被编程为上升沿和/或下降沿。GPT 还可以在输出比较引脚上生成一个事件,并在定时器达到编程值时产生一个中断。GPT 有一个 12 位的预分频器,它从多个时钟源中提供一个可编程的时钟频率。32位向下计数器没有捕获功能。原创 2024-11-21 14:37:51 · 1337 阅读 · 0 评论 -
I.MX6U 裸机开发17.定时器按键消抖
如果按键电平与之前检测到的变化后的电平一致,说明按键已经稳定,此时可以认为是一次有效的按键动作,执行相应的按键处理程序,比如执行某个功能函数。但这种方式并不适合在真正项目中使用,因为中断中不可以让CPU执行无意义的耗时操作,导致占用了CPU,CPU没办法执行其它更重要的任务。如果在中断服务程序中读取到按键电平与之前变化后的电平不一致,说明在定时期间按键又发生了抖动,此时就不进行按键处理,并且重新启动定时器计数,等待下一次稳定的按键电平。在定时器计数期间,如果按键电平再次发生变化,就重新启动定时器计数。原创 2024-11-21 11:26:25 · 415 阅读 · 0 评论 -
I.MX6U 裸机开发16.EPIT定时器
若要直接初始化计数器而不是等待计数达到零,需设置 EPIT 计数器覆写使能位(EPIT_CR [IOVW]),并使用所需的初始化值写入 EPIT_LR。当 EPIT_EPITCMPR 值与 EPIT_EPITCNR 中的值相匹配时,会设置一个比较状态标志 , 如果控制寄存器中的OCIEN 位被置位,还会产生一个中断。要直接初始化计数器,也需要设置 EPIT 计数器覆盖使能位(EPIO_EPITCL [IOVW] ),并将所需要的初始化值写入 EPIT_LR。如果分频值是1,则1秒进中断 66M次。原创 2024-11-20 14:23:05 · 601 阅读 · 0 评论 -
I.MX6U 裸机开发15.IRQ中断——GPIO中断处理
*** @brief 中断触发类型枚举*/kGPIO_NoIntmode = 0U, // 无中断kGPIO_IntLowLevel = 1U, // 低电平触发kGPIO_IntHighLevel = 2U, // 高电平触发kGPIO_IntRisingEdge = 3U, // 上升沿触发kGPIO_IntFallingEdge = 4U, // 下降沿触发kGPIO_IntRisingOrFallingEdge = 5U, // 上升沿或下降沿触发。原创 2024-11-19 16:28:48 · 1265 阅读 · 0 评论 -
I.MX6U 裸机开发14.IRQ中断服务函数
push 指令可以一次性将多个寄存器的值压入堆栈,这是因为 ARM 处理器支持多寄存器操作指令,这些指令可以同时对多个寄存器进行操作,从而提高效率。当正在执行 0x2000时,PC里保存的是0x2008地址,如果这时发生了中断,LR保存的是0x2008。指令将 LR 寄存器的值减去 4,并将结果赋值给 PC(程序计数器)寄存器,从而实现从中断处理程序返回到中断发生时的指令地址。保存的是 GIC的CPU接口端基地址,这个位置保存的是 GIC_EDIR寄存器。IRQ中断模式主要用于处理中断。原创 2024-11-19 14:41:10 · 1021 阅读 · 0 评论 -
I.MX6U 裸机开发13.中断、中断向量表、中断函数
I.MX6ULL的中断系统介绍、中断向量表概念及中断的编写方法。原创 2024-11-16 18:46:53 · 1084 阅读 · 0 评论 -
I.MX6U 裸机开发12.主频修改和PLL配置
AHB_CLK_ROOT是AHB总线的主时钟源。AHB总线用于连接处理器、内存和外设等模块,提供高性能的总线通信。AHB_CLK_ROOT的频率直接影响系统的性能和功耗。通过《IMX6ULL参考手册》P643的表格:可以看到AHB_CLK_ROOT的默认频率是6MHz,最大132MHz。原创 2024-11-16 15:52:13 · 1044 阅读 · 0 评论 -
I.MX6U 裸机开发11.主频和时钟配置实验
在 I.MX6ULL 处理器中,PLL(锁相环)用于生成各种频率的时钟信号,以满足不同模块的需求。原创 2024-11-15 16:17:04 · 1057 阅读 · 0 评论 -
I.MX6U 裸机开发10.GPIO按键实验
据教程描述,问题现象是编译后烧录的程序无法正常工作,检查 beep.dis,发现 _bss_start 段的地址不是四字节 对齐的。Pull / Keep Enable Field(拉/保持使能字段)用于设置引脚的拉/保持功能。Pull / Keep Select Field(拉/保持选择字段)用于设置引脚的拉/保持功能。, 这句的意思是在这里加定位计数器,. 是四字节对齐的,再把点赋值给__bss_start。默认情况下,KEY0 为高,当按下KEY0 时, UART1_CTS 拉为低。原创 2024-11-15 09:43:51 · 879 阅读 · 0 评论 -
I.MX6U 裸机开发9.BEEP蜂鸣器实验
这里可以看到 , BEEP 接的引脚是SNVS_TAMPER1 引脚,该引脚通常用于安全非易失性存储器(SNVS)模块中的防篡改检测功能,本实验将其设置复用为GPIO口。从前一章08_ledc_bsp的基础上开发,复制前一章所有文件到新文件夹: 09_beep。可以看到 SNVS_TAMPER1 可以复用为GPIO5_IO01。开发板上的蜂鸣器是有源蜂鸣器,内部有振荡源,通电即可发声。当BEEP为低的时候,三级管导通,蜂鸣器会叫。当BEEP为高的时候,三级管截止,蜂鸣器不叫。编译烧写程序运行即可。原创 2024-11-14 15:53:59 · 406 阅读 · 0 评论 -
I.MX6U 裸机开发8.BSP工程管理实践
前面的章节源文件直接放在根目录下,不利于大型项目的文件组织。BSP(Board Support Package)是一种比较常见的工程管理模式,最早由 嵌入式系统软件公司 Wind River Systems 提出。BSP 是其 VxWorks 实时操作系统的一部分,用于支持特定硬件平台的初始化和配置。BSP(Board Support Package)工程管理涉及到为特定硬件平台(如开发板)提供必要的软件支持,以便操作系统和应用程序能够正常运行。启动代码:初始化硬件,设置堆栈,跳转到主程序。设备驱动。原创 2024-11-13 14:36:55 · 1036 阅读 · 0 评论 -
I.MX6U 裸机开发7. NXP官方SDK部分寄存器定义移植
在正点原子给的资料包 《【正点原子】阿尔法Linux开发板(A盘)-基础资料》找到:07、I.MX6U参考资料\03、I.MX6ULL SDK包,下面有两个文件,分别是Linux和Windows下的SDK包。主要用于配置 I.MX6U 处理器的 IOMUXC(输入/输出复用控制器),包含了 IOMUXC 寄存器的定义和相关的宏,用于设置引脚的复用功能和电气属性。是 NXP 提供的 I.MX6U 处理器的头文件,包含了对处理器寄存器、外设的定义(如 GPIO、UART、I2C、SPI 等)和控制宏。原创 2024-11-13 12:43:02 · 923 阅读 · 0 评论 -
I.MX6U 裸机开发6. 结构体编程风格使用寄存器
通过 《IMX6ULL参考手册》 P 658,可以看到相关结构体的地址:/* GPIO寄存器结构体定义 */} CCM_Type;类似的对IOMUX_SW_MUX 、CCM_ANALOG、 IOMUX_SW_PAD进行定义,完整文件参考正点原子教程代码。原创 2024-11-12 14:17:52 · 808 阅读 · 0 评论 -
I.MX6U 裸机开发5.准备C环境并用C语言控制LED
I.MX6U裸机开发准备C语言环境,并使用C语言控制 LED,知识点有准备C环境 、SP指针 、CPSR寄存器、启动文件编写、链接文件编写。原创 2024-11-09 20:07:16 · 882 阅读 · 0 评论 -
I.MX6U 裸机开发4.IMX启动方式
SEC_CONFIG 的出厂设置为开放配置,在这种配置中,ROM/HAB 执行镜像认证,但所有认证错误都会被忽略,镜像仍然被允许执行。DCD(设备配置数据)是一种包含在程序镜像中的配置信息(位于ROM外部),ROM会解释这些信息以配置芯片上的各种外设。通过上述代码,可以将 ROM 中的异常向量表映射到 RAM 中的重复异常向量表,从而在启动后可以根据需要覆盖这些向量。IVT 包含了启动所需的各种数据组件,包括程序镜像入口点、设备配置数据(DCD)的指针以及启动过程中 ROM 使用的其他指针。原创 2024-11-08 15:09:17 · 1077 阅读 · 0 评论 -
I.MX6U 裸机开发3. GPIO操作控制LED灯
I.MX6U的时钟寄存器,首先到IMX6ULL参考手册找到 CCGR0~CCGR6地址,通过设置为0xFFFFFFFF把时钟全部使能。本系列博文,链接地址使用了0x87800000,这是以后要学到的Uboot的链接地址就是0x87800000,这里沿用其设置。这里我们要添加一个头部,在这个头部实现 从指定存储中读取头部、初始化DDR,并将bin拷贝到指定地方。I.MX6U 支持 SD卡、EMMC、NAND、NOR、SPI Flash,本例程使用烧写到SD卡。这一步不是为了烧写,而是为了方便以后调试代码。原创 2024-11-07 19:17:43 · 925 阅读 · 0 评论 -
I.MX6U 裸机开发2. 芯片简介、汇编基础及GPIO操作准备工作
官网地址:点击:根据其官网介绍:i.MX 6ULL 是一个高能效且成本优化的应用处理器系列,采用单个 Arm Cortex-A7 内核的高级实现,运行速度高达 900 MHz。i.MX 6ULL 应用处理器包括一个集成的电源管理模块,可降低外部电源的复杂性并简化电源排序。原创 2024-11-03 19:07:40 · 1142 阅读 · 0 评论 -
I.MX6U 裸机开发1. 开发环境搭建
开发环境搭建;汇编驱动开发;驱动开发;本系列文章学习过程代码开源地址: https://gitee.com/xundh/learn_i.mx6u学习资源主要来源于正点原子官方教程。EMMC核心板: 容量大、速度快,8GB EMC,DDR:512M字节。NANO FLASH:工业级,512M字节 FLASH,DDR:256M字节。原创 2024-11-01 13:26:54 · 614 阅读 · 0 评论