arm编程.docx
- 文档编号:9242448
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:18
- 大小:490.52KB
arm编程.docx
《arm编程.docx》由会员分享,可在线阅读,更多相关《arm编程.docx(18页珍藏版)》请在冰点文库上搜索。
arm编程
武汉理工大学华夏学院
设计报告
课程名称嵌入式技术与应用
题目基于ARM9的ADC驱动程序设计
专业测控技术与仪器
班级测控1131_____
学号
姓名______
成绩_______
__2015年____5___月___22____日
第一章目录
1.1设计目的...................................................................................................
1.2设计任务....................................................................................................
2.2软硬件平台..................................................................................................
第二章
2.1硬件原理图.................................................................................................
2.2硬件原理分析...........................................................................................
2.3硬件驱动步骤及分析.................................................................................
.
第三章
3.1代码设计......................................................................................................
.
第四章
4.1运行及调试步骤............................................................................................
第五章
5.1总结与体会........................................................................................................
第一章
1.1设计目的
由于这门课程是理论与实践相结合且实践性很强的课程,该课程的学习目标是培养学生嵌入式开发的基本能力,考核方式拟采用学生独立编写一个嵌入式应用程序的方式。
1.2设计任务
通过S3C2410X(ARM9)的ADC采集实验箱电位器的值,旋转电位器时可在屏幕上看到当
前采集值的变化。
1.3实验平台
硬件平台:
博创经典UP-NETARM2410实验箱(S3C2410处理器)
软件平台:
eclipse+keil+PUTTY(串口调试助手)。
第二章
2.1硬件原理图
2.2硬件原理分析
由硬件原理图可知AD和DA转化与AIN0,AIN1,AIN2三个引脚有关,在gpio一章中查找可知这三个引脚均不是多功能引脚。
在AD和DA转化时也不需要用到时钟信号。
A/D转换器是模拟信号和CPU之间联系的接口,它将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进行分析、处理、存储、控制和显示。
2.3驱动编程步骤及分析
A/D转换相关的寄与存器:
ADC触摸屏控制寄存器(ADCTSC)地址为0x58000004
ADC启动延时寄存器(ADCDLY) 地址为0x58000008
ADC转换数据寄存器(ADCDAT0) 地址为0x5800000C
ADC转换数据寄存器(ADCDAT1) 地址为0x58000010
时钟寄存器(CLKCON)地址为0x4C00000C
(1)搞清楚原理
查找AD的原理图搞清楚原理
ADC控制寄存器
ADC触摸屏控制寄存器(ADCTSC)如下:
ADC启动延时寄存器:
ADC转换数据寄存器:
(2)列出问题
1.muxed
在IO一章搜索电位器引脚,是多功能引脚吗?
AIN0,AIN1,AIN2,不是多功能引脚。
2.clk
需配置时钟开启时钟在07-clockpowermanagement一章中搜索ADC,找到了什么
时钟分频在16-ADC&touchscreen一章中的寄存器中配置。
256分频,并使能分频。
设置哪些位?
(3)设置参数
ADC通道选择,怎么选择?
通过底板AD-DA-CAN图可知三个ADC电位器对应AINO2所以选择通道2。
ADCCON[5:
3]=010; ADCCON&=~(0x7<<3); ADCCON|=0x1<<4;
模式选择:
正常/闲置,选择正常模式。
闲置模式(StandbyMode):
在该模式下转换数据寄存器中的值都被保留为上次转换时的数据。
设置启动AD转换的方式:
读启动
(4)功能
intadc_read(void);
如何判断采样转换完成?
如果转换完成,可读取采样值,否则继续等如何读取采样值(整数)?
判断采样转换完成以及读取:
while(!
(ADCCON&(1<<15))); data=ADCDAT0&0xFFF;
voidadc_init(void);
设置muxed、clk及参数,怎么设置?
如何启动ADC?
设置启动AD转换的方式:
读启动ADCCON&=~(0x1<<1); 启动AD转换ADCCON|=0X1;
(5)硬件驱动步骤:
首先连接串口线。
选择serial,9600改成115200
点击左边树形列表中的“Serial”:
将右边最后一项改为None。
点击“Open”按钮,出现如下串口调试界面:
拨动实验箱电源开关,若串口调试界面中有如下显示,表示串口通了,配置好了:
第三章
3.1代码设计:
(1)adc.c
#include"adc/adc.h"
intc;
intadc_read(void)
{
while(!
(ADCCON&(0b1<<15)));//判断ADC转换是否结束,ADCCON[15]=1,转换结束,否则等待转换结束
returnADCDAT0&0x3ff;//ADCDAT0[9:
0]为数模转换数据位,其他位置零即可
}
voidadc_init0()//使用AIN0通道的初始化函数
{
CLKCON|=0b1<<15;//使用ADC时钟
ADCCON|=0b1<<14;//分频因子使能
ADCCON|=0b11111111<<6;//设置分频因子ADCCON[13:
6]=255
ADCCON&=~(0b111<<3);//启用通道000即使用ANI0;
ADCCON&=~(0b1<<2);//正常模式
ADCCON|=0b1<<1;//通过读操作启动
c=ADCDAT0;//启动ADC转换
}
(2)adc.h
#defineCLKCON(*(volatileunsigned*)0x4C00000C)//时钟寄存器
#defineADCCON(*(volatileunsigned*)0x58000000)//adc控制寄存器
#defineADCDAT0(*(volatileunsigned*)0x5800000C)//adc转换数据寄存器0
intadc_read(void);//读转换数据
voidadc_init0(void);//初始化
(3)Main.c
#include"uart/uart.h"
#include"adc/adc.h"
inta,b,c;
intmain(void)
{
uart_init();//串口初始化
puts("曾伟阳07\n");
while
(1)
{
adc_init0();//使用AIN0通道的ADC初始化
a=adc_read();//读转换数据
printf("a0=%4d",a);
puts("\r");
}
return0;
}
voiddo_irq(void)
{
}
(4)#中断向量表
.global_start
_start:
breset
ldrpc,_undefined_instruction
ldrpc,_software_interrupt
ldrpc,_prefetch_abort
ldrpc,_data_abort
ldrpc,_not_used
ldrpc,_irq
ldrpc,_fiq
_undefined_instruction:
.word_undefined_instruction
_software_interrupt:
.word_software_interrupt
_prefetch_abort:
.word_prefetch_abort
_data_abort:
.word_data_abort
_not_used:
.word_not_used
_irq:
.wordirq_handler
_fiq:
.word_fiq
reset:
//设置SVC模式,关闭中断
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
//时钟这频率
//FCLK:
202800000Hz
//HCLK:
101400000Hz
//PCLK:
50700000Hz
//关闭看门狗
ldrr0,=0x53000000
movr1,#0
strr1,[r0]
init_stack:
ldrr0,stacktop
//svcmodestack
movsp,r0
subr0,#128*4
//irqmodestack
msrcpsr,#0xd2
movsp,r0
subr0,#128*4
//fiqmodestack
msrcpsr,#0xd1
movsp,r0
subr0,#0
//abortmodestack
msrcpsr,#0xd7
movsp,r0
subr0,#0
//undefinemodestack
msrcpsr,#0xdb
movsp,r0
subr0,#0
//设置SVC模式,开中断
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
bicr0,r0,#0x80
msrcpsr,r0
//拷贝中断向量表到0地址
ldrr0,=_start
ldrr1,=reset
movr2,#0
loop:
cmpr0,r1
ldrner3,[r0],#4
strner3,[r2],#4
bneloop
@如果需要添加执行代码,加在这个地方
bmain
@如果要添加函数,加在这个地方
.align5
irq_handler:
sublr,lr,#4
stmfdsp!
{r0-r12,lr}
bldo_irq
ldmfdsp!
{r0-r12,pc}^
stacktop:
.wordstack+4*512
.section.data
@如果要添加数据,加在这个地方
stack:
.space4*512
第四章
4.1运行及调试步骤:
1启动H-JTAG
先确定实验箱电源打开,并口线连接好,然后单击“开始-->所有程序-->H-JTAG-->H-JTAG”
可以自动检测到CPU类型,ARM920T0X0032409D
2.运行Eclipse工程
创建Eclipse工程
双击桌面的eclipse
进入主界面后,单击File->New->CProject菜单项,Eclipse将打开一个标准对
3创建Keil工程
选择S3C2410A设备,点击Finish按钮,这时会打开keil软件,关闭keil工程。
4添加文件到工程
到D:
\eclipse_projects_cyg\工程目录下删除project_s3c2410文件夹,然后拷贝新的project_s3c2410再到Eclipse软件下,按F5刷新工程目录,再按照上课讲的新建文件夹和文件,添加程序,按ctrl+s保存,按ctrl+b编译工程。
5调试工程:
Run-bebug-configurations-uvisionproject-new.选择bedug调试-yes-页面。
6.调试结果:
第五章
5.1总结与体会:
在本次实验设计中,我碰到的问题还是蛮多的,当然在解决它们的同时我又学到了很多,使我对ARM9嵌入式设计这门学科有了更进一步的认识与熟悉。
通过自学和网上查资料,学到了许多新的知识,也发现了自身的许多不足,也明白了理论要与实际相结合。
进行实验设计这样的工作,要有恒心,要能静下新来做,要善于同别人交流与合作,要真真实实多查资料,多问,多看。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arm 编程