(嵌入式实验1)
- 格式:doc
- 大小:1.34 MB
- 文档页数:3
嵌入式系统实验一存储器实验嵌入式系统实验一-存储器实验2022春季嵌入式系统课程实验报告《嵌入式系统》课程实验报告学生姓名:班级:讲师:记分及评价:项目满分:5分一、实验名称记忆实验二、实验目的了解S3C2410X处理器的内部存储空间分配;掌握存储区域配置方法;掌握对存储区进行读写访问的方法。
三、实验内容熟练使用命令脚本文件对arm存储控制器进行正确配置。
使用c语言编程,实现对ram的读写访问。
四、实验原理s3c2410a的存储器控制器提供访问外部存储器所需要的存储器控制信号,具有以下特性:●支持小/大端(通过软件选择)。
●地址空间:每个bank有128mb(总共有8个bank,共1gb)。
●除bank0只能是16/32位宽之外,其他bank都具有可编程的访问位宽(8/16/32位)。
●总共有8个存储器bank(bank0~bank7):一其中6个用于rom,sram等;一剩下2个用于rom,sram,sdram等。
●7个固定的存储器bank(bank0~bank6)起始地址。
●最后一个bank(bank7)的起始地址是可调整的。
●最后两个bank (bank6和bank7)的大小是可编程的。
● 所有内存库的访问周期都是可编程的。
● 可以通过插入外部等待来延长总线访问周期。
● 支持SDRAM的自刷新和断电模式。
《嵌入式系统》课程实验报告2021年春季五、实验结果超级终端上显示一下信息:六、练习编写程序对sram进行字节的读写访问。
#包括\voidmemory_test(void){因蒂;uint16tdata;intmemerror=0;uint16t*pt;2022春季嵌入式系统课程实验报告uart_printf(\0x00e00000,_ram_startaddress+0x00f00000);pt=(uint16t*)(_ram_startaddress+0x00e0000);//记忆书写while((uint32t)pt<(_ram_startaddress+0x00f00000)){*pt=(uint16t)pt;pt++;}//memoryreaduart_uuuprintf(\memorytest(%xh-%xh):rd\\n\uuu内存_uuuu起始地址+0x00e00000,uuu内存_uuu起始地址+0x00f00000);pt=(uint16t*)(_ram_startaddress+0x00e00000);而((uint32t)pt<(_ram_startaddress+0x00f00000)){data=*pt;如果(数据!=(uint16t)pt){memerror=1;uart_uPrintf(\break;}pt++;}if(memerror==0)uart_printf(\}。
《嵌入式系统设计(实验课)》内容安排《嵌入式系统设计(实验课)》是《嵌入式系统设计》课程的一个重要环节。
通过实验,学生可以对嵌入式系统的设计与开发过程有更深地体会。
实验课共八次,每次2学时,实验内容结合课程内容,介绍一般的实验开发流程和软件硬件开发环境,并辅之以典型的嵌入式程序设计实例,使学生掌握基本的嵌入式软件开发技能。
大量的具有实际应用背景的实验,更将理论与实践结合起来,使实验内容更加生动。
实验报告要求一、实验名称:说明:本次实验的名称二、实验目的:说明:本次实验的主要目的,参考每次的实验指导书三、实验环境:说明:实验用到的硬件软件环境。
四、实验内容与步骤:说明:实现实验目的而进行的实验内容,如果有步骤要求则简要列出步骤五、实验报告总结:说明:对本次实验的总结,1.画出主函数的程序流程图,2.重写主程序.或者:自拟一个新的应用,参照本次实验的主程序,重新设计主程序并给出详尽注释。
3.其他,本次实验得到了什么?收获是什么?有些什么别的想法?六、建议与意见:说明:对于此次实验内容或在实验过程中有任何问题或建议,以及对于改善实验效果有什么建议,均可提出。
在书写实验报告的过程中,主要是帮助自己回顾和总结实验。
重点放在第五部分,前四项可以十分简要地列写,第六项有则提出,无则不写。
实验一嵌入式微处理器系统的开发环境一、实验环境PC机一台软件: ADS 1.2集成开发环境一套二、实验目的1.了解嵌入式系统及其特点;2.熟悉嵌入式系统的开发环境和基本配置并能编写简单的汇编程序三、实验内容1.嵌入式系统的开发环境、基本配置2.使用汇编指令完成简单的加法实验四、实验步骤(1)在D:\新建一个目录,目录名为experiment。
(2)点击 WINDOWS 操作系统的“开始|程序|ARM Developer Suite v1.2 |Code Warrior for ARM Developer Suite”启动Metrowerks Code Warrior,或双击“ADS 1.2”快捷方式启动。
实验一熟悉Linux开发环境一、实验目的1.熟悉Linux开发环境,学习Linux开发环境的配置和使用,掌握Minicom串口终端的使用。
2.学习使用Vi编辑器设计C程序,学习Makefile文件的编写和armv4l-unkonown-linux-gcc编译器的使用,以及NFS方式的下载调试方法。
3.了解UP-NETARM2410-S嵌入式实验平台的资源布局与使用方法。
4.初步掌握嵌入式Linux开发的基本过程。
二、实验内容本次实验使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。
创建一个新目录,并在其中编写hello.c和Makefile文件。
学习在Linux 下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。
下载已经编译好的文件到目标开发板上运行。
三、预备知识C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。
四、实验设备及工具(包括软件调试工具)硬件:UP-NETARM2410-S嵌入式实验平台、PC机Pentium 500以上, 硬盘10G以上。
软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境五、实验步骤1、建立工作目录[root@zxt smile]# mkdir hello[root@zxt smile]# cd hello2、编写程序源代码在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,我们在开发过程中推荐使用vim,用户需要学习vim的操作方法,请参考相关书籍中的关于vim的操作指南。
Kdevelope、anjuta软件的界面与vc6.0 类似,使用它们对于熟悉windows环境下开发的用户更容易上手。
实际的hello.c源代码较简单,如下:#include <stdio.h>main(){printf(“hello world \n”);}我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:[root@zxt hello]# vi hello.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:wq”保存并退出。
课程实验报告实验名称:嵌入式系统实验专业班级:计算机科学与技术x班学号:Ux姓名:x合作者:x实验时间:xxxx年xx月xx日计算机科学与技术学院试验一:bootloader (ads、引导)一、实验任务1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心二、实验内容编写串口接收数据函数编写串口发送数据函数学习ads、jtag调试、flash烧写打印菜单,等待用户输入下载并运行linux核心配置主机的nfs服务器,与linux核心连接三、实验步骤1.编写串口接收数据函数编写串口发送数据函数修改bootloader:菜单、串口收发、命令行;接收串口数据并做相应处理:while(1){打印菜单并等待用户输入;switch(ch) //根据用户输入做相应处理{case '1':imgsize=xmodem_receive((char *)KERNEL_BASE, MAX_KERNEL_SIZE);if(imgsize==0) //下载出错;else //下载成功;break;case '3':nand_read((unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024);case '2':BootKernel(); //这里是不会返回的,否则出错;break;default:break;}}Bootloader的main()函数打印菜单:int main(void){ARMTargetInit(); //目标板初始化;//接收用户命令,传递linux核心;Uart_puts("Menu:\n\r");Uart_puts("1.Load kernel via Xmodem;\n\r");Uart_puts("2.Boot linux; \n\r");Uart_puts("3.Load kernel from flash and boot; \n\r");Uart_puts("Make your choice.\n\r");do{ch=Uart_getc();}while(ch!='1' && ch!='2' && ch!='3');return 0;}串口读写:void Uart_putc(char c){while(!SERIAL_WRITE_READY());((UTXH0) = (c));}unsigned char Uart_getc( ){while(!SERIAL_CHAR_READY());return URXH0;}2.使用ads1.2编译bootloader;3.使用uarmjtag下载、调试bootloader;4.使用axd查看变量、内存,单步跟踪;5.配置超级终端,与bootloader通讯;6.配置nfs;编辑/etc/export文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs restart测试nfs服务器是否正常运行:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt7.以root用户启动cutecom,将cutecom配置改为115200 bps,8位,1位停止位,无校验,xmodem,no line end;8.使用bootloader重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统;9.启动Linux核心运行,察看结果;10.linux核心能够运行到加载root步骤,说明bootloader正常运行;11.将bootloader烧写到flash中,重启目标板电源,察看bootloader是否烧写正常,下载核心测试;目标板linux系统正常运行到命令行模式下,能够正常输入linux命令,说明实验成功。
信息工程学院嵌入式系统实验报告实验一2410经典Linux系统烧写班级:计算机XXX班学号:XXXXXXXX姓名:XXXXXX指导老师:李长悦一、实验目的windows xp下进行Linux系统烧写即恢复到出厂状态时,需要的文件在光盘中的Linux\img 目录和flashvivi目录下提供。
烧写2410-CL linux操作系统包vivi,kernel,root三个步骤,除此我们还要烧写应用程序,这四个文件分别为:vivi ----linux操作系统启动的bootloader;zImage ----linux操作系统内核;root.cramfs ----根文件系统;yaffs.tar.bz2 ----应用程序压缩包。
二、实验内容1.烧写vivi1.1把并口线插到pc机的并口,并把并口的另一端与实验箱上端的UP-LINK相连,打开2410-CL电源(12V)。
1.2把整个GIVEIO目录(在光盘的img/flashvivi目录下)拷贝到c:/windows下,并把该目录下的giveio.sys文件拷贝到c:/windows/system32/drivers下。
1.3在我的电脑里打开控制面板,选添加硬件,点击“下一步”,如下图所示:选择“是,我已经连接了此硬件”然后点击“下一步”,如下图所示:选中“添加新的硬件设备”然后点击“下一步”,如下图所示:选中“安装我手动从列表选择的硬件”后点击“下一步”,如下图所示:选择“显示所有设备”然后点击“下一步”,如下图所示:选择“从磁盘安装”然后点击“下一步”,如下图所示:选择“浏览”,指定驱动为C:\WINDOWS\GIVEIO\giveio.inf文件,如下图所示:选择giveio.inf文件,然后点击“打开”,如下图所示:然后选择“确定”,如下图所示:点击“下一步”至“完成”即安装好驱动。
如下图所示:1.4在d盘新建一目录bootloader,把sjf2410-s.exe(在flashvivi目录下)和要烧写的vivi,linux 操作系统内核,根文件系统和应用程序压缩包拷贝到该目录下。
嵌入式系统实验报告学号:姓名:班级:13电子信息工程指导老师:苏州大学电子信息学院2016年12月实验一:一个灯的闪烁1、实验要求实现PF6-10端口所连接的任意一个LED灯点亮2、电路原理图图1 LED灯硬件连接图3、软件分析RCC_Configuration(); /* 配置系统时钟*/GPIO_Configuration(); /* 配置GPIO IO口初始化*/ for(;;){GPIOF->ODR = 0xfcff; /* PF8=0 --> 点亮D3 */Delay(1000000);GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */Delay(1000000);4、实验现象通过对GPIOF8的操作,可以使LED3闪烁5、实验总结这是第一次使用STM32开发板,主要内容是对IO端口进行配置,点亮与IO端口相连接的LED灯,闪烁周期为2S。
通过本实验对STM32开发板的硬件原理有了初步了解。
实验二:流水灯1、实验要求实现PF6-10端口所连接的5个LED灯顺次亮灭2、电路原理图图1 流水灯硬件连接图3、软件分析int main(void){RCC_Configuration();/* 配置系统时钟*/GPIO_Configuration();/* 配置GPIO IO 口初始化*/for(;;){GPIOF->ODR = 0xffbf;/* PF6=0 --> 点亮LED1 */Delay(5000000);GPIOF->ODR = 0xff7f;/* PF7=0 --> 点亮LED2 */Delay(5000000);GPIOF->ODR = 0xfeff;/* PF8=0 --> 点亮LED3 */Delay(5000000);GPIOF->ODR = 0xfdff;/* PF9=0 --> 点亮LED4 */Delay(5000000);GPIOF->ODR = 0xfbff;/* PF10=0 --> 点亮LED5 */ }}4、实验现象LED1~LED5依次点亮,亮灭的时间间隔都为1S。
《嵌入式系统导论》实验报告学院:学号:姓名:上海工程技术大学电子电气工程学院实验一GPIO(按键和LED)实验一、实验要求1 、掌握基于STM32F103微控制器的嵌入式系统、仿真器和开发用PC机之间的连接方法,能够搭建基于STM32F103微控制器的嵌入式系统交叉开发环境。
2 、熟悉常用的嵌入式开发工具KEIL MDK或IAR EWARM的操作环境和基本功能(包括编辑、编译、链接、调试和下载等),学会创建、配置和管理STM32工程,掌握嵌入式程序的基本调试方法,学会使用逻辑分析仪窗口和外设窗口等信息窗口调试嵌入式程序。
3 、理解LED和按键的构件原理,学会设计它们与微控制器间的接口电路4 、掌握STM32F103微控制器GPIO的工作原理,熟悉STM32的GPIO库函数5 、学会使用STM32的GPIO库函数在KEIL MDK或IAR EWARM下开发基于LED和按键的简单嵌入式应用程序二、实验环境1 、硬件:ALIENTEK STM32F103嵌入式开发板2 、软件:KEIL MDK或IAR EW ARM三、实验内容1 、流水灯实验一:在KEIL MDK或IAR EW ARM 中建立STM32工程,并使用GPIO库函数和延时循环设计基于无限循环架构的嵌入式应用程序,使开发板上的红色LED以一定周期闪烁。
采用软件仿真的方式调试程序,通过“Logic Analyzer”,观察程序模拟运行时连接红色LED的引脚PA8上的输出波形。
采用硬件下载的方式调试程序,观察程序下载硬件运行时红色LED的闪烁情况。
2 、按键控制LED实验:在KEIL MDK或IAR EW ARM 中建立STM32工程,并使用GPIO库函数设计基于无限循环架构的嵌入式应用程序,实现以下功能:当按键KEY0按下时,目标板上红色LED 点亮;当按键KEY0释放时,目标板上红色LED熄灭。
采用软件仿真的方式调试程序,通过“Logic Analyzer”和“Peripherals→GPIOC”,观察程序模拟运行时连接红色LED的引脚PA8和连接按键KEY0的PC5上的输出波形。
嵌入式实验报告_ARM的串行口实验一、实验目的本次实验的主要目的是深入了解和掌握 ARM 处理器的串行口通信原理及编程方法。
通过实际操作和编程实践,能够实现基于 ARM 的串行数据收发功能,为后续在嵌入式系统中的应用打下坚实的基础。
二、实验原理串行通信是指数据一位一位地顺序传送。
在 ARM 系统中,串行口通常由发送器、接收器、控制寄存器等组成。
发送器负责将并行数据转换为串行数据并发送出去,接收器则将接收到的串行数据转换为并行数据。
控制寄存器用于配置串行口的工作模式、波特率、数据位长度、停止位长度等参数。
波特率是串行通信中的一个重要概念,它表示每秒传输的比特数。
常见的波特率有 9600、115200 等。
在本次实验中,需要根据实际需求设置合适的波特率,以保证数据传输的准确性和稳定性。
三、实验设备与环境1、硬件设备:ARM 开发板、USB 转串口线、电脑。
2、软件环境:Keil MDK 集成开发环境、串口调试助手。
四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM 芯片型号,并配置工程的相关参数,如时钟频率、存储分配等。
2、编写代码(1)初始化串行口首先,需要设置串行口的工作模式、波特率、数据位长度、停止位长度等参数。
例如,设置波特率为 115200,数据位长度为 8 位,停止位长度为 1 位。
(2)发送数据通过编写发送函数,将要发送的数据写入串行口的数据寄存器,实现数据的发送。
(3)接收数据通过中断或者查询的方式,读取串行口的接收寄存器,获取接收到的数据。
(4)主函数在主函数中,调用发送函数发送数据,并处理接收的数据。
3、编译下载编写完成代码后,进行编译,确保代码没有语法错误。
然后,将生成的可执行文件下载到 ARM 开发板中。
4、连接设备使用 USB 转串口线将 ARM 开发板与电脑连接起来,并在电脑上打开串口调试助手,设置与开发板相同的波特率等参数。
5、测试实验在串口调试助手中发送数据,观察开发板是否能够正确接收并回传数据。
《嵌入式系统技术》实训报告1、实验目的z了解S3C2440A 外部中断的工作原理。
z掌握S3C2440A 外部中断的使用方法。
2、实验设备z PC 机、Multi-ICE 仿真器、2440A 实验箱。
3、实验内容z通过外部K1、K2、K3、K4、K5、K7 按键触发外部中断E INT1、EINT2、EINT3、EINT4、EINT5、EINT74、实验原理4.1 ARM 的异常中断类型在嵌入式系统中外部设备的功能实现主要是靠中断机制来实现的。
中断功能可以解决CPU 内部运行速度远远快于外部总线速度而产生的等待延时问题。
ARM 提供的FIQ 和IRQ 异常中断用于外部设备向C PU 请求中断服务,一般情况下都是采用I RQ 中断。
七种异常中断中断过程框图4.2 异常中断响应过程和返回过程异常中断的响应过程:1).保存处理器当前状态寄存器C PSR 的值到备份程序状态寄存器S PSR 中。
2).设置但前程序状态寄存器CPSR 的值,其中包括:设置CPSR 响应位的值,使处理器进入特定的处理器模式;按要求屏蔽中断,通常应该屏蔽I RQ 中断。
在F IQ 中断时屏蔽F IQ 中断。
3).设置L r 寄存器。
将相应中断模式的L r 寄存器的值设为异常中断的返回地址。
4).处理程序计数器PC,将PC 值设为相应的中断向量的地址,从而实现跳转以执行中断服务程序。
异常中断的返回当处理器执行完以上流程之后,处理器已经从中断向量进入异常处理的状态。
异常中断处理完毕之后,在异常中断程序的末端,处理器进入异常中断的返回状态,其流程如下:1).恢复状态寄存器。
将保存的备份程序状态寄存器SPSR 值赋给当前程序状态寄存器CPSR。
2).将返回地址赋值到程序计数器(PC)。
这样程序将返回到异常中断产生的下一条指令或出现问题的指令处执行。
需要注意的是:对于不同的异常中断,其返回地址的计算方法也是不同的,IRQ 和F IQ 异常中断产生时,程序计数器PC 已经更新,而SWI 中断和未定义指令中断时由当前指令自身产生的,程序计数器P C 尚未更新,所以要计算出下一条指令的地址来执行返回操作;指令预取指中指异常中断和数据访问中断要求,返回到出现异常的执行现场,重新执行操作。
嵌⼊式实验报告实验⼀流⽔灯实验1实验⽬的1、掌握如何利⽤STM32F407IGTb芯⽚的I/O⼝控制LED。
2、了解掌握STM32F407GPIO的使⽤。
3、点亮⼀个led,使4个LED灯循环流动,达到流⽔效果。
2实验环境FS-STM32F407开发平台ST-Link仿真器RealView MDK5.10集成开发软件STM32CUBEMX图形开发软件PC机Xp3实验内容熟悉开发环境,构建基于固件库的⼯程,编写实验代码实现流⽔灯⼯程,实现FS-STM32F407开发平台上的LED循环闪烁。
调试编译好固件程序后,将程序下载到开发板,按复位键观察实验结果。
4实验步骤1.new project-stm32f4-stm32f407/417-LQFP176-STM32F407IGTX然后点⿏标⽣成。
2.将4个引脚设置为GPIO_Output。
3.如图所⽰设置RCC。
4.将下图时钟频率改为168。
5.点击⽣成按钮--选择⼯程路径Project Location-⼯程名字Project Name-⼯具/开发集成⼯具(Toolchain/IDE)(MDK-ARM V5)。
6.在Code Generator当中,在Generated Files当中,将Generate peripheral。
勾上然后OK。
5实验结果编译完程序后,下载到实验箱,按RESET键,按键数码管附近D4,D3,D2,D1附近四个灯循环亮灭,⽽且每次只有⼀个灯亮,达到流⽔效果。
实验⼆串⼝实验1实验⽬的1、了解TM32F407GPIO的配置过程及使⽤⽅法。
2、查找到串⼝对应的引脚,达到串⾏的效果。
3、了解实验箱底板图等。
2实验环境FS-STM32F407开发平台ST-Link仿真器RealView MDK5.10集成开发软件PC机XP、Window7/8(32/64bit)串⼝调试⼯具串⼝交叉线3实验内容1、了解keil的使⽤2、STM32CUBEMX软件的使⽤3、查找到串⼝对应的引脚,达到串⾏的效果。
实验一ARM汇编指令一、实验目的1、初步学会使用Embest IDE for ARM 开发环境及ARM软件模拟器2、通过实验掌握简单ARM汇编指令的使用方法二、实验设备1、硬件:PC机2、软件:Embest IDE 2003集成开发环境,Windows 98/2000/NT/XP三、实验原理1、ARM通用寄存器1)不分组寄存器R0~R7这意味着在所有处理器模式下,它们每一个都访问一样的32位寄存器,它们是真正的通用寄存器,没有体系结构隐含的特殊用途。
2)分组寄存器R8~R14它们每一个访问的物理寄存器取决于当前的处理器模式。
若要访问特定的物理寄存器而不依赖当前的处理模式,则要使用规定的名字。
寄存器R8~R12各有两组物理寄存器:一组为FIQ模式,另一组除了FIQ以外的所有模式。
寄存器R8~R12没有任何指定的特殊用途。
只是使用R8~R14来简单的处理中断3)程序寄存器R15寄存器R15用做程序计数器2、存储器格式ARM体系结构将存储器看做从零地址开始的字节的线性组合。
字节0~3存放第一个字节,字节4~7存放第二个字节,以此类推1)大端格式在这种格式中,字数据的高位字节存储在低地址中,而子数据低位字节存储在高地址中2)小端格式在这种格式中,字数据的高位字节存储在高地址中,而子数据低位字节存储在低地址中四、实验内容及步骤1、实验A(1)新建工程:运行:Embest IDE 集成开发环境,选择FILE→NEW→WORKPACE菜单项,弹出对话框,输入相关内容(2)建立源文件:选择FILE->NEW菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行。
编辑完后保存(3)添加源文件:选择PROJECT->ADD TO PROJECT->FILES项,或单击工程管理窗口中的相应右键快捷菜单命令,打开文件选择对话框,在工程目录下选择刚才建立的源文件(4)基本设置:选择PROJECT->SETTINGS…..菜单项,或按下快捷键ALT+F7,弹出工程设置对话框,,对目标板所用处理器进行设置(5)生成目标代码:选择BUILD->BUILD XXX菜单项,或按下快捷键F7,生成目标代码。
西南科技大学嵌入式实验报告《嵌入式系统》
实验报告
姓名:
学号:
班级:
20xx年4月
实验一ARM汇编指令实验1
一、实验目的
1.初步学会使用ADS1.2 开发环境及ARM软件模拟器;
2.通过实验掌握简单ARM汇编指令的使用方法。
二.实验设备
1.硬件:PC机;
2.软件:ADS1.2集成开发环境。
Windows98/2000/NT/XP。
三.实验内容
1.熟悉开发环境的使用,并使用LDR/STR和MOV等指令访问寄存器或存储单元。
2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。
四.实验原理
ARM处理器共有37个寄存器:31个通用寄存器,包括程序计数器(PC),这些寄存器都是32位;6个状态寄存器,这些寄存器
也是32位,但只使用了其中的12位。
1.ARM通用寄存器
通用寄存器(R0~R15)可分为3类,即不分组寄存器
R0~R7.分组寄存器R8~R14.程序计数器R15。
2.存储器格式
ARM体系结构将存储器看作是从零地址开始的字节的线性组合。
字节0~3存放第一个字,字节4~7存放第2个字,以此类推。
ARM体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。
五.实验程序
1. 实验A参考程序
X EQU 45 :定义变量x,并赋值为45
Y EQU 64 :定义变量y,并赋值为64
STACK_TOP EQU 0x1000 :定义栈顶0x1000
AREA Example,CODE,READONLY :声明代码段
ENTRY :标识入口。
嵌⼊式实验⼀:LED灯点亮实验⼀:LED灯程序⼀、实验环境开发机环境操作系统:ubuntu 12.04交叉编译环境:arm-linux-gcc 4.3.26410板⼦内核源码:linux-3.0.1⽬标板环境:OK6410-A linux-3.0.1⼆、实验原理image.png图1-OK6410LED原理图image.png图2-LED原理图从上⾯的原理图可以得知,LED与CPU引脚的连接⽅法如下,低电平点亮。
LED1 -GPM0LED2 -GPM1LED3 -GPM2LED4 -GPM3image.png通过上⾯可以得知,需要先将GPM0设置为输出⽅式。
将相应的寄存器进⾏配置。
然后将GPMDAT寄存器的第0位置0灯亮,置1灯灭。
三、实验代码1.编写驱动程序#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <asm/uaccess.h> /* copy_to_user,copy_from_user */#include <linux/miscdevice.h>#include <linux/pci.h>#include <mach/map.h>#include <mach/regs-gpio.h>#include <mach/gpio-bank-m.h>#include <plat/gpio-cfg.h>#define LED_MAJOR 240int led_open(struct inode *inode, struct file *filp){unsigned tmp;tmp = readl(S3C64XX_GPMCON);tmp = (tmp & ~(0x7U << 1)) | (0x1U);writel(tmp, S3C64XX_GPMCON);printk("#########open######\n");return 0;}ssize_t led_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos){printk("#########read######\n");return count;}ssize_t led_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos) {char wbuf[10];unsigned tmp;printk("#########write######\n");copy_from_user(wbuf, buf, count);switch (wbuf[0]){case 0: //offtmp = readl(S3C64XX_GPMDAT);tmp |= (0xfU);writel(tmp, S3C64XX_GPMDAT);break;case 1: //ontmp = readl(S3C64XX_GPMDAT);tmp &= ~(0xfU);writel(tmp, S3C64XX_GPMDAT);break;default:break;}return count;}int led_release(struct inode *inode, struct file *filp){printk("#########release######\n");return 0;}struct file_operations led_fops = {.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_release,};int __init led_init(void){int rc;printk("Test led dev\n");rc = register_chrdev(LED_MAJOR, "led", &led_fops);if (rc < 0){printk("register %s char dev error\n", "led");return -1;}printk("ok!\n");return 0;}void __exit led_exit(void){unregister_chrdev(LED_MAJOR, "led");printk("module exit\n");return;}module_init(led_init);module_exit(led_exit);2.编写Makefile⽂件ifneq ($(KERNELRELEASE),)obj-m := driver_led.oelseKDIR := /work/linux-3.0.1all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symversendif3.编写测试⽂件#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main (void){int fd;char buf[10]={0,1,0,1};fd = open("/dev/my_led",O_RDWR);if (fd < 0){printf ("Open /dev/my_led file error\n");return -1;}while(1){write(fd,&buf[0],1);sleep(1);write(fd,&buf[1],1);sleep(1);}close (fd);return 0;}四、实验步骤1、编译驱动程序和测试程序在终端中运⾏:#make命令,编译成功⽣⽣下列⽂件在终端中运⾏:#arm-linux-gcc test.c -o test,编译成功⽣成⽂件2、将⽂件拷贝到SD卡3、将SD卡插⼊到OK6410开发板中4、在OK6410终端中运⾏程序加载驱动:#insmod sdcard/driver_led.ko创建设备⽂件:# mknod /dev/my_led c 240 0运⾏测试⽂件:#./sdcard/test卸载驱动程序:#rmmod sdcard/driver_led.ko5、运⾏结果此时可以看到OK6410开发板的4个LED灯⼀直同时点亮,然后熄灭。
昆明理工大学机电工程学院嵌入式系统设计与应用实验报告书实验名称:流水灯实验年级专业及班级:级机自班姓名:学号:指导教师:张文斌、高贯斌评定成绩:教师评语:实验时间: 2014 年 12 月 13 日实验一PORTA口输入、输出实验一、实验要求1.PORTA口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
2.PORTA0、PORTA1作输入口接两个拨动开关,PORTA2、PORTA3作输出口,接两个发光二极管,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
注:行数不够时可加行三、实验程序流程图P1口循环点灯程序框图p1口输入输出程序框图四、实验程序1流水灯#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */ void delay (){unsigned int i,k,j;for (i=0;i<600;i++)for (k=0;k<600;k++)}void main(void) {/* put your own code here */DDRA=0FXXPORTA=0FXXEnableInterrupts;for(;;) {PORTE=0x00;PORTB=0x01;delay();PORTE=0x00;PORTB=0x02;delay();PORTE=0x00;PORTB=0x04;delay();PORTE=0x00;PORTB=0x08;delay();PORTE=0x00;PORTB=0x10;delay();PORTE=0x00;PORTB=0x20;delay();PORTE=0x00;PORTB=0x40;delay();PORTE=0x00;PORTB=0x80;delay();PORTE=0x00;PORTB=0xFF;delay();_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}}2四个口做输入四个口做输出#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */ void main(void) {/* put your own code here */DDRA=0xFF;PORTA=0XFF;EnableInterrupts;for(;;) {If(PORTA_PA0==0)PORTA_PA5=0;else PORTA_PA5=01;If(PORTA_PA1==0)PORTA_PA6=0;else PORTA_PA6=01;If(PORTA_PA2==0)PORTA_PA4=0;else PORTA_PA4=01;If(PORTA_PA3==0)PORTA_PA7=0;else PORTA_PA7=01;_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}}五、实验现象以及碰到什么问题?如何解决?实验现象:程序输入后,单片机上的LED灯流动交替闪烁问题:在做更改时间,获取设置值时,出现按得次数、间隔时间与得到的值不符。
广州大学学生实验报告
开课学院及实验室:机械与电气工程学院、电子楼年月日
打开“文件浏览器”查看Ubuntu10.4的文件系统结构:点击主菜单“位置”→“主文件夹”。
板载Linux操作系统:Linux2.6.38(包括基本指令、文件目录、应用程序)Mini6410(Tiny6410)开发板,请参看《mini6410用户手册-20110520》的“
的超级终端或Ubuntu的串口终端(minicom)运行Linux的基本命令。
如:
ls
cd
显示文本文件内容命令cat
cat/touch/echo
cp
rm
mv
通过命令运行开发板的应用程序,请参看《mini6410用户手册-20110520》的
通过串口终端操作开发板”。
图1.8 连接开发板的超级终端
五、实验分析与总结
初初上手肯定不习惯,但是桌面做的很用心。
在Ubuntu里面命令几乎意味着一切。
有一些本来很简单的事通过命令会变得复杂,有一些复杂的事通过命令又会变得很简单。