arm实验c语言代码Word文件下载.docx

上传人:b****2 文档编号:6077444 上传时间:2023-05-06 格式:DOCX 页数:70 大小:32.35KB
下载 相关 举报
arm实验c语言代码Word文件下载.docx_第1页
第1页 / 共70页
arm实验c语言代码Word文件下载.docx_第2页
第2页 / 共70页
arm实验c语言代码Word文件下载.docx_第3页
第3页 / 共70页
arm实验c语言代码Word文件下载.docx_第4页
第4页 / 共70页
arm实验c语言代码Word文件下载.docx_第5页
第5页 / 共70页
arm实验c语言代码Word文件下载.docx_第6页
第6页 / 共70页
arm实验c语言代码Word文件下载.docx_第7页
第7页 / 共70页
arm实验c语言代码Word文件下载.docx_第8页
第8页 / 共70页
arm实验c语言代码Word文件下载.docx_第9页
第9页 / 共70页
arm实验c语言代码Word文件下载.docx_第10页
第10页 / 共70页
arm实验c语言代码Word文件下载.docx_第11页
第11页 / 共70页
arm实验c语言代码Word文件下载.docx_第12页
第12页 / 共70页
arm实验c语言代码Word文件下载.docx_第13页
第13页 / 共70页
arm实验c语言代码Word文件下载.docx_第14页
第14页 / 共70页
arm实验c语言代码Word文件下载.docx_第15页
第15页 / 共70页
arm实验c语言代码Word文件下载.docx_第16页
第16页 / 共70页
arm实验c语言代码Word文件下载.docx_第17页
第17页 / 共70页
arm实验c语言代码Word文件下载.docx_第18页
第18页 / 共70页
arm实验c语言代码Word文件下载.docx_第19页
第19页 / 共70页
arm实验c语言代码Word文件下载.docx_第20页
第20页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

arm实验c语言代码Word文件下载.docx

《arm实验c语言代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《arm实验c语言代码Word文件下载.docx(70页珍藏版)》请在冰点文库上搜索。

arm实验c语言代码Word文件下载.docx

2.10_GPIO输出控制实验1

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

*文件名:

main.c

*功能:

蜂鸣器控制。

对蜂鸣器B1进行控制,采用软件延时方法。

*使用I/O口直接控制,采用灌电流方式。

*说明:

将跳线器JP22短接,JP20断开。

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

#include"

config.h"

#defineBEEPCON0x00000080//P0.7引脚控制B1,低电平蜂鸣

*名称:

DelayNS()

长软件延时。

*入口参数:

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

*出口参数:

voidDelayNS(uint32dly)

for(;

dly>

0;

dly--)

{

5000;

i++);

main()

控制蜂鸣器蜂鸣。

intmain(void)

