ARM1138技术文档.docx

上传人:b****8 文档编号:10197303 上传时间:2023-02-09 格式:DOCX 页数:23 大小:605.86KB
下载 相关 举报
ARM1138技术文档.docx_第1页
第1页 / 共23页
ARM1138技术文档.docx_第2页
第2页 / 共23页
ARM1138技术文档.docx_第3页
第3页 / 共23页
ARM1138技术文档.docx_第4页
第4页 / 共23页
ARM1138技术文档.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

ARM1138技术文档.docx

《ARM1138技术文档.docx》由会员分享,可在线阅读,更多相关《ARM1138技术文档.docx(23页珍藏版)》请在冰豆网上搜索。

ARM1138技术文档.docx

ARM1138技术文档

一、实验板介绍:

EasyARM1138的核心MCU是LuminaryMicro公司的Stellaris(群星)系列ARM之LM3S1138。

该芯片采用的是国际上最优秀的MCU内核设计公司ARM最新推出的先进Cortex-M3处理器;国内最大、技术最强的晶圆制造公司台积电(TSMC)代工;世界上最专业的封装测试公司(OSE、i2a/IPAC)层层把关,确保产品的可靠性。

Stellaris(群星)系列ARM芯片在电磁兼容性方面的优势明显。

(1)强大的MCU内核

32位ARMCortex-M3内核(ARMv7M架构);

兼容Thumb的Thumb-2指令集,提高代码密度25%以上;

50MHz运行频率,1.25DMIPS/MHz,加快35%以上;

单周期乘法指令,2~12周期硬件除法指令;

快速可嵌套中断,6~12个时钟周期;

具有MPU保护设定访问规则;

64KB单周期Flash,16KB单周期SRAM;

内置可编程的LDO输出2.25V~2.75V,步进50mV,为硬件系统节省一个电源稳压器;

支持非对齐数据的访问,有效地压缩数据到内存;

支持位操作,最大限度使用内存,并提供创新的外设控制;

内置系统节拍定时器(SysTick),方便操作系统移植。

(2)丰富的外设资源

7组GPIO,具有多种工作模式:

高阻抗输入、2/4/8mA推挽输出、开漏输出、弱上拉/弱下拉输出,等等;

4个32位Timer,每个Timer都可拆分为2个独立的16位子定时器,具有定时、捕获、PWM、RTC等丰富功能;

3路全双工UART,位速率高达3.125Mbps,16单元接收FIFO和发送FIFO,支持串行红外协议(IrDASIR);

2路I2C,支持100kbps标准模式、400kbps快速模式;

2路SSI,兼容FreescaleSPI、MICROWIRE、TexasInstruments串行通信协议,位速率高达25Mbps;

6路16位PWM,通过CCP管脚输出,能产生速度高达25MHz的方波;

3个模拟比较器

8通道10位ADC,采样速率可达1M/s;

内置看门狗定时器(WatchDogTimer),确保芯片可靠运行。

(3)内嵌USB接口的下载仿真器

仅需插入一根USB电缆就能实现“三合一”功能:

5V供电、程序下载与在线仿真、UART串行通信;

不再要求电脑具有串口或并口,无论台式机还是笔记本电脑,只要拥有USB1.1或USB2.0接口就能运用自如;

除了能够下载仿真自身以外,开发板保留的JTAG接口还可以用来仿真其它LM3S系列开发板,适用于所有Stellaris系列ARM芯片;

USB接口提供虚拟UART的功能,不需要额外的接口电路(如SP3232)。

(4)简明的外围电路设计,调试时无需任何连线和跳线,操作极为方便

5只LED指示灯;

3只KEY;

1只交流蜂鸣器,可演奏动听乐曲,如《梁祝》;

两排插针引出全部GPIO资源,以及ADC0~ADC7、5V、3.3V、GND等;

GPIO插针间距正好为2000mil(50.8mm),很容易插接在万用板或其它自制的电路板上,为教学实验提供了极大方便。

ARM1138实验板实物图:

ARM1138实验板原理图:

ARM1138实验板管脚图:

实验板CPU框图:

实验内容:

(一)A/D模数转换

一、实验目的

1、熟悉EDP试验箱并了解模数转换原理以及程序各个模块的功能。

2、熟悉单片机的原理及应用,了解C51和ARM。

3、设计一个多通道的A/D模数转换电路及其外围电路。

2、了解UV3的各种功能和应用以及个人的实际操作能力。

3、利用所学的C语言知识进行编程并熟悉KeilC51编译器和程序下载调试软件。

二、实验内容

1、在了解模数转换原理的情况下用C进行修改所需程序。

