mini2440裸机小结

2024-05-09 21:38
文章标签 裸机 小结 mini2440

本文主要是介绍mini2440裸机小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工作模式
1 用户模式
2 快速中断模式
3外部中断模式
4管理模式
5数据访问终止模式
6系统模式
7未定义模式
可通过软件改变,或外部中断改变模式。
除去用户模式和系统模式其他5种模式都叫异常模式。

寄存器
37个32位寄存器,31个通用寄存器,6个状态寄存器。不同模式下访问寄存器不同。
几个重要的寄存器:
1,CPSR 程序状态寄存器
所有的处理器模式都可以访问当前程序状态寄存器,它包含当前处理器模式以及其他状态和控制信息,比如溢出为,进位位。
2 SPSR 异常模式下的程序状态寄存器,用于保留cpsr 的信息。用于在异常模式下异常返回。
3 R15 又称PC指针,是程序运行标志
4 R14又称子程序链接寄存器(LR),在执行BL指令是,PC寄存器的值先复制到LR寄存器,在子函数返回值,通过执行 MOV R15,LR指令子函数返回。
5 R13,用作堆栈指针,又称SP,不明思议,就是堆栈用咯,通过SP开辟一些内存区域存储一些信息。例如
STMFD SP!,{R0-R7,LR} ;现场保存,将R0-R7 LR入栈 
LDMFD SP!,{R0-R7,LR};恢复现场,异常处理返回。
ARM启动流程解析:
一,上电或复位
二,建立异常向量表
1,建立异常复位处理函数
2,建立未定义模式异常处理函数
3,建立软中断模式处理函数
4,建立取指令异常处理函数
5,建立数据中止异常处理函数、
6,建立IRQ处理函数
7,建立FIO处理函数
注意,如果启动过程中没有234567所描述的异常,则无条件执行1处理的函数。


1中处理函数:
一,初始化硬件
1,关闭关门狗(为了避免关门狗开启造成的系统重启)
2,屏蔽所有中断(中断服务子程序一般在用户程序中实现,启动代码无需处理)
3,初始化PLL和时钟(讲时钟调整到符合各个设配的频率)
4,初始化存储系统(将存储地址空间分成8个区,其中前六个固定大小,可以挂载ROM,SRAM等,后两个SDRAM,SRAM和ROM)

二,系统初始化堆栈。
为各个处理莫属分配堆栈空间。
注意:堆栈初始化的顺序决定了系统最好运行在哪种模式,所以最后初始化的模式应该是系统模式。
三 应用程序执行环境初始化
nandflash无法运行程序,将RO,RW段搬至SDRAM中运行,并将ZI段清零,其中RW段必须在RAM中执行,若程序无RW段,而且R0段代码大小小于4K,就不必搬到SDRAM中。
四 执行主函数main

 


细节:
异常向量表的第一条指令的存储地址为0,系统刚启动时,pc会指向0x00000000,这是 “B reseInit”,程序此时跳转到上电复位函数执行,未定义异常处理函数地址是0x00000004,软中断处理函数是0x00000008,以此类推,最后FIQ处理函数的地址是0x00000029.
 


ARM裸机程序设计
一 定时器
流程 设置时钟频率 初始化mmu 定时器初始化
1 设置TCFGn寄存器(设置分频初值)
2 设置TCNTB寄存器(设置计数初值)
3 设置TCMPB寄存器(设置被减最小值)
4 设置TCON寄存器(启动定时器,是否自动更新初值)
5 设置优先级
6 清中断

二 UART
流程
设置时钟频率 :
设置Set_Clk() 函数 cal_cpu_bus_clk()函数,FCLK,HCLK,PCLK
设置波特率函数 Uart_Init(int pclk,int baud)

选择哪个uart通道口  Uart_Select(int ch)

发送数据函数  Uart_Printf(char *fmt,...);通过UART发送数据到PC

void Uart0_TxEmpty()  等待,直到UART的发送器为空,就是发送完毕

char Uart_Getch(void)  从终端上获取敲入的字符,返回值为char类型。RdURXH0有数据时,返回URXH的数据。当URXH没有数据时,总是等待,直到有数据。

void Uart_GetString(char *string)  这个函数用于从终端得到一个字符串,并储存到string中

char Uart_GetKey(void)

Uart_GetKey 这个与Uart_Getch 不同的是,当URXH没有数据时返回0。有数据时,返回数据,这个函数可以用来查看当前URXH中的值。

三 ADC
流程
设置时钟频率

ADC转换频率设置
ADCCON寄存器
注意ADCCON寄存器的第 6到13位 分频,当pclk 设置成50MHZ 第6到13位设置成19时,ADC采样频率就等于 50000000/(19+1);
开始AD转换
ADCCON寄存器最低位设置成1,当开始转换时最低位自动变成0,所以可以判断该位来判断是否进行AD转换。

检查是否转换结束
判断ADCCON的最高位,如果最高位被置为1,表明转换结束。
开始读取转换值
ADCDAT0 寄存器的第0到9位。

触摸屏驱动
首先设置ADC,如上
设置ADCTSC寄存器
等待中断 
中断函数处理

这篇关于mini2440裸机小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974576

相关文章

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

python中getsizeof和asizeof的区别小结

《python中getsizeof和asizeof的区别小结》本文详细的介绍了getsizeof和asizeof的区别,这两个函数都用于获取对象的内存占用大小,它们来自不同的库,下面就来详细的介绍一下... 目录sys.getsizeof (python 内置)pympler.asizeof.asizeof

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.