嵌入式课程设计1
嵌入式课程设计

嵌入式课程设计一、课程目标知识目标:1. 理解嵌入式系统的基本概念,掌握其组成、原理和应用领域;2. 学习嵌入式编程的基本语法和技巧,能够阅读和分析简单的嵌入式程序;3. 了解嵌入式系统在不同行业中的应用案例,理解其对社会发展的意义。
技能目标:1. 能够运用所学知识设计简单的嵌入式系统电路,并进行调试;2. 掌握使用至少一种嵌入式编程语言进行程序设计,实现基本功能;3. 学会使用嵌入式系统的调试工具,具备初步的问题分析和解决能力。
情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发其探索精神和创新意识;2. 增强学生的团队合作意识,培养其在嵌入式项目中的沟通和协作能力;3. 引导学生关注嵌入式技术在国家战略和社会发展中的作用,树立正确的价值观。
课程性质:本课程为嵌入式系统入门课程,结合学生年级特点和教学要求,注重理论与实践相结合,强调知识的应用性和实践性。
学生特点:学生处于初中阶段,具有一定的电子技术和计算机基础,好奇心强,喜欢动手实践。
教学要求:通过本课程的学习,使学生掌握嵌入式系统的基础知识,培养其编程和动手能力,提高学生在实际项目中解决问题的能力。
同时,注重培养学生的团队合作精神和正确的价值观。
课程目标分解为具体学习成果,以便于教学设计和评估。
二、教学内容1. 嵌入式系统概述- 嵌入式系统的定义与组成- 嵌入式系统的应用领域及发展趋势2. 嵌入式系统硬件基础- 微控制器原理与结构- 常用传感器及其接口技术- 嵌入式系统电路设计基础3. 嵌入式编程语言- C语言基础及其在嵌入式系统中的应用- 汇编语言基础- 嵌入式编程技巧及编程规范4. 嵌入式系统软件开发- 嵌入式系统软件开发流程- 常用开发工具及环境配置- 调试与优化方法5. 嵌入式系统应用案例- 智能家居系统设计- 物联网应用案例分析- 嵌入式系统在机器人领域的应用6. 课程项目实践- 项目需求分析- 硬件电路设计与调试- 软件编程与功能实现- 项目展示与总结教学内容安排与进度:第一周:嵌入式系统概述第二周:嵌入式系统硬件基础第三周:嵌入式编程语言第四周:嵌入式系统软件开发第五周:嵌入式系统应用案例第六周:课程项目实践本教学内容根据课程目标,结合课本内容进行科学性和系统性地组织,注重理论与实践相结合,以培养学生的嵌入式系统设计与开发能力。
嵌入式课程设计报告

调试工具
使用GDB等调试工具进行程序调试, 可实现断点设置、变量查看、堆栈跟
踪等功能。
版本控制工具
使用Git等版本控制工具进行代码管理 ,实现多人协作开发、版本回溯等功 能。
性能分析工具
使用Valgrind等性能分析工具进行程 序性能分析,可实现内存泄漏检测、 函数调用关系分析等功能。
课程设计总结与展望
总结本次课程设计的经验教训和收 获,展望嵌入式系统未来的发展趋 势和应用前景。
02
硬件平台选择与搭建
常见嵌入式硬件平台比较
ARM平台
高性能、低功耗,广泛应用于智能手机、 平板电脑等移动设备。
PowerPC平台
高性能、高可靠性,适用于工业控制、航 空航天等高端应用设备、 数字电视等领域。
07
总结与展望
本次课程设计收获总结
理论与实践结合
通过本次课程设计,深入理解了 嵌入式系统的基本原理,同时将 理论知识应用于实际项目中,实 现了理论与实践的有机结合。
技能提升
在课程设计过程中,掌握了嵌入 式系统开发的基本技能,包括硬 件设计、软件编程和调试技术等 。
团队合作
与团队成员紧密合作,共同完成 了课程设计的任务,提高了团队 协作和沟通能力。
05
系统实现过程与代码展示
关键模块代码实现技巧分享
模块化设计
将系统划分为多个独立的功能模块,每个模块具有明 确的接口和功能,便于代码的管理和复用。
高效算法选择
针对系统需求,选择合适的算法和数据结构,以提高 代码执行效率。
代码优化
通过减少冗余代码、提高代码可读性和可维护性,降 低系统资源消耗。
系统集成测试方法论述
嵌入式课程设计报告
嵌入式简单课程设计教案