2、学习ARM相关知识,用1138实现单片机基本功能。

3、利用所学知识完成要求功能,并用硬件或软硬件结合实现。

三、实验思路与过程

(1)理解实验原理并考虑如何用软件去实现它。

(2)由于C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。

因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。

(3)又由于这是一个较大的程序,所以为了简单明了便于维护和调试起见,我们可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。

对于不同的功能模块,分别指定相应的入口参数和出口参数,我们也将经常使用的一些程序编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性,移植性也好。

(4)TLC1543A/D转换的电路原理图如下:

(5)完整程序设计如下:

/******************************************************************************

*实验名称:

TLC1543A/D转换实验*

*硬件:

1.当AD采用转换结束查询,需短接JP2,本程序未采用转换结束查询;*

*2.J2的1、2短接为AD提供基准电压,电位器WR1调节基准电压;*

*3、4短接则为DA提供基准电压;*

*3.14脚为基准电压输入端,本程序基准电压采用4.5V,JiZhun_AD为基准电压;*

*当采集第0路通道时,可调节电位器R2以改变信号输入;*

*******************************************************************************/

#include

#include

uintread1543(ucharport);

ucharxdataad_result[16]={0};//AD转换结果

ucharbbb[]={"AD(TLC1543)TEST"};

floatJiZhun_AD=4.5;

floatb;

floatc;

//====================================

voidmain()

{

ulongAD_ad=0;

floatAD_Data=0.0;

PORT=0x03;//BA口输出

lcd1602init();//液晶初始化

lcd_clear();

while

(1)

{

AD_ad=read1543(0);//0----第0号通道(0--10)

AD_Data=((float)AD_ad)*b/c*10=20+0.0005;

AD_ad=AD_Data*1000;

ad_result[4]=(AD_ad%10)+'0';

ad_result[3]=((AD_ad/10)%10)+'0';

ad_result[2]=((AD_ad/100)%10)+'0';

ad_result[1]='.';

ad_result[0]=(AD_ad/1000)+'0';

lcd_string(ad_result,1);//显示AD转换结果

lcd_string(bbb,2);

}

}

//====================================

(6)TLC1543SPI接口软件设计流程如下:

(7)设计调试步骤

1)把电源模块、CPU模块、8155I/O扩展模块、1602液晶模块、串口通信模块、AD转换模块插在正确的位置上,并把跳帽进行正确短接。

2)调节WR1使得基准电压输出为4.5V。

3)建立Keil工程,编辑、编译源代码并生成可下载的HEX文件。

4)链接串口线,通过串口通信模块使用STC-ISP软件下载程序。

5)调节原理图中的可调电阻R2可改变IN-0的输入电压的大小。

6)调试,直到能够正确显示。

(二)液晶显示

TheSysClock=SysCtlClockGet();//获取系统时钟,单位:

Hz

LCD_Init();//初始化LED1和LED2

}

unsignedchars1[]={"贺范群西安邮电学院"};

unsignedchar*p1=s1;

unsignedchars2[]={"贺范群电子工程学院"};

unsignedchar*p2=s2;

unsignedchars3[]={"贺范群光信零七零一"};

unsignedchar*p3=s3;

unsignedchars4[]={"贺范群学号十二号"};

分析:

液晶显示屏是用点阵来表示的,每个汉字是用点阵来表示,用二进制的0或1表示那个点的亮灭,修改点阵就可以显示不同的字,液晶显示是按行从左到右的打,逐行打印。

(三)温度采集

原理:

用电桥差分放大电路实现温度采集系统

电路图如下:

如图所示电路:

R3为热敏电阻,通过电桥输出的电压差输入到Op07实现信号的放大,电压与温度形成线性关系

将输出的模拟信号输入到EDP试验箱的A/D转换模块。

(四)TimerPWM应用:

定时器演奏音乐

如图所示,为EasyARM1138开发板上的蜂鸣器驱动电路。

蜂鸣器类型是交流蜂鸣器,也称无源蜂鸣器,需要输入一列方波才能鸣响,发声频率等于驱动方波的频率。

下程序清单是Timer模块16位PWM模式的一个应用,可以驱动交流蜂鸣器发声,运行后蜂鸣器以不同的频率叫两声。

程序清单1.10和程序清单1.11是蜂鸣器的驱动程序,仅有3个驱动函数,用起来很简捷:

蜂鸣器初始化函数buzzerInit();蜂鸣器发声函数buzzerSound(),能发出指定频率的响声;蜂鸣器静音函数buzzerQuiet()。

源程序如下所示:

#include"systemInit.h"

#include"buzzer.h"

