ARM报告PWM和SPI流水灯Word文档格式.docx

上传人:b****6 文档编号:19120911 上传时间:2023-01-04 格式:DOCX 页数:20 大小:474.78KB
下载 相关 举报
ARM报告PWM和SPI流水灯Word文档格式.docx_第1页
第1页 / 共20页
ARM报告PWM和SPI流水灯Word文档格式.docx_第2页
第2页 / 共20页
ARM报告PWM和SPI流水灯Word文档格式.docx_第3页
第3页 / 共20页
ARM报告PWM和SPI流水灯Word文档格式.docx_第4页
第4页 / 共20页
ARM报告PWM和SPI流水灯Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

ARM报告PWM和SPI流水灯Word文档格式.docx

《ARM报告PWM和SPI流水灯Word文档格式.docx》由会员分享,可在线阅读,更多相关《ARM报告PWM和SPI流水灯Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

ARM报告PWM和SPI流水灯Word文档格式.docx

而最高位输出(SQH)连接到LPC2131的SPI接口的

MISO0,可用来读回数据。

这样连接就可以进行SPI接口控制实验,并能把74HC595的移位

输出读回来(由MISO0读回)。

这一部份电路通过JP10跳线器来选择连接。

在使用硬件SPI接口主方式时,要把SPI0/1的4个I/O口均设置为SPI功能,如P0.4、

P0.5、P0.6、P0.7,而且SSEL0/1引脚不能为低电平,一般要接一个10KΩ的上拉电阻。

图(a)

(3)EasyARM2131开发板上的8路LED(LED8~LED1)分别可选择P1[25:

18]进行控制,电路如图下所示

 

当跳线JP12全部选择LED8~LED1后,P1.25~P1.18分别控制这8路LED,就可以进

行流水灯实验。

流水灯显示花样可以通过数组人为定义,亦可通过一定的算法计算,程序清

单4.6所示为采用人为定义数组控制显示花样的实验程序,流程图如图4.13所示。

(4)SPI的描述

(a)SPI概述

LPC2131具有一个硬件SPI(SPI,SerialPeripheralInterface)接口,它是一个同步、

全双工串行接口,最大数据位速率为时钟速率的1/8,可以配置为主机或者从机。

在同一总线上可以有多个主机或者从机,但同一时刻只能有一个主机和一个从机能够进

行通信,在一次数据传输过程中,主机向从机发送一字节数据,从机也向主机返回一字节数

据。

SPI可应用于:

z串行存储器,如DataFlash、三线EEPROM等;

z串行外设,如ADC、DAC、LCD控制器、CAN控制器、传感器等;

z外部协处理器。

(b)管脚如下表所示。

管脚连接设置

当进行如下设置时将P0.4、P0.5、P0.6和P0.7选择SPI功能:

PINSEL0=0x55<

<

8;

//可能影响其它管脚功能

PINSEL0=(PINSEL0&

(~(0xFF<

8)))|(0x55<

8);

//不会影响其它管脚功能

(C)SPI结构

(d)SPI控制寄存器-SPIControlRegister(S0SPCR-0xE0020000)

SPCR寄存器根据每个配置位的设定来控制SPI的操作。

SPI控制寄存器的位功能描述见

2、概述

LPC2131的脉宽调制器PWM建立在标准定时器0/1之上。

应用在PWM和匹配功能当中进行选择。

PWM基于标准的定时器模块并具有其所有特性;

PWM可独立控制上升沿和下降沿的的位置,这样是它能够应用于更多的领域;

2个匹配寄存器可用于单边沿控制PWM输出。

3个匹配寄存器共同控制一个双边沿PWM输出。

3、特性

脉宽调制器的特性如下:

(1)7个匹配寄存器,可实现6个单边沿控制或3个双边沿控制PWM输出,或这两种类型的混合输出:

--连续操作,可选择在匹配时产生中断;

--匹配时停止定时器,可选择产生中断;

--匹配时复位定时器,可选择产生中断。

(2)每个匹配寄存器对应一个外部输出,具有下列特性:

--匹配时设置为低电平;

--匹配时设置为高电平;

--匹配时翻转;

--匹配时无动作。

(3)支持单边沿控制和/或双边沿控制的PWM输出。

(4)脉冲周期和宽度可以是任何的定时器计数值。

(5)双边沿控制的PWM输出可编程位正脉冲或负脉冲。

(6)匹配寄存器更新与脉冲输出同步,防止产生错误的脉冲。

软件必须在心的匹配值生效之前将它们释放。

(7)如果不能使能PWM模式,可作为一个标准定时器。

(8)带可编程32位预分频器的32位定时器/计数器。

(9)当输入信号跳变时,4个捕获寄存器可取得定时器的瞬时值,也可以选择是捕获事件产生中断。

4、结构

图(A)所示为PWM的方框图。

在标准定时器模块上增加的部分位于图的右边和顶端。

