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

相关文章

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python