嵌入式重点代码.docx

上传人:b****0 文档编号:9896160 上传时间:2023-05-21 格式:DOCX 页数:17 大小:18.29KB
下载 相关 举报
嵌入式重点代码.docx_第1页
第1页 / 共17页
嵌入式重点代码.docx_第2页
第2页 / 共17页
嵌入式重点代码.docx_第3页
第3页 / 共17页
嵌入式重点代码.docx_第4页
第4页 / 共17页
嵌入式重点代码.docx_第5页
第5页 / 共17页
嵌入式重点代码.docx_第6页
第6页 / 共17页
嵌入式重点代码.docx_第7页
第7页 / 共17页
嵌入式重点代码.docx_第8页
第8页 / 共17页
嵌入式重点代码.docx_第9页
第9页 / 共17页
嵌入式重点代码.docx_第10页
第10页 / 共17页
嵌入式重点代码.docx_第11页
第11页 / 共17页
嵌入式重点代码.docx_第12页
第12页 / 共17页
嵌入式重点代码.docx_第13页
第13页 / 共17页
嵌入式重点代码.docx_第14页
第14页 / 共17页
嵌入式重点代码.docx_第15页
第15页 / 共17页
嵌入式重点代码.docx_第16页
第16页 / 共17页
嵌入式重点代码.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式重点代码.docx

《嵌入式重点代码.docx》由会员分享,可在线阅读,更多相关《嵌入式重点代码.docx(17页珍藏版)》请在冰点文库上搜索。

嵌入式重点代码.docx

嵌入式重点代码

LED控制实验:

IMPORTmain

AREAhead,CODE,READONLY

ENTRY

START

ldrr0,=0x56000010;WATCHDOG寄存器地址

movr1,#0x0

strr1,[r0]

;写入,禁止WATCHDOG,否则CPU会不断重启

ldrsp,=1024*4

;设置堆栈,注意:

不能大于k,因为现在可用的内存只有K

;nandflash中的代码在复位后会移到内部ram中,此ram只有K

blmain;调用C程序中的main函数

halt_loop

bhalt_loop

END

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

/*文件:

led_c.c*/

/*功能:

LED从到循环点亮*/

/*作者;CicoYoung*/

/*日期:

/4/9*/

/*公司:

武汉豪申光电*/

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

#defineGPBCON(*(volatileunsignedlong*)0x56000010)

#defineGPBDAT(*(volatileunsignedlong*)0x56000014)

#defineU32unsignedint

 

/*

*LED1-4对应GPB5、GPB6、GPB7、GPB8

*/

#defineGPB5_out(1<<(5*2))

#defineGPB6_out(1<<(6*2))

#defineGPB7_out(1<<(7*2))

#defineGPB8_out(1<<(8*2))

/*

*延时子程序

*/

voiddely(U32tt)

{

U32i;

for(;tt>0;tt--)

{

for(i=0;i<10000;i++){}

}

}

 

/*

*主程序

*/

intmain()

{

inti=0;

//LED1-LED4对应的根引脚设为输出

GPBCON=GPB5_out|GPB6_out|GPB7_out|GPB8_out;

while

(1)

{

/*dely(10000);//当delay()放入NANDFLASH,时放入SDRAM

GPBDAT=~(i<<5);//从到循环点亮

if(++i==16)

i=0;*/

dely(10000);

if(++i==5)GPBDAT=~(i<<5);

dely(10000);

if(++i==10)GPBDAT=~(i<<5);

dely(10000);

if(++i==15)

{GPBDAT=~(1<<5);

dely(10000);

GPBDAT=~(2<<5);

dely(10000);

GPBDAT=~(4<<5);

dely(10000);

GPBDAT=~(8<<5);}

if(++i==16)i=0;

}

return0;

}

 

按键中断实验:

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

NAME:

Main.c

DESC:

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

externvoidInit_all(void);

/****toaddtheexternfunctiondecleration*******************/

externvoidKeyScan_Test(void);

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

 

voidMain(void)