嵌入式简单课程设计教案一、课程目标知识目标:1. 理解嵌入式系统的基本概念,掌握其组成和功能。
2. 学习嵌入式编程的基本语法和常用指令。
3. 了解嵌入式系统的应用领域和发展趋势。
技能目标:1. 能够使用嵌入式开发环境,进行简单的程序编写和调试。
2. 学会使用嵌入式系统的输入输出接口,实现基本的功能控制。
3. 培养学生动手操作、问题解决和团队协作的能力。
情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发其探索精神和创新意识。
2. 增强学生的责任心和自信心,使其在嵌入式学习过程中保持积极态度。
3. 培养学生遵守实验规程,养成良好的实验习惯,注重团队合作。
课程性质:本课程为实践性较强的学科,结合理论教学和实验操作,培养学生对嵌入式系统的认识和实际操作能力。
学生特点:六年级学生,具备一定的计算机基础,好奇心强,喜欢动手实践,但注意力集中时间较短。
教学要求:注重理论与实践相结合,以学生为主体,引导他们主动探索、实践,提高解决问题的能力。
将课程目标分解为具体的学习成果,以便在教学过程中进行有效评估。
二、教学内容1. 嵌入式系统基本概念:介绍嵌入式系统的定义、组成、特点和应用领域,对应教材第一章内容。
2. 嵌入式编程基础:讲解嵌入式编程的基本语法、数据类型、运算符和常用指令,对应教材第二章内容。
3. 嵌入式系统开发环境:介绍嵌入式开发环境搭建、编译器使用和程序下载,对应教材第三章内容。
4. 嵌入式系统输入输出接口:学习嵌入式系统的GPIO、中断、定时器等接口的使用,对应教材第四章内容。
5. 嵌入式系统应用实例:分析典型的嵌入式系统应用案例,如温度控制、智能家居等,对应教材第五章内容。
教学安排和进度:第一周:嵌入式系统基本概念第二周:嵌入式编程基础第三周:嵌入式系统开发环境第四周:嵌入式系统输入输出接口第五周:嵌入式系统应用实例及实验操作教学内容注重科学性和系统性,结合教材章节安排,确保学生能够逐步掌握嵌入式系统的相关知识。
嵌入式开发系统课程设计

嵌入式开发系统课程设计一、课程目标知识目标:1. 理解嵌入式系统的基本概念、组成和分类;2. 掌握嵌入式开发环境搭建及编程基础;3. 学习嵌入式系统设计与实现的基本方法;4. 了解嵌入式系统在实际应用中的发展及其在各领域的应用。
技能目标:1. 能够独立搭建嵌入式开发环境,进行基本的程序编写和调试;2. 学会使用常见的嵌入式系统设计工具和软件;3. 掌握嵌入式系统硬件与软件的协同设计方法;4. 能够运用所学知识解决实际问题,完成一个小型嵌入式项目的设计与实现。
情感态度价值观目标:1. 培养学生对嵌入式系统开发的兴趣,激发其探究精神和创新意识;2. 培养学生的团队协作和沟通能力,使其能够在项目实践中相互学习、共同进步;3. 增强学生的社会责任感,使其认识到嵌入式技术在国家战略和民生领域的重大意义;4. 引导学生树立正确的价值观,关注技术发展对社会和环境的影响,培养其良好的职业道德。
二、教学内容1. 嵌入式系统概述:介绍嵌入式系统的基本概念、发展历程、特点及应用领域,对应教材第一章内容。
- 嵌入式系统定义与分类- 嵌入式系统的历史与发展趋势- 嵌入式系统的应用领域2. 嵌入式系统硬件平台:讲解嵌入式硬件系统的组成、结构与原理,对应教材第二章内容。
- 嵌入式处理器- 存储器与I/O接口- 嵌入式系统硬件设计方法3. 嵌入式系统软件平台:介绍嵌入式操作系统、编程语言及软件开发工具,对应教材第三章内容。
- 嵌入式操作系统原理与应用- 嵌入式编程语言(C、汇编等)- 软件开发工具与调试方法4. 嵌入式系统设计与实现:阐述嵌入式系统设计与实现的方法与步骤,对应教材第四章内容。
- 系统需求分析- 硬件与软件协同设计- 系统测试与优化5. 嵌入式项目实践:结合实际案例,让学生动手实践嵌入式项目设计与开发,对应教材第五章内容。
- 项目选题与需求分析- 硬件系统设计与搭建- 软件编程与调试- 系统测试与总结教学内容安排与进度根据学生实际情况进行调整,确保学生能够循序渐进地掌握嵌入式系统的基本知识和技能。
嵌入式课程设计计划

