玩转easyARM imax283A开发版(二),移植NES模拟器并增加按键驱动,让板子可以玩超级玛丽游戏

简介: 玩转easyARM imax283A开发版(二),移植NES模拟器并增加按键驱动,让板子可以玩超级玛丽游戏

移植移植infoNES模拟器到嵌入式linux上,并增加支持声音输出和按键


代码放在了github上。


https://github.com/yongzhena/infoNES


先来个效果截图:





按键驱动源码:


#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <linux/device.h>
#include <../arch/arm/mach-mx28/mx28_pins.h>
#include "gpio.h"
static struct class *joypad_drv_class;
/**
   * FC手柄 bit 键位对应关系 真实手柄中有一个定时器,处理 连A  连B 
   * 0  1   2       3       4    5      6     7
   * A  B   Select  Start  Up   Down   Left  Right
*/
static ssize_t joypad_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
{
  //利用 sszie_t 返回 手柄键值 
  //buf 是有符号无法保存 8 bit
  int i;
  ssize_t val = 0;
  if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA6))){
    //printk(KERN_INFO "key1 pressed!\n");
    val = 1<<0; //A
  }else{
    //printk(KERN_INFO "no key pressed!\n");
  }
  if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA5))){
    //printk(KERN_INFO "key2 pressed!\n");
    val = 1<<6;//LEFT
  }
  if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA4))){
    //printk(KERN_INFO "key3 pressed!\n");
    val = 1<<3;//start
  }
  if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_LCD_D18))){
    //printk(KERN_INFO "key4 pressed!\n");
    val = 1<<7;//RIGHT
  }
  if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_LCD_D17))){
    //printk(KERN_INFO "key5 pressed!\n");
    val = 1<<5;//UP
  }
  return val;
}
static struct file_operations joypad_drv_fops = {
  .owner  =   THIS_MODULE,
  .read   =   joypad_drv_read,
};
int major;
//注册驱动程序
int joypad_drv_init(void)
{
  printk(KERN_INFO "joypad_drv_init\n");
  major = register_chrdev(0, "joypad_drv", &joypad_drv_fops);
  //自动创建 dev 节点
  joypad_drv_class = class_create(THIS_MODULE, "joypad_drv");
  device_create(joypad_drv_class, NULL, MKDEV(major, 0), NULL, "joypad");
  //P3.26 PINID_SAIF1_SDATA0配置为输入
  gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SAIF1_SDATA0));
  gpio_direction_input(MXS_PIN_TO_GPIO(PINID_LCD_D17));
  gpio_direction_input(MXS_PIN_TO_GPIO(PINID_LCD_D18));
  gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA4));
  gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA5));
  gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA6));
  return 0;
}
//卸载驱动程序
void joypad_drv_exit(void)
{
  printk(KERN_INFO "joypad_drv_exit\n");
  unregister_chrdev(major, "joypad_drv");
  device_destroy(joypad_drv_class, MKDEV(major, 0));
  class_destroy(joypad_drv_class);
}
module_init(joypad_drv_init);
module_exit(joypad_drv_exit);
MODULE_LICENSE("GPL");


编译驱动为joypad.ko的makefile:


KERN_DIR = /mnt/hgfs/b503/imax283/linux-2.6.35.3
all:
  make -C $(KERN_DIR) M=`pwd` modules 
clean:
  make -C $(KERN_DIR) M=`pwd` modules clean
  rm -rf modules.order
obj-m += joypad.o


加载驱动的方法:


insmod joypad.ko



卸载驱动方法:


rmmod joypad.ko



移植InfoNES到imx6ull(一) | 码农家园


单片机---HLK-W801移植Nes模拟器(一)_胖哥王老师的博客-CSDN博客_nes模拟器源码

相关文章
|
Linux 开发工具
瑞芯微RV1109配置GPIO设备树修改笔记(熟悉新平台从点灯大法开始)
瑞芯微RV1109配置GPIO设备树修改笔记(熟悉新平台从点灯大法开始)
292 0
|
存储 Linux Android开发
会C/C++就可以开发Linux/Android应用程序?替代传统串口屏的Yoxios了解一下!
会C/C++就可以开发Linux/Android应用程序?替代传统串口屏的Yoxios了解一下!
208 0
|
图形学 iOS开发
Unity 之 代码获取IOS设备型号
两种方式获取IOS设备型号,一种可以根据机型进行处理,另外一种则是按照屏幕比例进行分类,一起来了解一下吧~
604 0
Unity 之 代码获取IOS设备型号
玩转easyARM imax283A开发版(一),移植madplay让板子支持mp3音乐播放
玩转easyARM imax283A开发版(一),移植madplay让板子支持mp3音乐播放
|
Windows
nxp官方uboot移植到野火开发板PRO(无任何代码逻辑的修改)
nxp官方uboot移植到野火开发板PRO(无任何代码逻辑的修改)
168 0
|
JavaScript 编译器 Linux
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十四)文字显示(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十四)文字显示
269 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十四)文字显示(上)
|
Linux
ARM6818开发板输入设备(触摸屏)操作(开发五子棋游戏)
ARM6818开发板输入设备(触摸屏)操作(开发五子棋游戏)
450 0
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十五)具体单板的按键驱动程序(查询方式)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十五)具体单板的按键驱动程序(查询方式)
262 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十五)具体单板的按键驱动程序(查询方式)
|
Ubuntu Linux 编译器
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十七)具体单板的LED驱动程序
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十七)具体单板的LED驱动程序
204 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十七)具体单板的LED驱动程序
|
Linux 芯片
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十五)最简单的LED驱动程序
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十五)最简单的LED驱动程序
161 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十五)最简单的LED驱动程序