#include"music.h"

//主函数(程序入口)

intmain(void)

{

jtagWait();//防止JTAG失效,重要!

clockInit();//时钟初始化:

晶振,6MHz

buzzerInit();//蜂鸣器初始化

for(;;)

{

musicPlay();

SysCtlDelay(4000*(TheSysClock/3000));

}

}

//声明全局的系统时钟变量

externunsignedlongTheSysClock;

//蜂鸣器初始化

voidbuzzerInit(void)

{

SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1);//使能TIMER1模块

SysCtlPeriEnable(CCP3_PERIPH);//使能CCP3所在的GPIO端口

GPIOPinTypeTimer(CCP3_PORT,CCP3_PIN);//设置相关管脚为Timer功能

TimerConfigure(TIMER1_BASE,TIMER_CFG_16_BIT_PAIR|//配置TimerB为16位PWM

TIMER_CFG_B_PWM);

}

//蜂鸣器发出指定频率的声音

//usFreq是发声频率,取值(系统时钟/65536)+1~20000,单位:

Hz

voidbuzzerSound(unsignedshortusFreq)

{

unsignedlongulVal;

if((usFreq<=TheSysClock/65536UL)||(usFreq>20000))

{

buzzerQuiet();

}

else

{

GPIOPinTypeTimer(CCP3_PORT,CCP3_PIN);//设置相关管脚为Timer功能

ulVal=TheSysClock/usFreq;

TimerLoadSet(TIMER1_BASE,TIMER_B,ulVal);//设置TimerB初值

TimerMatchSet(TIMER1_BASE,TIMER_B,ulVal/2);//设置TimerB匹配值

TimerEnable(TIMER1_BASE,TIMER_B);//使能TimerB计数

}

}

//蜂鸣器停止发声

voidbuzzerQuiet(void)

{

TimerDisable(TIMER1_BASE,TIMER_B);//禁止TimerB计数

GPIOPinTypeOut(CCP3_PORT,CCP3_PIN);//配置CCP3管脚为GPIO输出

GPIOPinWrite(CCP3_PORT,CCP3_PIN,0x00);//使CCP3管脚输出低电平

}

#include"music.h"

#include"buzzer.h"

#include"systemInit.h"

//定义乐曲:

《化蝶》(梁祝)

//演奏乐曲

voidmusicPlay(void)

{

shorti=0;

for(;;)

{

if(MyScore[i].mTime==0)break;

buzzerSound(MyScore[i].mName);

SysCtlDelay(MyScore[i].mTime*(TheSysClock/3000));

i++;

buzzerQuiet();

SysCtlDelay(10*(TheSysClock/3000));

}

}

#include"systemInit.h"

//定义全局的系统时钟变量

unsignedlongTheSysClock=12000000UL;

//定义KEY

#defineKEY_PERIPHSYSCTL_PERIPH_GPIOG

#defineKEY_PORTGPIO_PORTG_BASE

#defineKEY_PINGPIO_PIN_5

//防止JTAG失效

voidjtagWait(void)

{

SysCtlPeriEnable(KEY_PERIPH);//使能KEY所在的GPIO端口

GPIOPinTypeIn(KEY_PORT,KEY_PIN);//设置KEY所在管脚为输入

if(GPIOPinRead(KEY_PORT,KEY_PIN)==0x00)//若复位时按下KEY,则进入

{

for(;;);//死循环,以等待JTAG连接

}

SysCtlPeriDisable(KEY_PERIPH);//禁止KEY所在的GPIO端口

}

//系统时钟初始化

voidclockInit(void)

{

SysCtlLDOSet(SYSCTL_LDO_2_50V);//设置LDO输出电压

SysCtlClockSet(SYSCTL_USE_OSC|//系统时钟设置

SYSCTL_OSC_MAIN|//采用主振荡器

SYSCTL_XTAL_6MHZ|//外接6MHz晶振

SYSCTL_SYSDIV_1);//不分频

/*

SysCtlLDOSet(SYSCTL_LDO_2_75V);//配置PLL前须将LDO设为2.75V

SysCtlClockSet(SYSCTL_USE_PLL|//系统时钟设置,采用PLL

SYSCTL_OSC_MAIN|//主振荡器

SYSCTL_XTAL_6MHZ|//外接6MHz晶振

SYSCTL_SYSDIV_10);//分频结果为20MHz

*/

TheSysClock=SysCtlClockGet();//获取当前的系统时钟频率

}

简谱是大众化的音乐记谱方式,比较容易理解和掌握。

我们可以把一首乐谱(score)看成是由若干个基本的音符(note)单元组成。