嵌入式课程设计计划
一、课程设计内容
基于stm32实验板和给定的电路板,完成相应的功能;
给定电路板的资源包括:
电路原理图、PCB图;包括的功能部件:步进电机,数码管,红外遥控、超声波传感器;
实现功能:
1、将元器件焊接到板子上;
2、红外遥控功能实现
3、实现超声波测距和电机的控制;模拟车辆倒车情况,根据测定的距离控
制电机转动速度,距离越近,电机转动越慢,同时显示距离或电机转动速度,距离到一定程度蜂鸣器鸣叫;
4、编写课程设计报告
课程设计目的;
课程设计具体内容;
设计方案;
详细设计:电路板电路原理、程序流程和说明
课设总结
5、最后将元器件焊接下来,清理干净电路板
二、课程设计形式
1、两人或一人一组,报告一份,每人必须说明主要工作
2、成绩评定:
平时成绩:20%,作品:70%,报告:10%
三、课程设计安排
四、电路板原理图和PCB图
原理图:
PCB图:
其余资源参考附件。
嵌入式课课程设计简易

嵌入式课课程设计简易一、教学目标本课程的教学目标是使学生掌握嵌入式系统的基本概念、原理和关键技术,培养学生运用嵌入式系统进行创新设计和应用的能力。
具体目标如下:1.知识目标:(1)理解嵌入式系统的定义、特点和分类;(2)掌握嵌入式处理器的基本原理和选型方法;(3)了解嵌入式操作系统的基本概念和主流嵌入式操作系统;(4)熟悉嵌入式系统的设计方法和开发流程;(5)掌握嵌入式系统编程的基本技巧。
2.技能目标:(1)能够运用嵌入式系统的基本原理和关键技术进行创新设计;(2)能够选用合适的嵌入式处理器和操作系统进行项目开发;(3)能够运用嵌入式编程技巧编写符合实际应用需求的程序;(4)能够进行嵌入式系统的调试和优化。
3.情感态度价值观目标:(1)培养学生对嵌入式系统的兴趣和好奇心,激发学生学习嵌入式系统的热情;(2)培养学生团队合作精神和创新意识,使学生在嵌入式系统设计过程中能够充分发挥团队协作和创造力;(3)培养学生具有良好的职业道德,使学生在嵌入式系统设计和开发过程中能够遵循行业规范,保证产品质量和安全性。
二、教学内容本课程的教学内容主要包括嵌入式系统的基本概念、嵌入式处理器、嵌入式操作系统、嵌入式系统设计方法和编程技巧。
具体安排如下:1.嵌入式系统的基本概念:介绍嵌入式系统的定义、特点、分类和应用领域;2.嵌入式处理器:讲解嵌入式处理器的基本原理、选型方法和常用嵌入式处理器;3.嵌入式操作系统:介绍嵌入式操作系统的概念、功能、分类和主流嵌入式操作系统;4.嵌入式系统设计方法:讲解嵌入式系统的设计流程、硬件选型、软件设计和系统集成;5.嵌入式编程技巧:介绍嵌入式编程的基本方法、编程规范和调试技巧。
三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括讲授法、案例分析法、实验法和讨论法。
1.讲授法:通过讲解嵌入式系统的基本概念、原理和关键技术,使学生掌握相关知识;2.案例分析法:通过分析典型的嵌入式系统应用案例,使学生了解嵌入式系统的实际应用;3.实验法:安排学生在实验室进行嵌入式系统设计和编程实践,提高学生的动手能力;4.讨论法:学生进行小组讨论,培养学生的团队合作精神和创新思维。
大学嵌入式方向课程设计

