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

相关文章

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

Python中操作Redis的常用方法小结

《Python中操作Redis的常用方法小结》这篇文章主要为大家详细介绍了Python中操作Redis的常用方法,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解一下... 目录安装Redis开启、关闭Redisredis数据结构redis-cli操作安装redis-py数据库连接和释放增

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行