{

PINSEL0=0x00000000;

//设置管脚连接GPIO

IO0DIR=BEEPCON;

//设置I/O为输出

while

(1)

{

IO0SET=BEEPCON;

//BEEPCON=1

DelayNS(15);

IO0CLR=BEEPCON;

//BEEPCON=0

return(0);

2.11_GPIO输出控制实验2

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

*文件名:

LED显示控制。

*通过GPIO直接控制8个LED产生流水灯效果

将跳线JP23全部短接,JP15跳线全部断开。

*这个警告可忽略,C2892E:

signedconstantoverflow

#defineLED11<

<

16//P2.16

#defineLED21<

17//P2.17

#defineLED31<

18//P2.18

#defineLED41<

19//P2.19

#defineLED51<

20//P2.20

#defineLED61<

21//P2.21

#defineLED71<

22//P2.22

#defineLED81<

23//P2.23

#defineLEDCON0x00ff0000

constuint32DISP_TAB[8]={0xff01ffff,0xff02ffff,0xff04ffff,0xff08ffff,

0xff10ffff,0xff20ffff,0xff40ffff,0xff80ffff};

长软件延时

根据表DISP_TAB来控制LED显示。

{uint8i;

/*PINSEL2使用启动代码的默认配置,切勿任意配置PINSEL2,否则总线会受到干扰*/

IO2DIR=LEDCON;

//配置LED控制I/O方向

8;

IO2CLR=DISP_TAB[i];

//输出LED显示数据

DelayNS(10);

//延时

IO2SET=0xffffffff;

}

}

2.12_GPIO输入实验

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

读取I/O引脚值,并输出控制蜂鸣器。

*使用I/O口输入方式对P0.20口进行扫描,对蜂鸣器控制。

将跳线器JP9、JP22短接,JP20断开。

按下KEY1观察BUZZER效果。

#defineBEEPCON1<

7//P0.7引脚控制B1,低电平蜂鸣

#defineKEY1<

20//定义按键

读取P0.20口的值,并输出控制蜂鸣器B1。

//设置管脚连接GPIO

//设置B1控制口为输出,其它I/O为输入

if((IO0PIN&

KEY)!

=0)

else

1000;

2.13_存储器重映射实验/****************************************************************************

将存储器重映射到片内RAM(0x40000000~0x4000003F),然后更改

*0x40000000~0x4000003F的内容。

观察0x00000000~0x0000003F地址上的数据有何变化

#defineVECTOR_RAM((unsignedchar*)0x40000000)

存储器重映射。

uint8*addr;

MEMMAP=0x02;

//中断向量从静态RAM重映射(用户RAM模式)

addr=VECTOR_RAM;

64;

i++)//用0x55填充0x40000000~0x4000003F

*addr=0x55;

addr++;

i++)//用0xAA填充0x40000000~0x4000003F

*addr=0xAA;

MEMMAP=0x00;

//中断向量从BootBlock重映射(Boot装载程序模式)

2.14_外部中断实验1/****************************************************************************

使用外部中断3进行B1的控制,每当有一次中断时,即取反B1控制口,

*使用非向量中断方式。

7//P0.7引脚控制B1,低电平蜂鸣,1<

7等价于0x80

IRQ_Eint3()

外部中断EINT3服务函数,取反B1控制口。

PINSEL0是选择引脚功能

IO0DIR是选择引脚做输入还是做输出功能

IO0SET是让引脚输出1

IO0CLR是让引脚输出0

void__irqIRQ_Eint3(void)

i=IO0SET;

//读取当前B1控制值

if((i&

BEEPCON)==0)//控制B1输出取反

else

/*等待外部中断信号恢复为高电平(若信号保持为低电平,中断标志会一直置位)*/

while((EXTINT&

1<

3)!

EXTINT=1<

3;

//清除EINT3中断标志,1<

3等价于0x08

VICVectAddr=0;

//向量中断结束

}

初始化外部中断3(EINT3)为非向量中断,并设置为电平触发模式,然后等待外部中断。

在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。

IRQEnable();

//开IRQ中断

PINSEL1=3<

//设置管脚连接,P0.20设置为EINT3

/*打开EINT3中断(使用非向量IRQ)*/

VICIntSelect=0x00000000;

//设置所有中断分配为IRQ中断

VICDefVectAddr=(int)IRQ_Eint3;

//设置中断服务程序地址

EXTMODE=0x00;

//设置EINT3中断为电平触发模式

//清除EINT3中断标志1000

VICIntEnable=1<

17;

//使能EINT3中断,EINT3在Bit17上

//等待中断

2.15_外部存储器接口实验1

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

对SST39VF160进行全片擦除,然后写两字节数据到芯片0地址,再读出来校验,

*若校验通过则蜂鸣器响一声,否则不断地蜂鸣报警。

无。

7//P0.7引脚控制B1,低电平蜂鸣

#defineFLASH_ADDR0x80000000//FLASH的起始地址(分配为Bank1块)

/*转换地址。

将要发送给SST39VF160的地址值进行转换,以便于LPC2210输出。

*/

/*由于SST39VF160的A0是与LPC2210的A1相连,所以addr要左移1位。

*/

#defineGetAddr(addr)(volatileuint16*)(FLASH_ADDR|(addr<

1))

WordProgram()

半字(16位)数据编程。

Addr编程地址(SST39VF160内部地址)

*Data编程数据

返回TRUE表示操作成功,返回FALSE表示操作失败

uint8WordProgram(uint32Addr,uint16Data)

{volatileuint16*ip;

uint16temp1,temp2;

ip=GetAddr(0x5555);

//转换地址0x5555

ip[0]=0xaaaa;

//第一个写周期,地址0x5555,数据0xAA

ip=GetAddr(0x2aaa);

ip[0]=0x5555;

//第二个写周期,地址0x2aaa,数据0x55

ip[0]=0xa0a0;

//第三个写周期,地址0x5555,数据0xA0

ip=(volatileuint16*)(FLASH_ADDR|(Addr&

0x1FFFFF));

*ip=Data;

//第四个写周期,地址Addr,数据Data

while

(1)//等待操作完成(若编程操作没有完成,每次读操作DQ6会跳变)

temp1=*ip;

temp2=*ip;

if(temp1==temp2)

if(temp1!

=Data)

return(FALSE);

return(TRUE);

ChipErase()

芯片全片擦除。

uint8ChipErase(void)

volatileuint16*ip;

ip[0]=0x8080;

//第三个写周期,地址0x5555,数据0x80

//第四个写周期,地址0x5555,数据0xAA

//第五个写周期,地址0x2aaa,数据0x55

ip[0]=0x1010;

//第六个写周期,地址0x5555,数据0x10

while

(1)//等待操作完成(若擦除操作没有完成,每次读操作DQ6会跳变)

=0xffff)

SST39VF160擦除、编程操作。

uint8err=0;

volatileuint16*addr;

//设置管脚连接GPIO

//设置I/O为输出

ChipErase();

//FLASH全片擦除

//校验是否真正擦除。

若发现有非0xFFFF的存储单元,设置err=1

addr=(volatileuint16*)FLASH_ADDR+0;

100;

i++)

if(0xFFFF!

=(*addr))err=1;

WordProgram(0x0,0x55AA);

//向FLASH的0地址写入0x55AA

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2