大学嵌入式方向课程设计一、课程目标知识目标:1. 理解嵌入式系统的基础知识,掌握其硬件和软件的基本组成、工作原理及相互关系。
2. 学会使用至少一种嵌入式编程语言,如C或Python,编写简单的嵌入式程序。
3. 了解嵌入式系统在不同领域的应用,如物联网、智能家居、自动化控制等。
技能目标:1. 能够运用所学知识,设计并实现简单的嵌入式项目,具备基本的嵌入式系统开发能力。
2. 掌握使用常见的嵌入式开发工具和调试方法,如Keil、IAR等。
3. 能够分析嵌入式系统的性能,针对实际问题提出合理的解决方案。
情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发他们探索新技术、新领域的热情。
2. 培养学生的团队协作精神,让他们在项目实践中学会沟通、分享和合作。
3. 培养学生的创新意识,鼓励他们勇于尝试,不断挑战自我,为我国嵌入式技术的发展贡献力量。
课程性质:本课程为大学嵌入式方向的课程,旨在使学生掌握嵌入式系统的基础知识和技能,培养具备实际开发能力的人才。
学生特点:大学嵌入式方向的学生具备一定的电子技术、计算机技术和编程基础,对新技术充满好奇,喜欢动手实践。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,强化项目实践,培养学生具备实际开发能力。
在教学过程中,将目标分解为具体的学习成果,以便进行教学设计和评估。
二、教学内容1. 嵌入式系统概述:介绍嵌入式系统的定义、发展历程、应用领域及发展趋势,对应教材第一章内容。
- 嵌入式系统的基本概念- 嵌入式系统的历史与发展- 嵌入式系统的应用领域及前景2. 嵌入式硬件基础:讲解嵌入式系统的硬件组成、原理及性能指标,对应教材第二章内容。
- 嵌入式处理器- 存储器与I/O接口- 传感器与执行器3. 嵌入式软件基础:介绍嵌入式操作系统、编程语言及软件开发流程,对应教材第三章内容。
- 嵌入式操作系统原理- 嵌入式编程语言(C/Python)- 嵌入式软件开发流程4. 嵌入式系统设计与实践:通过项目实践,使学生掌握嵌入式系统的设计方法,对应教材第四章内容。
嵌入式软件课程设计