{

Init_all();

while

(1)

{

/*******************Addtheuser'sprogram!

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

KeyScan_Test();

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

}

}

 

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

4KeyScan

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

#include"def.h"

#include"option.h"

#include"2440addr.h"

#include"2440lib.h"

#include"2440slib.h"

#defineLED1(1<<5)//rGPB[5]=1;

#defineLED2(1<<6)//rGPB[5]=1;

#defineLED3(1<<7)//rGPB[5]=1;

#defineLED4(1<<8)//rGPB[5]=1;

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

4个用户按键

四个输入引脚:

EINT0-----(GPF0)----INPUT---K4

EINT2-----(GPF2)----INPUT---K3

EINT4-----(GPF4)----INPUT---K2

EINT9-----(GPG1)----INPUT---K1

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

U8Key_Scan(void)

{

Delay(80);

if((rGPFDAT&(1<<0))==0)

{

rGPBDAT=rGPBDAT&~(LED4);//亮LED4

return4;

}

elseif((rGPFDAT&(1<<2))==0)

{

rGPBDAT=rGPBDAT&~(LED3);//亮LED3

return3;

}

elseif((rGPFDAT&(1<<4))==0)

{

rGPBDAT=rGPBDAT&~(LED2);//亮LED2

return2;

}

elseif((rGPGDAT&(1<<1))==0)

{

rGPBDAT=rGPBDAT&~(LED1);//亮LED1

return1;

}

else

{

rGPBDAT=rGPBDAT&~0x1e0|0x1e0;//LED[8:

5]=>1;

return0xff;

}

}

staticvoid__irqKey_ISR(void)

{

U8key;

U32r;

EnterCritical(&r);

if(rINTPND==BIT_EINT8_23)

{

ClearPending(BIT_EINT8_23);

if(rEINTPEND&(1<<9))

{

Uart_Printf("eint9\n");

rEINTPEND|=1<<9;

}

}

if(rINTPND==BIT_EINT4_7)

{

ClearPending(BIT_EINT4_7);

if(rEINTPEND&(1<<4))

{

Uart_Printf("eint4\n");

rEINTPEND|=1<<4;

}

}

if(rINTPND==BIT_EINT0)

{

Uart_Printf("eint0\n");

ClearPending(BIT_EINT0);

}

if(rINTPND==BIT_EINT2)

{

Uart_Printf("eint2\n");

ClearPending(BIT_EINT2);

}

key=Key_Scan();

if(key==0xff)

Uart_Printf("Interruptoccur...Keyisreleased!

\n");

else

Uart_Printf("Interruptoccur...K%dispressed!

\n",key);

ExitCritical(&r);

}

 

voidKeyScan_Test(void)

{

Uart_Printf("\nKeyScanTest,pressESCkeytoexit!

\n");

rGPBUP=rGPBUP&~0x03f0|0x03f0;//LED[8:

5]=>PUEn

rGPBCON=rGPBCON&~0x3d57fc|0x3d57fc;//LED[8:

5]=>OUTPUT;

rGPFCON=rGPFCON&(~((3<<4)|(3<<0)|(3<<8)))|((2<<4)|(2<<0)|(2<<8));//GPF4,2,0setEINT

rGPGCON=rGPGCON&(~(3<<2))|(2<<2);//GPG1setsENINT

rEXTINT0&=~(7|(7<<8)|(7<<16));

rEXTINT0|=(0|(0<<8)|(0<<16));//seteint0,2,4fallingedgeint

rEXTINT1&=~(7<<4);

rEXTINT1|=(0<<4);//seteint9fallingedgeint

rEINTPEND|=(1<<4)|(1<<9);//cleareint4

rEINTMASK&=(~(1<<4))&(~(1<<9));//enableeint4

ClearPending(BIT_EINT0|BIT_EINT8_23|BIT_EINT2|BIT_EINT4_7);

pISR_EINT0=pISR_EINT8_23=pISR_EINT2=pISR_EINT4_7=(U32)Key_ISR;

EnableIrq(BIT_EINT0|BIT_EINT8_23|BIT_EINT2|BIT_EINT4_7);

while(Uart_GetKey()!

=ESC_KEY);

DisableIrq(BIT_EINT0|BIT_EINT8_23|BIT_EINT2|BIT_EINT4_7);

}

按键中断实验修改后:

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

4KeyScan

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

#include"def.h"

#include"option.h"

#include"2440addr.h"

#include"2440lib.h"

#include"2440slib.h"

#defineLED1(1<<5)//rGPB[5]=1;

#defineLED2(1<<6)//rGPB[5]=1;

#defineLED3(1<<7)//rGPB[5]=1;

#defineLED4(1<<8)//rGPB[5]=1;

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

4个用户按键

四个输入引脚:

EINT0-----(GPF0)----INPUT---K4

EINT2-----(GPF2)----INPUT---K3

EINT4-----(GPF4)----INPUT---K2

EINT9-----(GPG1)----INPUT---K1

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

U8Key_Scan(void)

{

Delay(80);

if((rGPFDAT&(1<<0))==0)

{

rGPBDAT=rGPBDAT&~(LED4);//亮LED4

return4;

}

elseif((rGPFDAT&(1<<2))==0)

{

rGPBDAT=rGPBDAT&~(LED3);//亮LED3

return3;

}

elseif((rGPFDAT&(1<<4))==0)

{

rGPBDAT=rGPBDAT&~(LED2);//亮LED2

return2;

}

elseif((rGPGDAT&(1<<1))==0)

{

rGPBDAT=rGPBDAT&~(LED1);//亮LED1

return1;

}

else

{

rGPBDAT=rGPBDAT&~0x1e0|0x1e0;//LED[8:

5]=>1;

return0xff;

}

}

staticvoid__irqKey_ISR1(void)

{

U8key;

U32r;

EnterCritical(&r);

ClearPending(BIT_EINT8_23);

if(rEINTPEND&(1<<9))

{

Uart_Printf("eint9\n");

rEINTPEND|=1<<9;

}

rGPBDAT=rGPBDAT&~(LED1);

//key=Key_Scan();

//if(key==0xff)

//Uart_Printf("Interruptoccur...Keyisreleased!

\n");

//else

Uart_Printf("Interruptoccur...K1ispressed!

\n");

rGPBDAT=rGPBDAT|(LED1);

ExitCritical(&r);

}

 

staticvoid__irqKey_ISR2(void)

{

U8key;

U32r;

EnterCritical(&r);

ClearPending(BIT_EINT4_7);

if(rEINTPEND&(1<<4))

{

Uart_Printf("eint4\n");

rEINTPEND|=1<<4;

}

rGPBDAT=rGPBDAT&~(LED2);

//key=Key_Scan();

//if(key==0xff)

//Uart_Printf("Interruptoccur...Keyisreleased!

\n");

//else

Uart_Printf("Interruptoccur...K2ispressed!

\n");

rGPBDAT=rGPBDAT|(LED2);

ExitCritical(&r);

}

staticvoid__irqKey_ISR3(void)

{

U8key;

U32r;

EnterCritical(&r);

Uart_Printf("eint0\n");

ClearPending(BIT_EINT0);

 

//key=Key_Scan();

rGPBDAT=rGPBDAT&~(LED4);

//if(key==0xff)

//Uart_Printf("Interruptoccur...Keyisreleased!

\n");

//else

Uart_Printf("Interruptoccur...K4ispressed!

\n");

rGPBDAT=rGPBDAT|(LED4);

ExitCritical(&r);

}

staticvoid__irqKey_ISR4(void)

{

U8key;

U32r;

EnterCritical(&r);

Uart_Printf("eint2\n");

ClearPending(BIT_EINT2);

//key=Key_Scan();

rGPBDAT=rGPBDAT&~(LED3);

//if(key==0xff)

//Uart_Printf("Interruptoccur...Keyisreleased!

\n");

//else

Uart_Printf("Interruptoccur...K3ispressed!

\n");

rGPBDAT=rGPBDAT|(LED3);

ExitCritical(&r);

}

voidKeyScan_Test(void)

{

Uart_Printf("\nKeyScanTest,pressESCkeytoexit!

\n");

rGPBUP=rGPBUP&~0x03f0|0x03f0;//LED[8:

5]=>PUEn

rGPBCON=rGPBCON&~0x3d57fc|0x3d57fc;//LED[8:

5]=>OUTPUT;

rGPFCON=rGPFCON&(~((3<<4)|(3<<0)|(3<<8)))|((2<<4)|(2<<0)|(2<<8));//GPF4,2,0setEINT

rGPGCON=rGPGCON&(~(3<<2))|(2<<2);//GPG1setsENINT

rEXTINT0&=~(7|(7<<8)|(7<<16));

rEXTINT0|=(0|(0<<8)|(0<<16));//seteint0,2,4fallingedgeint

rEXTINT1&=~(7<<4);

rEXTINT1|=(0<<4);//seteint9fallingedgeint

rEINTPEND|=(1<<4)|(1<<9);//cleareint4

rEINTMASK&=(~(1<<4))&(~(1<<9));//enableeint4

ClearPending(BIT_EINT0|BIT_EINT8_23|BIT_EINT2|BIT_EINT4_7);

pISR_EINT8_23=(U32)Key_ISR1;

pISR_EINT4_7=(U32)Key_ISR2;

pISR_EINT0=(U32)Key_ISR3;

pISR_EINT2=(U32)Key_ISR4;

EnableIrq(BIT_EINT0|BIT_EINT8_23|BIT_EINT2|BIT_EINT4_7);

while(Uart_GetKey()!

=ESC_KEY);

DisableIrq(BIT_EINT0|BIT_EINT8_23|BIT_EINT2|BIT_EINT4_7);

}

串口通信实验:

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

NAME:

Main.c

DESC:

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

externvoidInit_all(void);

/****toaddtheexternfunctiondecleration*******************/

externvoidURAT_Test(void);

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

 

voidMain(void)

{

Init_all();

while

(1)

{

/*******************Addtheuser'sprogram!

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

URAT_Test();

}

}

/*Function:

readthedatafromUART,andadd1ifisanumberorcharacter*/

externcharUart_GetKey(void);

externvoidUart_SendByte(int);

intisDigit(unsignedchar);

intisLetter(unsignedchar);

voidURAT_Test(void)

{unsignedcharc;

c=Uart_GetKey();

if(isDigit(c)||isLetter(c))

Uart_SendByte(c+1);

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

当前位置:首页 > 小学教育 > 语文

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

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