图(A)的PWM输出逻辑允许通过PWMSELn(在PWM控制寄存器PWMPCR中)位选择单边沿或者双边沿控制的PWM输出。

图(A)PWM方框图

5、寄存器描述

外部中断具有4个相关的寄存器,如表

(一)所示。

EXTINT寄存器包含中断标志,

EXTWAKEUP寄存器包含使能唤醒位,可使能独立的外部中断输入将处理器从掉电模式唤

醒,EXTMODE和EXTPOLAR寄存器用来指定管脚使用电平或边沿激活方式。

(一)外部中断寄存器

(1)、外部中断标志寄存器-ExternalInterruptFlagRegister(EXTINT-0xE01FC140)

当一个管脚选择使用外部中断功能时,对应在EXTPOLAR和EXTMODE寄存器中的

位选择的电平或边沿将置位EXTINT寄存器中的中断标志,向VIC提出中断请求,如果管

脚中断使能,将会产生中断。

向EXTINT寄存器的位EINT0~位EINT3写入1可清除相应的外部中断标志。

在电平

激活方式下,只有在该管脚处于无效状态时才能清除相应的中断标志。

一旦EINT0~EINT3中的一位被置位并开始执行相应的代码(处理唤醒和/或外部中

断),必须将该位清零,否则以后该EINT管脚所触发的事件将不能再被识别。

例如,如果外部中断0管脚的低电平将系统从掉电模式唤醒,为了将来还能进入掉电模

式,唤醒后的程序必须将EINT0位复位。

如果EINT0位仍保持置位状态,后来的唤醒掉电

模式的任何操作都将失败,外部中断也不例外。

外部中断标志寄存器的位功能描述见表

(二)。

(二)外部中断标志寄存器

(2)、外部中断方式寄存器-ExternalInterruptModeRegister

(EXTMODE-0xE01FC148)

EXTMODE寄存器中的位用来选择每个EINT脚是电平触发还是边沿触发。

只有选择用

作EINT功能(通过管脚连接模块)并已通过VICIntEnable(向量中断使能寄存器)使能的管

脚才能产生外部中断(当然,如果管脚选择用作其它功能,则可能产生其它功能的中断)。

外部中断方式寄存器的位功能描述见表(三)。

注:

当某个中断在VICIntEnable中被禁能时,软件应该只改变EXTMODE寄存器中相

应位的值。

中断重新使能前,软件向EXTINT写入1来清除EXTINT位,EXTINT位可通

过改变激活方式来置位。

表(三)外部中断方式寄存器

6、基本操作

LPC2131微控制器的PWM功能是建立在标准的定时器之上的,它同样拥有32位定时器及预分频控制电路和7个匹配寄存器,可实现6个单边沿PWM或3个双边PWM输出,也可采用者两种类型的混合输出。

它具有匹配中断,匹配PWMTC复位和匹配PWMTC停止功能,如果不使能PWM模式,可作为一个标准的定时器。

PWM的基本寄存器功能框图如图4.103所示。

如图4.103所示,32位定时器计数器PWMTC的计数频率由pclk经过PWMPR进行预分频控制得到,而定时器的启动/停止、计数复位由PWMTCR控制。

当有比较匹配事件发生时,PWMIR会设置相关中断标志(因为不是定时器溢出而产生中断,所以上图采用虚线连接)。

若已打开中断允许(VIC),则会产生中断。

当然,预分频寄存器PWMPR只是控制分频数,而其对应的预分频计数器是PWMPC,但用户不需要操作PWMPC。

四、实验程序

1.实验程序

#include"

config.h"

#include"

music.h"

#defineBEEP1<

7/*P0.7控制蜂鸣器*/

#defineHC595_CS(1<

29)//P0.29口为74HC595的片选

constuint32LEDS8=(0xFF<

18);

//P1[25:

18]控制LED8~LED1,低电平点亮

/*歌曲曲谱-欢乐颂*/

constuint32HCMM[]=

{

_MI,_MI,_FA,_SO,_SO,_FA,

_MI,_RE,_DO,_DO,

_RE,_MI,_MI,_RE,_RE,_MI,

_MI,_FA,_SO,_SO,

_FA,_MI,_RE,_DO,_DO,_RE,_MI,

_RE,_DO,_DO,_RE,

_RE,_MI,_DO,_RE,_MI,

_FA,_MI,_DO,_RE,_MI,_FA,_MI,_RE,_DO,_RE,_SO,_MI,_MI,_MI,

_FA,_SO,_SO,_FA,_MI,_RE,_DO,_DO,_RE,_RE,_DO,_DO,

};

constuint32HCMM_L[]=

_4,_4,_4,_4,_4,_4,

_4,_4,_4,_4,

_4,_4,_2,_8,_2,_4,

_4,_4,_4,_4,_4,_4,_4,

_2,_8,_2,_4,

_4,_4,_4,_4,_8,

_8,_4,_4,_4,

_8,_8,_4,_4,_8,

