蜂鸣器汇编:
.global _start
_start:
LDR R0,=0XE02000A0
LDR R1,[R0]
BIC R1,R1,#(0XF)
ORR R1,R1,#(0X1)
STR R1,[R0]
loop:
LDR R0,=0XE02000A4
LDR R1,[R0]
MOV R1,#0
STR R1,[R0]
BL delay
LDR R0,=0XE02000A4
LDR R1,[R0]
MOV R1,#1
STR R1,[R0]
BL delay
b loop
delay:
MOV R2,#0x3000000
temp:
SUB R2,R2,#1
CMP R2,#0
BNE temp;
mov PC,LR
流水灯
@# define rGPJ2CON 0xe0200280
@# define rGPJ2DAT 0xe0200284
.global _start
_start:
@将GPJ2_0~3---->output
LDR R0, =0xe0200280
LDR R1, [R0]
BIC R1, R1, #(0xff<<8)
ORR R1, R1, #(0x11<<8)
BIC R1, R1, #0xff
ORR R1, R1, #0x11
STR R1, [R0]
@int i = 0
MOV R4, #0
MOV R3, #1
@全灭
LDR R0, =0xe0200284
LDR R1, [R0]
ORR R1, R1, #0xf
STR R1, [R0]
@while(1)
loop:
@亮
LDR R0, =0xe0200284
LDR R1, [R0]
BIC R1, R1, R3, LSL R4
STR R1, [R0]
BL delay
@灭
LDR R0, =0xe0200284
LDR R1, [R0]
ORR R1, R1, R3, LSL R4
STR R1, [R0]
BL delay
ADD R4,R4,#1
CMP R4,#4
MOVEQ R4,#0
BNE loop
b loop
delay:
MOV R2, #0x3000000
temp:
SUB R2, R2, #1
CMP R2, #0
BNE temp
MOV PC, LR
.end
一个按键控制灯(HOME键)
.global _start
_start:
@LED CONFIG
LDR R0,=0XE0200280
LDR R1,[R0]
BIC R1,#(0XFF<<8)
ORR R1,#(0X11<<8)
BIC R1,#(0XFF)
ORR R1,#(0X11)
STR R1,[R0]
@KEY CONFIG
LDR R0,=0XE0200C40
LDR R1,[R0]
BIC R1,#(0XFF<<8)
BIC R1,#(0XFF)
STR R1,[R0]
@LED DAT CONFIG
LDR R0,=0XE0200284
LDR R1,[R0]
MOV R1,#0XF
STR R1,[R0]
MOV R4,#2
MOV R3,#1
loop:
LDR R0,=0XE0200C44
LDR R1,[R0]
LDR R5,=0XE0200284
LDR R6,[R5]
CMP R1,#0XD
BLEQ delay
CMP R1,#0XD
EOREQ R6,R6,R3,LSL R4
STR R6,[R5]
STR R1,[R0]
b loop
delay:
MOV R2,#0X6000000
temp:
SUB R2,R2,#1
CMP R2,#0
MOVEQ PC,LR
BNE temp
.end
利用IRQ控制四个按键来控制四个LED,低电平外部触发
#include "int.h"
void int_init( void);
void intc_setvectaddr(unsigned long intnum, void (*handler)(void));
void intc_clearvectaddr(void);
void intc_enable(unsigned long intnum);
void isr_key(void)
{
if((EXT_INT_3_PEND&0x1)==1)
GPJ2DAT ^= (1<<0); //toggle
if(((EXT_INT_3_PEND>>1)&0x1)==1)
GPJ2DAT ^= (1<<1); //toggle
if(((EXT_INT_3_PEND>>2)&0x1)==1)
GPJ2DAT ^= (1<<2); //toggle
if(((EXT_INT_3_PEND>>3)&0x1)==1)
GPJ2DAT ^= (1<<3); //toggle
intc_clearvectaddr();
EXT_INT_3_PEND |= 0XF<<0;
}
int main(void)
{
GPJ2CON &=~(0xffff);
GPJ2CON |= (0x1111);
int_init();
GPH3CON = (0XFFFF);
EXT_INT_3_CON &=~(0XFFF);//低电平触发
intc_setvectaddr(NUM_EINT16_31, isr_key);
EXT_INT_3_MASK &= ~(0xF<<0);//不屏蔽中断
intc_enable(NUM_EINT16_31);
while (1);
}