玩转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 bitint 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.3all:make -C $(KERN_DIR) M=`pwd` modules clean:make -C $(KERN_DIR) M=`pwd` modules cleanrm -rf modules.orderobj-m += joypad.o加載驅動的方法:
insmod joypad.ko
卸載驅動方法:
rmmod joypad.ko
移植InfoNES到imx6ull(一) | 碼農家園?
單片機---HLK-W801移植Nes模擬器(一)_胖哥王老師的博客-CSDN博客_nes模擬器源碼
總結
以上是生活随笔為你收集整理的玩转easyARM imax283A开发版(二),移植NES模拟器并增加按键驱动,让板子可以玩超级玛丽游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中new具体意思_java中ne
- 下一篇: 力科示波器上位机软件NS-Scope功能