_8,_4,_8,_8,

_4,_4,_4,_4,_4,

_8,_8,_4,_4,_4,_4,_2,_8,_2,

/*歌曲曲谱-好听歌曲*/

constuint32HCMM1[]=

_LA,_SO,_MI,_LA,_SO,_MI,

_LA,_LA,_SO,_LA,

_RE,_RE,_DO,_RE,

_MI,_MI,_SO,_LA,_DO1,_LA,_SO,

_MI,_MI,_SO,_DO,

_MI,_MI,_MI,_MI,_MI,

_1LA,_1LA,_1SO,_1LA,

constuint32HCMM_L1[]=

_4,_8,_8,_4,_8,_8,

_8,_4,_8,_2,

_4,_8,_8,_8,_8,_8,_8,

_4,_4,_4,_8,_8,

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

**函数名称:

Delay()

**函数功能:

长软件延时

**入口参数:

dly延时参数,值越大,延时越久

**出口参数:

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

voidDelay(uint8dly)

uint32i;

for(;

dly>

0;

dly--)

for(i=0;

i<

0x50000;

i++);

//nsaFFFF

}

//音乐函数1

voidMUSIC_1(uint32cnt)

{uint32j;

PINSEL0=0x02<

14;

//P0.7选择PWM2功能

/*PWM初始化*/

PWMPR=0x00;

//不分频,计数频率为Fpclk

PWMMCR=0x02;

//设置PWMMR0匹配时复位PWMTC

PWMPCR=0x0400;

//允许PWM2输出,单边PWM

PWMMR0=Fpclk/1000;

PWMMR2=PWMMR0/2;

//50%占空比

PWMLER=0x05;

//PWM0和PWM2匹配锁存

PWMTCR=0x02;

//复位PWMTC

PWMTCR=0x09;

/*启动PWM输出*/

for(j=0;

j<

cnt;

j++)

{

PWMMR0=Fpclk/HCMM[j];

//设置输出频率

//更新匹配值后,必须锁存

Delay(HCMM_L[j]);

//延时,控制播放速度

}

PINSEL0=0x00;

IO0DIR=1<

7;

IO0SET=1<

//音乐函数2

voidMUSIC_2(uint32cnt)

for(j=0;

PWMMR0=Fpclk/HCMM1[j];

Delay(HCMM_L1[j]);

DelayNS()

voidDelayNS(uint32dly)

{

dly>

0;

dly--)

for(i=0;

i<

50000;

MSPI_Init()

初始化SPI接口,设置为主机。

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

voidMSPI_Init(void)

//PINSEL0=(PINSEL0&

0xFFFF00FF)|0x00005500;

//设置管脚连接SPI

PINSEL0=(PINSEL0&

8);

SPCCR=0x52;

//设置SPI时钟分频

SPCR=(0<

3)|//CPHA=0,数据在SCK的第一个时钟沿采样

(1<

4)|//CPOL=1,SCK为低有效

5)|//MSTR=1,SPI处于主模式

(0<

6)|//LSBF=0,SPI数据传输MSB(位7)在先

7);

//SPIE=0,SPI中断被禁止

/**********************************************************************函数名称:

IRQ_Eint0()

**函数功能:

外部中断0EINT0服务程序口。

**入口参数:

无。

**出口擦数:

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

void__irqIRQ_Eint0(void)

MUSIC_1(15);

//播放歌曲

/*等待外部中断信号恢复为高电平

若信号保持为低电平,中断标志会一直置位。

*/

while((EXTINT&

0x01)!

=0)

EXTINT=0x01;

/*清除EINT0中断标志*/

VICVectAddr=0;

/*向量中断结束*/

IRQ_Eint1()

外部中断1EINT1服务程序口。

void__irqIRQ_Eint3(void)

MUSIC_2(20);

0x08)!

EXTINT=0x08;

/*清除EINT3中断标志*/

}

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

MSPI_SendData()

向SPI总线发送数据。

data待发送的数据

返回值为读取的数据

uint8MSPI_SendData(uint8data)

IOCLR=HC595_CS;

//片选74HC595

SPI_SPDR=data;

while(0==(SPI_SPSR&

0x80));

//等待SPIF置位,即等待数据发送完毕

IOSET=HC595_CS;

return(SPI_SPDR);

/*此表为LED0~F以及L、P的字模*/

uint8constDISP_TAB[19]={

//2007050328

0xA4,0xC0,0xC0,0xF8,0xC0,0x92,0xC0,0xB0,0xF9,0x80,

//LUJIAn

0xC7,0xC1,0XF1,0Xf9,0x88,0xc8,

//r0ng

0x88,0xC0,0xC8,0x90,};

/*

*********************************************************************************************************

**函数名称:

main()

流水灯显示实验。

**调试说明:

连接跳线JP12至LED8~LED1。

/*流水灯花样,低电平点亮,注意调用时候用了取反

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

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

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

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