一个音符由音名和时值组成。

音名就是低音、中音、高音的1234567(唱作doremifasollasi),其本质是音符的发声频率。

在头文件"music.h"里,用L1~L7、M1~M7、H1~H7定义了低音、中音、高音所对应的发声频率。

时值是音符的发声时间长短,有全音符、二分音符、四分音符⋯⋯等等。

音符可以后缀一个“符点”,表示时值增加1/2,特殊地,二分音符加符点时用“-”代替圆点。

参见表1.24的描述。

表1.24常见简谱音符示例音符

名称

相对时值

5―――

全音符

T

5-

二分音符

T/2

5

四分音符

T/4

5

八分音符

T/8

5

十六分音符

T/16

5――

符点二分音符

T/2+T/4

5.

符点四分音符

T/4+T/8

5.

符点八分音符

T/8+T/16

分析:

定时器演奏乐器的实验应用了EASYARM板中Timer模块,利用蜂鸣器演奏是利用了PWM(脉宽调制)技术,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。

通过频率的变换发出声音的不同,可以演奏乐曲。

在这个实验中我们了解了有两种方法,一是改变频率,二是改变占空比。

(五)调速器

源程序如下所示:

//电机调速

//将较长的标识符定义成较短的形式

//定义KEY

//定义全局变量

shortcount;//转速计数器

unsignedlongTheSysClock=12000000UL;

shorti=1;

shortsheding=230;//设定转速(500ms)

//防止JTAG失效

主程序:

voidtimer0Init(void)

{

SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0);//使能Timer模块

TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);//配置Timer定时器

TimerLoadSet(TIMER0_BASE,TIMER_A,3000000UL);//设置Timer初值

TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT)//使能Timer超时中断

IntEnable(INT_TIMER0A);

IntMasterEnable();

TimerEnable(TIMER0_BASE,TIMER_A);//使能计数

}

voidcompInit(void)

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);/*使能GPIOPB口*/

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

SysCtlPeripheralEnable(SYSCTL_PERIPH_COMP0);/*使能模拟比较器0*/

GPIOPinTypeComparator(GPIO_PORTB_BASE,VIN);/*设置PB4为C0-*/

GPIODirModeSet(GPIO_PORTF_BASE,VOUT,GPIO_DIR_MODE_HW);

GPIOPadConfigSet(GPIO_PORTF_BASE,VOUT,GPIO_STRENGTH_4MA,/*设置为4mA驱动和推挽使能*/

GPIO_PIN_TYPE_STD);

ComparatorConfigure(COMP_BASE,0,(COMP_TRIG_NONE|COMP_INT_RISE|COMP_ASRCP_REF|

COMP_OUTPUT_NORMAL));/*配置模拟比较器0*/

ComparatorRefSet(COMP_BASE,COMP_REF_2_371875V);/*配置内部参考电压为2.37V*/

ComparatorIntEnable(COMP_BASE,0);/*使能模拟比较器0中断*/

IntEnable(INT_COMP0);//使能COMP模块中断

IntMasterEnable();//使能处理器中断

}

voidPWMInit(void)

{

SysCtlPeriEnable(CCP2_PERIPH);/*使能CCP2所在的GPIO端口*/

GPIOPinTypeTimer(CCP2_PORT,CCP2_PIN);/*配置CCP2管脚为PWM输出*/

SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1);/*使能定时器模块*/

TimerConfigure(TIMER1_BASE,

TIMER_CFG_16_BIT_PAIR|TIMER_CFG_A_PWM);//配置Timer1A为16位PWM

}

//系统初始化

voidSystemInit(void)

{

SysCtlLDOSet(SYSCTL_LDO_2_50V);//设置LDO输出电压

SysCtlClockSet(SYSCTL_USE_OSC|//系统时钟设置,采用主振荡器

SYSCTL_OSC_MAIN|

SYSCTL_XTAL_6MHZ|

SYSCTL_SYSDIV_1);

TheSysClock=SysCtlClockGet();//获取当前的系统时钟频率

timer0Init();

compInit();

PWMInit();

}

intmain(void)

{

chars1[10];

chars2[10];

shortchasu;//转速差

shortmatch=12000;//匹配值

JTAG_Wait();//防止JTAG失效,重要!

SystemInit();//系统初始化

while

(1)

{if(i==1)

{

chasu=sheding-count;

match=match+chasu*10;

sprintf(s1,"%ld",count);

sprintf(s2,"%ld",count*120/9);

//UART_Puts(s1);

//UART_Puts("电机转速为:

");

//UART_Puts(s2);

//UART_Puts("转/分\r\n");

if(match>19000)matc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1