嵌入式重点代码.docx
- 文档编号:23888728
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:17
- 大小:18.29KB
嵌入式重点代码.docx
《嵌入式重点代码.docx》由会员分享,可在线阅读,更多相关《嵌入式重点代码.docx(17页珍藏版)》请在冰豆网上搜索。
嵌入式重点代码
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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 重点 代码