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

相关文章

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Linux环境配置中问题小结

在Linux环境配置中,遇到问题首先猜测: 1、是否是权限问题; 2、软连接是否配置;

long long,_int64使用小结

前言:   在16位环境下,int/unsigned int 占16位,long/unsigned long占32位   在32位环境下,int占32位,unsigned int占16位,long/unsigned long占32位 何时需要使用:   long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),

密码学读书笔记小结

密码学是保证消息的私密性和完整性以及消息认证的基础。加密算法的选择和密钥的管理是安全机制的效率、性能和可用性的关键。 公钥加密算法: 分发密钥比较容易,但是对大数据量的加密性能较差密钥加密算法: 更适合大批的加密任务混合型加密协议: 例如TLS,先用公钥加密建立一个安全通道,然后使用通道交换密钥,并将此密钥用于后续数据交换。 对分布式系统攻击的分类: 窃听: 未经授权获得消息副本伪装: 在未

Android 源码中jni项目 加载so目录小结

Android 源码中jni项目 加载so目录小结 文章目录 Android 源码中jni项目 加载so目录小结一、前言二、so目录验证测试1、jni so文件错误报错(1)报错1 - 未找到so文件:(2)报错2 - so文件中未找到native方法: 2、验证的几种情况(1)apk下面的 lib/arm64/ 放置正确的so文件(2)apk下面的 lib/arm64/ 放置错误的so文

maven打包成可执行的jar,以及读取配置文件问题小结

文章来源 https://blog.csdn.net/chasonsp/article/details/88852353 折腾的几天,使用maven打包后发现了问题,首先是打包的配置文件读取问题,使用getResource().getPah()会发现在访问jar包的文件时,路径里会有感叹号(杠杠滴~~)是这样的 …jar!.. 经过不断的查找资料及反复验证后,终于找到了可行的方法:

【硬刚大数据】Flink在实时在实时计算平台和实时数仓中的企业级应用小结

欢迎关注博客主页:https://blog.csdn.net/u013411339 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 CSDN博客!本文首发CSDN论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的面试部分补充。 大数据领域自 2010 年开始,以 Hadoop、Hive 为代

Kafka常见问题学习路径源码阅读小结 | 写在Kafka3.0发布之际

严格来说,这篇文章也不是今天写的。是之前断断续续写在了几篇文章中。 2021年9月21日,随着Kafka3.0的发布,Kafka在「分布式流处理平台」这个目标上的努力进一步得到加强!Kafka不满足于「消息引擎」的定位,正式基于这样的定位,Kafka 社区于 0.10.0.0 版本正式推出了流处理组件 Kafka Streams,也正是从这个版本开始,Kafka 正式"变身"为分布式的流处理平台

C++中继承及virtual小结

一、继承基础知识 C++中的继承 1.1继承的基本概念 类与类之间的关系 has-A,包含关系,用以描述一个类由多个“部件类”构成,实现has-A关系用类的成员属性表示,即一个类的成员属性是另一个已经定义好的类。 use-A,一个类使用另一个类,通过类之间的成员函数相互联系,定义友元或者通过传递参数的方式来实现。(和组合不同) is-A,即继承关系,关系具有传递性。 继承的特点 子类拥有

VS2013+QT5.5配置小结

对于VS2013在之前安装的教程有过介绍,本文主要介绍如何在VS2013中如何配置Qt5.5.1。      首先在Qt官网中(http://www.qt.io/download-open-source/)下载下面两个软件: 在Windows Host下,下载Qt 5.5.1 for Windows 64-bit (VS 2013, 823 MB) ;