S3C2440的PWM实验

上传人:宝路 文档编号:8128315 上传时间:2017-09-26 格式:DOC 页数:11 大小:599.02KB
返回 下载 相关 举报
S3C2440的PWM实验_第1页
第1页 / 共11页
S3C2440的PWM实验_第2页
第2页 / 共11页
S3C2440的PWM实验_第3页
第3页 / 共11页
S3C2440的PWM实验_第4页
第4页 / 共11页
S3C2440的PWM实验_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《S3C2440的PWM实验》由会员分享,可在线阅读,更多相关《S3C2440的PWM实验(11页珍藏版)》请在金锄头文库上搜索。

1、1实验二 S3C2440 的 PWM 实验一、实验目的1、 熟悉 ADS1.2+H-Jtag 开发环境。2、 掌握 S3C2440 时钟的配置。3、 掌握 S3C2440 定时器寄存器的配置。4、 掌握蜂鸣器的工作原理。5、 熟悉 C 语言编程。6、 掌握 ARM 寄存器的位操作。二、实验仪器及器件1、EDA 试验箱(包括 FPGA 核心板、单片机、mini2440 ARM 开发板) 一台2、PC 主机 一台3、H-Jtag 调试板 一块三、实验要求1、课前了解 mini2440 开发板的原理图。2、通过芯片手册了解 mini2440 关于定时器的配置。3、理解实验原理。四、实验原理1、PWM

2、 介绍PWM( Pulse Width Modulation)脉宽调制,它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域。s3c2440 芯片中一共有 5 个 16 位的定时器,其中有 4 个定时器(定时器 0定时器 3)具有脉宽调制功能,因此用 s3c2440 可以很容易地实现 PWM 功能。下面就具体介绍如何实现 PWM 功能。2、原理图Mini2440 pwm 相关原理图如下:2我们可以从原理图中观察到 mini2440 开发板的蜂鸣器接在了 s3c2440 芯片的定时器 1 上。343、配置 GPIO 寄存器3.1、PW

3、M 是通过引脚 TOUT0TOUT3 输出的,而这 4 个引脚是与 GPB0GPB3 复用的,因此要实现 PWM 功能首先要把相应的引脚配置成 TOUT 输出。 3.2、再设置定时器的输出时钟频率,它是以 PCLK 为基准,再除以用寄存器 TCFG0 配置的 prescaler 参数,和用寄存器 TCFG1 配置的 divider 参数 3.3、 然后设置脉冲的具体宽度, 它的基本原理是通过寄存器 TCNTBn 来对寄存器 TCNTn (内部寄存器)进行配置计数, TCNTn 是递减的,如果减到零,则它又会重新装载 TCNTBn 里的数,重新开始计数,而寄存器 TCMPBn 作为比较寄存器与计

4、数值进行比较,当 TCNTn 等于 TCMPBn 时, TOUTn 输出的电平会翻转,而当 TCNTn 减为零时,电平会又翻转过来,就这样周而复始。因此这一步的关键是设置寄存器 TCNTBn 和 TCMPBn,前者可以确定一个计数周期的时间长度, 而后者可以确定方波的占空比。 由于 s3c2440 的定时器具有双缓存,因此可以在定时器运行的状态下,改变这两个寄存器的值,它会在下个周期开始有效。3.4、最后就是对 PWM 的控制,它是通过寄存器 TCON 来实现的,一般来说每个定时器主要有 4 个位要配置(定时器 0 多一个死区位) : 启动/终止位,用于启动和终止定时器;手动更新位,用于手动更

5、新 TCNTBn 和 TCMPBn,这里要注意的是在开始定时时,一定要把这位清零, 否则是不能开启定时器的; 输出反转位, 用于改变输出的电平方向, 使原先是高电平输出的变为低电平,而低电平的变为高电平;自动重载位,用于 TCNTn 减为零后重载 TCNTBn 里的值,当不想计数了,可以使自动重载无效,这样在 TCNTn 减为零后,不会有新的数加载给它,那么 TOUTn 输出会始终保持一个电平(输出反转位为 0 时,是高电平输出;输出反转位为 1 时,是低电平输出) ,这样就没有 PWM 功能了,因此这一位可以用于停止 PWM。五、实验内容及步骤 51、 H-Jtag 配置1.1,将实验箱打开

6、,将 H-Jtag 小板的一端接入 arm 开发板的 Jtag 口,另一端插入电脑的并口。1.2,将 arm 的 S2 拨到 nor flash 启动。1.3,连接电源,拨动 arm 开发板 S1 开关,上电。1.4,安装 H-jtag 代理软件。1.5,打开安装好的 H-jtag 代理软件,设置。1.6 打开 Setting-LPT Jtag Setting 设置。1.7,设置 Init Script。这样我们的 H-Jtag 设置就全部完成啦!1.8,配置完成后,检测 CPU 点主菜单 Operations-Detect Target这样我们的 H-jtag 就识别出了我们的 ARM920

