直接贴代码:
/*
name:led_key
author:lvtory
硬件平台:ok6410
function:
key1:实现从0-15二进制级数点亮led
key2:实现初始化
key3-key6:按键对应点亮相应led
使用查询方式
create:2013.3.17
*/
/**** led gpio NLED1-4 -> GPM0-3 */
#define rGPMCON (*(volatile unsigned *)0x7F008820)
#define rGPMDAT (*(volatile unsigned *)0x7f008824)
#define rGPMPUD (*(volatile unsigned *)0x7f008828)
/**** key gpio KEYINT1-6 ->GPN0-5 */
#define rGPNCON (*(volatile unsigned *)(0x7F008830))
#define rGPNDAT (*(volatile unsigned *)(0x7F008834))
#define rGPNPUD (*(volatile unsigned *)(0x7F008838))
void led_run();
void init()
{
/*配置led*/
rGPMCON=0x1111 ;//配置为 OUTPOUT
rGPMPUD=0x0;
rGPMDAT=0x0f; //全灭
/*配置key*/
rGPNCON=0x00 ;//配置为 INPUT
}
void delay(int n)
{
int i=0;
int j=0;
for(i=0;i<10000;i++)
{
for(j=0;j<2000;j++)
{
}
}
}
void key()
{
int key;
while(1)
{
while((key=(rGPNDAT&0x3f))==0x3f);
switch(key)
{
case 0x3e:
led_run();
break;
case 0x3d:
init();
break;
case 0x3b:
rGPMDAT=0x0e;
break;
case 0x37:
rGPMDAT=0x0d;
break;
case 0x2f:
rGPMDAT=0x0b;
break;
case 0x1f:
rGPMDAT=0x07;
break;
}
}
}
void led_run()
{
int num=0;
int i;
for(i=0;i<16;i++)
{
if((rGPNDAT&0x3f)==0x3d)
{
i=0;
rGPMDAT=~i;
break;
}
rGPMDAT=~i;
delay(100);
}
}
void Main()
{
init();
key();
}
汇编启动代码:
IMPORT Main
AREA |C$$code|, CODE, READONLY
ENTRY
start
B Main ;跳入MAIN程序
END
关键字:按键测试 c语言版
引用地址:
ok6410 按键测试c语言版程序
推荐阅读最新更新时间:2024-11-17 08:27
Linux下s3c6410的GPIO操作(6)
1、在 Linux下s3c6410的GPIO操作(3) 这篇博客中少分析了一个函数,当时列出了源码,但没分析,现在补上。 什么函数呢?如下所示: #ifdef CONFIG_S3C_GPIO_CFG_S3C64XX /** * s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config. * @chip: The gpio chip that is being configured. * @off: The offset for the GPIO being configured. * @cfg: The configurati
[单片机]
s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)
还是先说下整体结构,又要说到大家很熟悉的平台设备了,同样看门狗定时器也是作为平台设备存在的,但与以前的不同的地方是,看门狗定时器是一种混杂设备,先介绍下混杂设备。 1、混杂设备 1.1、混杂设备并没有明确的定义。它的主设备号是10,不同的设备用次设备号区分。混杂设备用结构体miscdevice表示,源码如下: struct miscdevice { int minor; 次设备号 const char *name; 设备名 const struct file_operations *fops;设备的操作函数,与字符设备相同 struct list_head list; 链接混杂设备的链表 struct device *
[单片机]
OK6410A 开发板 (三) 13 u-boot-2021.01 boot 解析 SPL 镜像运行部分 boot 详细解析
url : git@github.com:lisider/u-boot.git branch : ok6410a commit id : e63a4077ad3aea53107495b0b68b95e720fe6033 config : ok6410a_mini_defconfig // 涉及的 .S .s .c 文件 有 67个 从入口出口来看 // 运行在 0x0c00 0000 // 入口 为 arch/arm/lib/vectors.S 中的 _start 标号处的 b reset reset arch/arm/cpu/arm1176/start.S 39 lowlevel_init(1
[单片机]
OK6410A 开发板 (八) 11 linux-5.11 OK6410A start_kernel 打印角度 第一阶段 mem
该阶段完成了 1. 根据 memblock 的 reserved 成员 reserve 不需要填充的页表 // reserve_bootmem_region 2. 通过 在 全物理内存内 互补 memblock 的 reserved,得到未使用的物理内存,填充需要填充的页表 // __free_memory_core 3. 至此 , buddy 初始化完成 4. 用(内存地址,内存大小,申请块大小)填充 kmalloc_caches )] )] 5. 至此 , slab 初始化完成 6. 将 在vmalloc区间的 已经使用的虚拟内存地址A(主要是io设备) 注册到 vmap_area_root 7. 通过
[单片机]
OK6410A 开发板 (三) 20 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 system clock
system clock 的设置 主要参与的寄存器 归属 3 SYSTEM CONTROLLER 范围 0x7E00_F000 0x7E00_FFFF S3C6410的时钟 |---APLL---------ARMCLK --- 用于 CPU | 外部晶振(XTIPLL)+内部的OSC(振荡器) | 0 | |----HCLK --- 用于 AXI/AHB 总线外设 |---OM --- 主时钟 ---- |---MPLL----| 外部时钟(EXTCLK) | 1 | |----PCLK --- 用于 APB 总线外设
[单片机]
linux串口终端驱动——s3c6410平台(三)
上一篇关注的是tty上层字符层面的操作和注册,这一篇主要关注线程的注册,如何与上层建筑联系起来。 一、 tty_ldisc.c提供了tty_register_ldisc()接口用于注册线路规程,例如/driver/char/n_tty.c文件则针对N_TTY线路规程实现了具体的tty_disc结构体中的成员。 tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY) 其中有 #define N_TTY 0 struct tty_ldisc_ops tty_ldisc_N_TTY = { .magic = TTY_LDISC_MAGIC, .name = n_tt
[单片机]
(ARM11 S3C6410)关于裸机串口与定时器
调试MCU经常需要用串口。 裸机前后台系统,基本就是基于定时器中断。 init.s 启动代码 Mode_USR EQU 0x10 Mode_FIQ EQU 0x11 Mode_IRQ EQU 0x12 Mode_SVC EQU 0x13 Mode_ABT EQU 0x17 Mode_UND EQU 0x1B Mode_SYS EQU 0x1F UND_Stack_Size EQU 0x00000400 SVC_Stack_Size EQU 0x00001000 ABT_Stack_Size EQU 0x00000400 FIQ_Sta
[单片机]
基于ok6410的韦东山驱动视频简要分析--ts驱动
一、写ts驱动步骤(新手稍微看下即可,内容有点搞) 1、复制头文件; 2、写入口函数跟出口函数 3、分配一个input_dev结构体, 在头文件下插入:static struct input_dev *ts_dev; 在init中分配:ts_dev = input_allocate_device(); 4、注册:在init中注册:input_register_device(ts_dev); 5、设置: 1、能产生哪类事件: set_bit(EV_KEY, ts_dev- evbit);按键类事件 set_bit(EV_ABS, ts_dev- evbit);触摸屏事件 2、能产生这类事件
[单片机]