S3C2440下几个简单的裸机接口程序
来源:互联网 发布:个人如何获取大数据 编辑:程序博客网 时间:2024/05/13 11:29
例一:
@******************************************************************************
@ File:led_on.S@ 功能:LED点灯程序,点亮LED1
@******************************************************************************
.text
.global _start
_start:
LDR R0,=0x56000010 @ R0设为GPBCON寄存器。此寄存器
@ 用于选择端口B各引脚的功能:
@ 是输出、是输入、还是其他
MOV R1,#0x00001400
STR R1,[R0] @ 设置GPB5为输出口, 位[10:9]=0b01
LDR R0,=0x56000014 @ R0设为GPBDAT寄存器。此寄存器
@ 用于读/写端口B各引脚的数据
MOV R1,#0x00000000 @ 此值改为0x00000020,
@ 可让LED1熄灭
STR R1,[R0] @ GPB5输出0,LED1点亮
MAIN_LOOP:
B MAIN_LOOP
例二:
@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@******************************************************************************
.text
.global _start
_start:
ldr r0, =0x56000010 @ WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启
ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
@ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
bl main @ 调用C程序中的main函数
halt_loop:
b halt_loop
led_on_c.c文件
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
int main()
{
GPBCON = 0x00001400; // 设置GPB5为输出口, 位[11:10]=0b01
GPBDAT = 0x00000000; // GPB5输出0,LED1点亮
return 0;
}
例三:
@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@******************************************************************************
.text
.global _start
_start:
ldr r0, =0x56000010 @ WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启
ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
@ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
bl main @ 调用C程序中的main函数
halt_loop:
b halt_loop
//key_led.c文件
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPGCON (*(volatile unsigned long *)0x56000060)
#define GPGDAT (*(volatile unsigned long *)0x56000064)
/*
* LED1-4对应GPB5、GPB6、GPB7、GPB8
*/
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))
/*
* K1-K4对应GPF4、GPF1、GPF2、GPF0
*/
//#define GPG11_in ~(3<<(11*2))
//#define GPG3_in ~(3<<(3*2))
#define GPF2_in ~(3<<(2*2))
#define GPF0_in ~(3<<(0*2))
#define GPF1_in ~(3<<(1*2))
#define GPF4_in ~(3<<(4*2))
int main()
{
unsigned long dwDat;
// LED1-LED4对应的4根引脚设为输出
GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out ;
// K1-K2对应的2根引脚设为输入
//GPGCON = GPG11_in & GPG3_in ;
// K3-K4对应的2根引脚设为输入
//GPFCON = GPF2_in & GPF0_in ;
GPFCON = GPF2_in & GPF0_in & GPF1_in & GPF4_in ;
while(1){
//若Kn为0(表示按下),则令LEDn为0(表示点亮)
//dwDat = GPGDAT; // 读取GPG管脚电平状态
dwDat = GPFDAT; // 读取GPF管脚电平状态
//GPBDAT |= (1<<5);
if (dwDat & (1<<1)) // K1没有按下
GPBDAT |= (1<<5); // LED1熄灭
else
GPBDAT &= ~(1<<5); // LED1点亮
if (dwDat & (1<<4)) // K2没有按下
GPBDAT |= (1<<6); // LED2熄灭
else
GPBDAT &= ~(1<<6); // LED2点亮
// dwDat = GPFDAT; // 读取GPF管脚电平状态
if (dwDat & (1<<2)) // K3没有按下
GPBDAT |= (1<<7); // LED3熄灭
else
GPBDAT &= ~(1<<7); // LED3点亮
if (dwDat & (1<<0)) // K4没有按下
GPBDAT |= (1<<8); // LED4熄灭
else
GPBDAT &= ~(1<<8); // LED4点亮
}
return 0;
}
- S3C2440下几个简单的裸机接口程序
- s3c2440的SDRAM裸机程序
- s3c2440的MMU裸机程序
- s3c2440的中断裸机程序
- s3c2440的LED点灯裸机C程序
- s3c2440的Nand flash裸机程序
- S3C2440 RTC 裸机程序
- s3c2440 mmu 裸机程序
- s3c2440裸机程序之----LED
- s3c2440裸机程序 学习记录
- S3C2440裸机程序【3】DM9000A
- KEIL下S3C2440裸机开发
- S3C2440裸机程序【2】串口uart程序
- ARM裸机程序研究 - S3C2440时钟初始化
- S3C2440裸机程序开发点亮LED
- 用openjtag调试s3c2440裸机程序
- S3c2440裸机程序【1】跑马灯
- S3C2440 windows下使用jlink gdbserver,arm-none-eabi-gdb进行裸机程序编写调试
- 海明码分组原则
- Java虚拟机
- java 中 Math.round() Math.ceil() Math.floor()区别
- 内存不足 java.lang.OutOfMemoryError: Java heap space
- 常规的贴片电阻的标准封装及额定功率
- S3C2440下几个简单的裸机接口程序
- Java Ping
- List删除问题
- Qt事件机制详解
- 为Tomcat指定JDK
- myEclipse10 之 outOfMemoryError PermGen space
- 计算机常识
- java基础
- 告别myeclipse下部属web应用程序