7、T注意,如果没有出现这个画面,可能有如下错误容易被忽略:1),没有上电。2),S2 没有拨到 nor flash 启动。3),不使用并口扩展线再试一次。2 使用 ADS1.2 仿真工具2.1,安装 ADS1.2 ,双击 setup 安装,保证安装路径不含有中文。安装完成后会弹出界面,找到安装源文件夹中 CRACK 目录下的 LICENSE.DAT,导入进去,这样 ADS1.2 就安装完成,下面我们来说说怎么使用。2.2,建立一个工程,在 ADS 集成开发环境中,点 File-New,打开窗口:我们在这里选择 ARM Executable Image,在“Project name:”中输入工程文

8、件名,本例为“myled” ,点击“Location:”文本框的“Set”按钮,浏览选择想要保存该工程的路径(本例为“D:work”),将这些设置好之后,点击“确定” ,即可创建一个新的名为 myled 的工程。这个时候会出现 myled.mcp 窗口,同时会在 D:work 目录下创建一个工程目录 myled,而myled.mcp 会出现在 “D:workmyled”目录中。2.3 我们将 srctest_1led_1 文件夹里面的所有源文件复制到这个目录下。2.4 然后在 myled.mcp 项目窗口中,点鼠标右键或者 ADS 菜单 Project-Add Files,开始添加该项目索需要

9、的源代码。选中所有的*.C ,*.S 和*.H 文件,点击“打开”按钮确定,这时会跳出提示选择窗口:DebugRel:使用该目标选项,在生成目标的时候,会为每一个源文件生成调试信息。Debug:使用该目标选项,在生成目标的时候,会为每一个源代码生成最完整的调试信息。Release:使用该目标选项,在生成目标的时候,不会生成任何调试信息。这里我们只做仿真,所以去掉 Release,和 Debug 点击 OK同样的,我们可以添加其他的目录。这样我们的一个工程就建立完毕,下面开始编译和链接工程。2.5 在进行编译和链接之前,首先需要对生成的目标进行配置,点 Edit 菜单,选择6“DebugRel

10、Setting”(注意:这个选项会因为用户选择的不同目标而有所不同) ,做如下设置,点击OK 完成配置。2.6 这时点击 CodeWarrior IDE 的菜单 Project 下的 make 菜单,就可以对工程进行编译和链接了。3,使用 HJTAG 进行代码调试3.1 打开运行 ADS1.2 软件的调试软件AXD Debugger:3.2 点菜单 Options-Confiuguer Target。该窗口中点击 Add 按钮,跳出选择文件对话框,找到 H-JTAG 安装目录,选择并打开里面的 H-JTAG.dll 文件。此时会在 Choose Target 窗口中多了一项 H-JTAG,点

11、OK 返回 AXD Debugger 主界面。3.3 点菜单 Options-Confiuguer Interface。3.3 点击 Session File 选项卡。找到 2440init.txt。这样我们关于 AXD Debugger 就全部完成。配置完了 AXD Debugger 之后,我们就可以来运行我们的代码啦。3.4 回到 ADS 主界面,点击 Debug这时点菜单 Execute-Go 或者按 F5 按键,程序将跳转到 Main 函数处,我们就可以进行单步运行调试了。 4,程序代码及数据分析该实验主要需要掌握 s3c2440 关于定时器的寄存器的配置,以及蜂鸣器发出不同频率声音的

12、原理。system 和 uart 源文件主要是对 s3c2440 的一系列初始化,包括管看门狗,初始化内存,初始化时钟,以及初始化串口。这里暂时不去深究。我主要分析/=/ 文件名称: main.c/ 功能描述: 定义了主函数/ 维护记录: 2009-9-22 V1.0/=/=/ 包含头文件区/=#include 2440addr.h#include 2440lib.h#include option.h#include def.h#include uart.h#define GPBCON (*(volatile unsigned long *)0x56000010)7#define GPBDAT

13、 (*(volatile unsigned long *)0x56000014)#define GPBCON (*(volatile unsigned long *)0x56000010)#define GPBDAT (*(volatile unsigned long *)0x56000014)#define GPGCON (*(volatile unsigned long *)0x56000060)#define GPGDAT (*(volatile unsigned long *)0x56000064)static void delays(int t) int i, j;for(i = 0

14、; i 0; j -) ;void led_init(void) /* 设置 GPB5,6,7,8 为输出,参考芯片手册 P284 */GPBCON &= (0x3ff = 5) return;n += 4;/* 向 GPBDAT 的 5(6,7,8)位写入 0,这样 CPU 的 GPB5(GPB6,GPB7,GPB8)就可以输出低电平,从而点亮对应的 LED 灯 */GPBDAT &= (0x1 = 5) return;n += 4;GPBDAT |= (0x1 7)/freq; /设置 timer0 初值rTCMPB0 = rTCNTB01; / 50%rTCON &= 0x1f;rTCON |= 0xb; /自动重载, 反向关闭, 手动刷新, 启动 timer0rTCON &= 2; /clear manual update bit/=/ 语法格式:void Buzzer_Stop(void)/ 功能描述: 停止蜂鸣器发声函数/ 入口参数: 无/ 出口参数: 无/=void buzzer_stop(void) rGPBCON &= 3;rGPBCON |= 1;rGPBDAT &= 1;9void buttons_init() /* 设置

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号