嵌入式软件课程设计一、课程目标知识目标:1. 理解嵌入式软件的基本概念、原理及开发流程;2. 掌握嵌入式系统硬件与软件的协同设计方法;3. 学会使用至少一种嵌入式编程语言(如C/C++)进行程序设计;4. 了解嵌入式操作系统的基本原理及其在嵌入式系统中的应用。
技能目标:1. 能够运用所学的嵌入式软件知识,独立完成简单的嵌入式项目设计;2. 培养学生具备分析、解决实际嵌入式系统问题的能力;3. 提高学生的编程实践能力,能够编写出高效、可靠的嵌入式程序;4. 培养学生团队协作、沟通表达的能力。
情感态度价值观目标:1. 培养学生对嵌入式软件领域的兴趣,激发其探索精神和创新意识;2. 增强学生自主学习、持续学习的意识,养成良好的学习习惯;3. 培养学生具备责任心,使其认识到嵌入式软件在国家安全、社会发展和人民生活中的重要作用;4. 培养学生遵守法律法规,遵循职业道德,树立正确的价值观。
本课程针对高年级学生,结合学科特点和教学要求,注重理论与实践相结合,以培养学生的嵌入式软件设计能力为核心,旨在提高学生的专业知识水平、实践技能和综合素质。
课程目标的设定旨在使学生在掌握基本理论知识的基础上,能够独立完成实际嵌入式项目,为将来从事相关领域工作打下坚实基础。
二、教学内容1. 嵌入式系统概述:介绍嵌入式系统的基本概念、发展历程、应用领域及发展趋势;教材章节:第1章 嵌入式系统概述2. 嵌入式硬件基础:讲解嵌入式处理器、存储器、I/O接口、中断系统等硬件知识;教材章节:第2章 嵌入式硬件基础3. 嵌入式编程语言:学习C/C++语言在嵌入式系统中的应用,重点掌握指针、结构体、位操作等;教材章节:第3章 嵌入式编程语言4. 嵌入式系统软件设计:介绍嵌入式系统软件设计方法、开发流程及调试技巧;教材章节:第4章 嵌入式系统软件设计5. 嵌入式操作系统:讲解嵌入式操作系统的原理、架构及常见嵌入式操作系统(如FreeRTOS、UC/OS等);教材章节:第5章 嵌入式操作系统6. 嵌入式系统应用案例:分析典型嵌入式应用案例,使学生了解实际项目中嵌入式软件的设计方法;教材章节:第6章 嵌入式系统应用案例7. 课程实践:组织学生进行课程设计,完成具有实际应用价值的嵌入式项目;教材章节:第7章 课程实践教学内容安排与进度:按照教材章节顺序进行教学,每个章节安排2-4个学时,共计16周。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式课程设计系别:计算机与通信工程学院班级:通信工程08-1班姓名:####学号:33333333333郑州轻工业学院计算机与通信工程学院2011年12月郑州轻工业学院课程设计任务书题目DMA传送编程专业、班级通信工程08-1学号 3333333姓名333主要内容、基本要求、主要参考文献等:1、主要内容(1) 编写单字节方式、双字节方式和四字节方式常规内存拷贝及时间检测程序(2) 编写DMA方式内存拷贝及时间检测程序(3) 比较DMA方式内存拷贝及常规内存拷贝的效率2、基本要求(1) 掌握S3C44B0 DMA控制器的使用(2) 掌握DMA软件编程方法3、主要参考文献【1】马忠梅,马广云,徐英惠,田泽.ARM嵌入式处理器结构与应用基础.北京:北京航天航空大学出版社,2002【2】田泽.嵌入式系统开发与应用实验教程.北京航空航天大学出版社,2004【3】周立功.ARM微控制器基础与实战[M].北京航天航空大学出版社,2003完成期限:指导教师签名:张涛张彦课程负责人签名:张涛张彦目录一、课程设计的基本任务----------------------------4二、课程设计的基本要求----------------------------4三、预备知识--------------------------------------------4四、实验设备--------------------------------------------4五、基础知识--------------------------------------------4六、课程设计说明书----------------------------------7七、程序代码-------------------------------------------8DMA 传送编程.一、课程设计的基本任务了解DMA传送原理掌握S3C44B0 DMA控制器的使用掌握DMA软件编程方法二、课程设计的基本要求编写单字节方式、双字节方式和四字节方式常规内存拷贝及时间检测程序编写DMA方式内存拷贝及时间检测程序比较DMA方式内存拷贝及常规内存拷贝的效率三、预备知识了解ADT集成开发环境的基本功能了解DMA的原理以及处理步骤四、实验设备JX44B0教学实验箱ADT1000仿真器和ADT IDE集成开发环境串口连接线五、基础知识直接数据存储- DMADMA方式当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,查询方式和中断方式可能不能满足要求直接存储器存取(DMA)就是为解决这个问题提出的采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送典型的DMA控制器(以下简称DMAC)的工作电路DMA数据传送的工作过程1) DMAC发出DMA传送请求2) DMAC通过连接到CPU的HOLD信号向CPU提出DMA请求3) CPU在完成当前总线操作后会立即对DMA请求做出响应CPU的响应包括两个方面:CPU将控制总线、数据总线和地址总线浮空,即放弃对这些总线的控制权CPU将有效的HLDA信号加到DMAC上,以通知DMACCPU已经放弃了总线的控制权4) CPU将总线浮空,即放弃了总线控制权后,由DMAC接管系统总线的控制权,并向外设送出DMA的应答信号5) DMAC送出地址信号和控制信号,实现外设与内存或内存之间大量数据的快速传送6) DMAC将规定的数据字节传送完之后,通过向CPU发HOLD信号,撤消对CPU的DMA请求。
CPU收到此信号,一方面使HLDA无效,另一方面又重新开始控制总线,实现正常取指令、分析指令、执行指令的操作。
DMA传送方式I/O接口到存储器存储器到I/O接口存储器到存储器I/O接口到存储器的传送当进行由I/O接口到存储器的数据传送时,来自I/O接口的数据利用DMAC送出的控制信号,将数据输送到系统数据总线D0~D7上,同时,DMAC送出存储器单元地址及控制信号,将存在于D0~D7上的数据写入所选中的存储单元中。
这样就完成了由I/O接口到存储器一个字节的传送。
同时DMAC修改内部地址及字节数寄存器的内容。
存储器到I/O接口与前一种情况类似,在进行这种传送时,DMAC送出存储器地址及控制信号,将选中的存储单元的内容读出放在数据总线D0~D7上,接着,DMAC送出控制信号,将数据写到规定的(预选中)端口中去,而后MDAC自动修改内部的地址及字节数寄存器的内容S3C44B0的DMA控制器S3C44B0集成了4个通道的DMA控制器:两个ZDMA控制器ZDMA0/1:可以用于存储器到存储器、储存器到I/O设备、I/O设备之间的DMA传送;两个BDMA控制器BDMA0/1:用于储存器与I/O 设备之间的传输。
S3C44B0中与DMA控制器有关的寄存器ZDMA0/1控制寄存器ZDMA0起始地址、目的地址寄存器DMA计数器寄存器ZDMA0/1控制寄存器ZDMA0起始地址、目的地址寄存器DMA计数器寄存器六、课程设计说明书本实验通过DMA方式实现存储器到存储器间的数据传送,并将其与常规的内存拷贝操作进行比较拷贝动作的计时处理采用定时器进行计时处理,采用函数Timer_Start启动计时处理,参数divider 表示定时时间间隔,0 : 16 us1 : 32 us2 : 64 us3 : 128 us操作完成时调用Timer_Stop停止定时器计数,其返回值为计数值,该值乘以时间间隔(128us)即为计时时间Timer_Start(3); /* 128 us */time=Timer_Stop(); /* 停止定时器*/Uart_Printf("Copy Bytes :time=%f\n",time*128E-6);常规的内存拷贝操作字节拷贝*(unsigned char*)(dstAddr) = *(unsigned char*)(srcAddr);双字节拷贝*(unsigned short*)(dstAddr) = *(unsigned short*)(srcAddr);字节拷贝*(unsigned int*)(dstAddr) = *(unsigned int*)(srcAddr);DMA的内存拷贝操作清除传输完毕标志zdma0Done=0;设置DMA传输的起止地址和长度rZDISRC0=srcAddr|(dw<<30)|(1<<28);/* dw 为DMA传输宽度*/rZDIDES0=dstAddr|( 2<<30)|(1<<28);rZDICNT0=length |( 2<<28)|(1<<26)|(3<<22)|(1<<20);启动DMA传输并开始计时rZDCON0=0x1;Timer_Start(3);DMA的内存拷贝操作等待传输完成,传输完成标记将在DMA中断服务程序中置位while(zdma0Done==0);返回当前定时计数器中的值time=Timer_Stop();Uart_Printf("ZDMA0 :time=%f\n",time*128E-6);关中断rINTMSK=BIT_GLOBAL;DMA中断处理函数void isr_dma0(void){rI_ISPC=BIT_ZDMA0;/* 设置传输完毕标志*/zdma0Done = 1;}实验报告要求什么叫DMA传送方式?试说明DMA方式传送数据的主要步骤。
试比较DMA传输、查询式传输及中断方式传输之间的优缺点和适用场合?七、程序代码:/**************************************************************//* */ /* FILE NAME VERSION */ /* */ /* DMA.C 1.0 */ /* */ /*DESCRIPTION */ /* */ /* JX44B0(S3C44B0X)DMA实验*/ /* */ /* */ /* DATA STRUCTURES */ /* */ /* FUNCTIONS : */ /* 在JX44B0教学实验箱进行DMA方式内存拷贝的实验*/ /* */ /* DEPENDENCIES */ /* JX44B0-1 */ /* JX44B0-2 */ /* JX44B0-3 */ /* */ /* */ /* NAME: */ /* REMARKS: */ /* */ /* Copyright (C) 2003 Wuhan CVTECH CO.,LTD */ /**************************************************************//**************************************************************/ /* 学习ARM处理器中DMA方式的处理方法:*/ /* DMA方式:内存->内存DMA方式传输数据*/ /* 注意: 学习该实验之前请先学习interrupt中断处理实验*/ /**************************************************************/ /* 包含文件*/#include "44b.h"#include "44blib.h"#include "rtc.h"typedef (*ISR_ROUTINE_ENTRY)(void);#define Printf Uart_Printf/* functions */void Zdma0(int srcAddr,int dstAddr,int length);void Zdma0Done(void);void Test_Zdma0(void);void isr_dma0(void);/* globals */volatile int zdma0Done;void IsrIRQ() __attribute__ ((interrupt("IRQ")));/**************************************************************/ // Function name : IsrIRQ// Description : 非矢量方式下中断的查表处理// 中断地址表位于0x0c7fff00开始的256字节// Return type : void// Argument : void**************************************************************/ void IsrIRQ(){int count = 0;unsigned int isr_pending;unsigned int isr_mask = 0x00000001;unsigned int isr_mask_set = rINTMSK;ISR_ROUTINE_ENTRY isr_routine_entry = (ISR_ROUTINE_ENTRY)0x0;__asm__ ("STMFD SP!, {r1,r4-r8} @ SA VE r1,r4-r10 \n""nop \n");isr_pending = (rINTPND & ~isr_mask_set);while(isr_mask){if(isr_pending&isr_mask){isr_routine_entry = (ISR_ROUTINE_ENTRY)(*(int*)(HandleADC+count));break;}count+=4;isr_mask <<= 1;}if(isr_routine_entry) (*isr_routine_entry)();__asm__ ("LDMFD SP!, {r1,r4-r8} @ RESTORE r1,r4-r10 \n""nop \n");}/**************************************************************/ // Function name : init_interrupt_handler// Description : 非矢量方式下中断向量表初始化处理// Return type : void// Argument : irq_handler// 中断处理函数入口**************************************************************/ void init_interrupt_handler(unsigned int irq_handler){int i;rINTPND = 0x00000000; /* 清除所有未决的中断*/rI_ISPC = 0x03FFFFFF;for( i = 0; i < 256; i+=4) /* 清除中断表*/{*(unsigned int*)(_ISR_STARTADDRESS+i) = 0;}*(unsigned int*)(HandleIRQ) = irq_handler; /* 设置IRQ模式处理函数*/ }/**************************************************************/ // Function name : install_isr_handler// Description : 非矢量方式下中断向量的安装// Return type : void// Argument : irq_no, 中断号// irq_routine, 中断处理函数地址**************************************************************/ void install_isr_handler(int irq_no, void* irq_routine){*(unsigned int*)(irq_no) = (unsigned int)irq_routine;}/**************************************************************/ // Function name : Main// Description : DMA测试程序主函数// 内存->内存DMA方式传输数据// 传输完毕引发DMA中断// 注册中断源:BIT_ZDMA0// Return type : int// Argument : void**************************************************************/ int Main(void){Uart_Select(0);Uart_Init(MCLK, 115200);Uart_Printf("DMA TEST PROGRAM\n");rINTCON=0x7; /* Non-vect,IRQ disable,FIQ disable*/init_interrupt_handler((unsigned int)IsrIRQ);install_isr_handler(HandleZDMA0, (void*)isr_dma0);rINTMOD=0x0; /*设置所有中断为IRQ模式 */rINTMSK=(0x07ffffff&~(BIT_GLOBAL|BIT_ZDMA0)); /* 使能TICK中断*/rINTCON=0x5; /* 打开IRQ模式的中断*/Test_Zdma0();while(1);}/*************************************************************/ // Function name : Test_Zdma0// Description : test zdma 0// Return type : void// Argument : void**************************************************************/ void Test_Zdma0(void){unsigned char *src, *dst;int i;unsigned int memSum;Uart_Printf("[ZDMA0 MEM2MEM Test]\n");dst=(unsigned char *)malloc(0x80000);src=(unsigned char *)malloc(0x80000);/* 将dst区域设置为非Cacheable区域,关闭Cache */rNCACHBE1=(((((unsigned)dst+0x100000)>>12)+1 )<<16 )|((unsigned)dst>>12);Uart_Printf("dst=%x,src=%x\n",(int)dst,(int)src);Zdma0((int)src,(int)dst,0x80000);free(src);free(dst);}/*************************************************************/ // Function name : Zdma0// Description : 以三种不同的方式进行数据拷贝,检查其时间消耗// Return type : void// Argument : srcAddr,拷贝数据的起始地址// dstAddr,拷贝数据的目的地址// length,拷贝数据的长度**************************************************************/ void Zdma0(int srcAddr,int dstAddr,int length){int time;/* 将目标地址设置为非Cache区*/rNCACHBE1 = (((((unsigned)dstAddr+0x100000)>>12) +1 )<<16 ) | ((unsigned)dstAddr>>12);/* 测试单字节方式的拷贝时间*//* 启动定时器,精度128us,用于计时*/Timer_Start(3);for( time = 0; time < length; time++){*(unsigned char*)(dstAddr+time) = *(unsigned char*)(srcAddr+time);}/* 返回当前定时计数器中的值*/time=Timer_Stop();/* 输出拷贝的时间*/Uart_Printf("Copy Bytes :time=%f\n",time*128E-6);/* 测试双字节方式的拷贝时间*/Timer_Start(3);for( time = 0; time < length; time+=2){*(unsigned short*)(dstAddr+time) = *(unsigned short*)(srcAddr+time);}time=Timer_Stop();Uart_Printf("Copy short words :time=%f\n",time*128E-6);/* 测试字节方式的拷贝时间*/Timer_Start(3);for( time = 0; time < length; time+=4){*(unsigned long*)(dstAddr+time) = *(unsigned long*)(srcAddr+time);}time=Timer_Stop();Uart_Printf("Copy words :time=%f\n",time*128E-6);/* 清除传输完毕标志*/zdma0Done=0;/* 设置DMA传输的起止地址和长度*/rZDISRC0=srcAddr|( 2<<30)|(1<<28);rZDIDES0=dstAddr|( 2<<30)|(1<<28);rZDICNT0=length |( 2<<28)|(1<<26)|(3<<22)|(1<<20);/* 启动DMA传输*/rZDCON0=0x1;Timer_Start(3);/* 等待传输完成*/while(zdma0Done==0);/* 返回当前定时计数器中的值*/time=Timer_Stop();/* 输出一次传送的时间*/Uart_Printf("ZDMA0 :time=%f\n",time*128E-6);rINTMSK=BIT_GLOBAL;}/*************************************************************/ // Function name : isr_dma0// Description : DMA0 中断处理例程// Return type : void// Argument : void***************************************************************/ void isr_dma0(void){rI_ISPC=BIT_ZDMA0; /* 清除DMA中断标志*/zdma0Done = 1; /* 设置传输完毕标志*/}。