well,前排支持下
龙讯的LT7911 还有一个硅谷数模ANX7530
谢谢楼上几位,t113-s3和F133-B只有H265解码,没有编码啊
那要带tvin的好像没有更好的了。可以使用R528 + 一个TVIN转BT565的芯片。从528的摄像头接口输入
找对地方了。F133-B ,找晕哥买 https://item.taobao.com/item.htm?id=687730645771
关注这个问题,帮顶
基本都是松瀚,瑞昱的方案。也有一些其他不是很出名的。有代码可调一些参数,像码率,图像质量什么的,最后帧率就算usb2.0 8M摄像头用mjpeg格式的话也能做到20-30fps
一般都是可以的。用spi初始化就不用太特定去写屏幕驱动,配下参数就行。如果用dsi的命令去初始化就要写驱动
微凉VeiLiang 说:不是直接用配套代码就可以了么。 dpp2607 + dlpa1000的搭配
大佬你开源的F1C100板子还有么,能不能卖一块给我学习
没有贴片。你去打板子手工贴就行
看到https://github.com/afu120/Tina-Linux这个sdk很全面,但是sdk里面有些是子仓库,mangopi-sbc 这个账号好像把全部仓库撤掉了。
类似下面的子仓库没有,有人能够分享下么
https://github.com/mangopi-sbc/tina-spl-pub
https://github.com/mangopi-sbc/tina-package
不是直接用配套代码就可以了么。 dpp2607 + dlpa1000的搭配
不错,买了一个,研究研究看如果可以做wifi投屏就好
微凉VeiLiang 说:@AAA_GET
那证明有中断了。刷图的问题或者说你cvbs信号没有经过滤波和隔直电容就接到脚上楼主你那个摄像头刷视频延迟很高啊,100-200ms,好像没有用到DMA哦,放弃了。我打算用带DMA的裸机代码
要用debe。忘记我这个rtt工程有没有开源debe出来了
换成4.0的sdk就好了.....1920*1080也不会花屏
@AAA_GET
那证明有中断了。刷图的问题或者说你cvbs信号没有经过滤波和隔直电容就接到脚上
@AAA_GET
要修改这个rtconfig.py文件,指定下你的编译工具链路径。具体也可以参考下面的帖子
https://whycan.com/t_5755.html
楼主还在更新吗?我在查芯片的时候找到了这里,发现楼主的GitHub仓库,已经无法使用在最新的RTT上了,想问楼主有没有啥好的解决办法
主要是报什么错误?
@微凉VeiLiang
找到能够使用的解包工具了
imgRePacker_206.zip
微凉VeiLiang 说:gpu频率也调过几个版本,好像也是没有效果
抱歉,Tina5上面我们没有测试过Qt OpenGL,试一试Tina4(需要自己行勾选Qt编译打包):
链接: https://pan.baidu.com/s/16aSGIsIlPa_K2euZVltRKA?pwd=A133
提取码:A133
好的,感谢,我下载看看
gpu频率也调过几个版本,好像也是没有效果
尝试了好几样操作都不行.....有点难搞
1.降低ddr频率,也降到了360Mhz,问题依旧
2.把开发板能够使用的的ko 两个替换,重启没啥报错,但是问题依旧
3.把开发板能够运行的 libgpu里面同样的so文件替换,软连接好,后编译出固件,问题依旧
4.修改几项设备树gpu相关参数和开发板的固件一样,依旧无果....
想问下能否单独分享一个kernel镜像和文件系统镜像。boot.img 和rootfs.img 。主要是论坛前面找了好几个解包软件都不好使,非常感谢
@memory
感谢,这个固件在开发板上面可以正常跑了。我看看我的板子是不是也是内存频率或者配置的问题
@微凉VeiLiang
我问了一下店主,说可能是tina4只适配了1G,2G内存的问题,4G版本可能需要微调一下 sys_config.fex ddr 参数。
好的,感谢。我买的这个确实是4G版本
我使用上面的板子和固件,找到了一个屏幕800*480的。发现开机后进入系统后没过几秒就会卡死。然后趁着这几秒如果kill掉 /usr/bin/cellphone 就不会卡死。经过处理掉开机自启动后,手动运行,也是会卡死花屏,这个花屏是死机那种花屏。如下视频所示,这个不知道是因为硬件差异还是什么,供电的话也加多了一个供电的usb线了。现象是一样的
@memory
谢谢,我的是这个开发板。不过屏幕没有,我捣鼓捣鼓
tplayer播放mp4文件是正常的。QT如果不使用到gpu也是正常的
memory 说:感谢,这边看到的是左右错位花屏来回跳。你这个解决方案我试下看看。
还是一样的,不知道是什么情况。跑手机的demo视频如下
感谢,这边看到的是左右错位花屏来回跳。你这个解决方案我试下看看。
@微凉VeiLiang
https://www.bilibili.com/video/BV1fU4y1z7Rp/https://www.bilibili.com/video/BV1LK411f7x9
跑这个 cellphone 等Qt demo都是正常的
嗯呢,难道和我的分辨率有关。使用的是1920*1080分辨率。或者说内存速度。我也有小智的a133的开发板,方便分享个系统烧录镜像么,之前我测试在开发板上面也是跑OpenGL的demo有异常的
opencl 只会跑demo,不会onnxruntime
我这边 Qt跑OpenGL DEMO正常,没有花屏。
opengl demo是格子吧。我看你好像移植了qt5. 试下跑
export QT_QPA_PLATFORM=eglfs && \
export QT_QPA_EGLFS_INTEGRATION=none && \
/usr/share/qt5/examples/opengl/hellogles3/hellogles3
我在荔枝派nano运行,颜色不对,应该是RB交换了,请问在哪配置,还有有办法修改游戏的分辨率吗,这么大一块屏幕就显示这么点区域
可以自己处理下刷图,每个像素点绘制多次,甚至可以插值,显示更细腻点
感谢分享。我用a133跑这个opencl_demo 计算正常。但是作为onnxruntime 的后端,跑不过onnxruntime test。失败原因是计算结果不一致
同时跑qt 使用gpu 做后端刷图时候会花屏,请问有遇到过么
声音驱动是正常的么?
SND_PCM_FORMAT_U8 这个配置是是配成8bit吧,默认的工程使用的是 16bit的wave数据
原代码
f1c100s_audio_config(1,16,44100);
f1c100s_audio_open(SoundBufLen*2);
微凉VeiLiang 说:你没插有usb转串口的设备就不会有/dev/ttyUSB0. 如果已经插了就 试下lsusb看看枚举是否成功
我查了一个u盘上去,也没有这个文件。但是lsusb可以看到。
插u盘是不会有的。应该是要usb虚拟串口设备才是/dev/ttyUSB0或者/dev/ttyACM0
瞬间涌现了高中刚学51单片机时候记忆
当时买了一本51的数,上面有个例程就是点灯。
书上是这样写的
#include <reg51.h>
void main()
{
while(1)
{
P1_2 = 1;
P1_3 = 0;
P1_4 = 1;
}
}
说编译好烧进去能够在对应的脚有电平。我一个字母一个符号都照抄了,编译不过....
当时一点概念都没,最后论坛网友提示说了一堆可能的原因。其中就有个说出来了上面其实其实是最低级的错误,其实是书上写错了,或者说P1_2是宏但没给定义
正确的操作应该是P^2=0;
改了就好了=_=
你没插有usb转串口的设备就不会有/dev/ttyUSB0. 如果已经插了就 试下lsusb看看枚举是否成功
@vsf
好的,我问商家拿到一个更全面的图
好几款芯片后缀价格差别比较大,有什么区别呢
CVBS就是这样的av画质。要更好看的效果要去调饱和度和对比度,可以后期算法调,也可以调tvd的相关寄存器,不过这个资料少
usb gadget使用在linux下使用要通过configfs去配置 的,你可以找下或者gpt帮你生成一个shell脚本,运行脚本才会枚举
用的什么接口?dvp还是cvbs
不知道实际效果如何,如果用来做航模FPV飞行眼镜会怎样?
近视人表示根本看不清。还有就是这个是单目的
写在前面
之前就想着买个AR光波导的眼镜体验下,然后最近在闲鱼上看到有买200左右的坏的眼镜,就果断下手了。之前也查过,网上好像只有rokid glass一代的拆解,没有二代的,这次收到就果断开拆!
开始拆解
正脸
光波导镜片,我买到这个还是碎掉的。。。。还有就是上面有点胶纹,看群友拆解的,说是里面PBS到光波导的透镜部分粘合的胶有点问题,导致有胶纹。也不知道能否清掉再找合适胶粘回来
先卸掉盖头
鼻托这里有个螺丝,拆拆拆
接下来的是前盖,也是简单卡一下,一扣就下来了,很方便
紧接着是 到胶粘+卡扣的外壳,上面主要也还是胶粘,大力出奇迹,扣就是了
扣下来的壳子,看看上面就是粘胶的
----------------------------------【分割线】-----------------------------------------
接下来是到主板,先来一张主板的全貌
三个芯片赫然在列。
【右】一个是凌阳的SPCA2680A,主要用于摄像头驱动,还有麦克风驱动。USB上电就能有一个UVC摄像头和麦克风输入,就是它的功劳。
【中】一个是龙讯的接口转换IC,LT7611D,作用是把DP视频信号转成MIPI-DSI信号送到LCOS驱动ic。
【左】最后一个是奇景Himax的HX7816,作用是驱动LCOS屏幕显示,支持MIPI和LVDS输入视频,转换成LCOS的时序驱动显示的信号.当前模组的LCOS一共有16组差分线。还有带RGB的LED驱动信号输出,用来控制灯光按照序列显示点亮。目前没有这个芯片的规格书流出,楼主搞来一些样片了
LCOS驱动芯片HX7816特写
LCOS背光驱动IC,RGB三通道。国半的L3549SQ
在眼镜正中间这颗芯片不知道型号,估计是位姿获取的9轴或者6轴位姿传感器,有认识的朋友告知下
整个眼镜的主控IC STM32F411CE6
调试接口和一些不知名的IC或者MOS管
这个地下还有个按键,确实不知道做什么用的,估计是为了进入某种模式或者升级模式吧。还有些触点是用来焊锡短接的,方便切换一些电路使用,值得参考
----------------------------------【分割线】-----------------------------------------
接下来到光机了
同样是胶粘的,找到缝隙就撬撬撬
费点劲搞下来了
光机特写
光机的屏幕是HX7318,分辨率是1366x768.但是在眼镜里面是1280x720.应该是切了部分不用。这个屏也没有规格书漏出
----------------------------------【分割线】-----------------------------------------
我收到这个光机是断掉的,自己拿个uv胶直接给粘上了。然后买了个HDMI转typec带供电的线,终于能够点亮了,但是显示有问题,如下
只能修咯,还有什么办法。为此还再买多一个好的对比。通过对比,可以确认光机和屏幕是ok的。问题出在板子上。
首要怀疑就是HX7816,先是吹焊下,发现一样的。再吹焊下LT7911,发现依旧。
没辙,总感觉是HX7816的问题,毕竟是bga,看不出假焊。找了几个样品回来,万事具备,拆!
没想到拆了再焊接一个新的上去,问题依旧。。。。。
只能自己对比好的那个眼镜了,typec到眼镜的线也怀疑过,对换了也是一样的。
又怀疑是固件没对,用stlink把好的眼镜固件读出烧入到坏的上面,没想到依旧是有问题。。。。。
最后除了座子还有就是LT7911的问题,还是先怀疑LT7911的问题吧,毕竟我手上也没有座子,直接开始吹焊对换IC
哈哈,没想到真的是LT7911的问题,对换了之后两个眼镜的现象也跟着变换了。能够正常显示了,显示效果偏绿,还有就是对比度不高。估计和光机有关了
好了,深夜,就码字码到这吧,喜欢玩屏幕、投影和AR眼镜的可以加群交流。后面再玩下衍射光波导
做了一个小的OVP0921新驱动版,板载一个PY32用来配置输入接口。还额外做了一个HDMI转RGB的板子,基于RTD2660.带一个I2S 的DAC和3W的功放,支持声音播放。
两个板子大小都是38mmx45mm左右。同样用贴片螺柱固定住了投影模组
目前调测RGB完美运行,组装了一下,一个小投影诞生啦
这个是之前的大号镜头。我也买了一个
感谢分享,用rtt很方便就对接上文件系统
前排支持一下
@alizx
参考
https://whycan.com/t_5755.html
我搞过。裸机是可以,但是最后还是上个rtos会更方便一点
楼主有发现DLP的没? TI的好像效果要好一点。
DLP都要专门控制ic。比较麻烦
赞,颜色好像反了
720P的贴了一个板子,这次直接做两层板,正常能用,不用加钱。
加入了Flash使用。目前自动启动能够运行flash的代码了。没有连接mipi信号显示默认的pattern
分辨率1280x720.原一款投影上的,估计是退单的光机。分辨率高,但是驱动复杂,要专门的驱动IC。LCOS芯片是OVP2200。驱动IC我们通常使用的是OVP0921.这个芯片有点贵,应该在70以上(有的报价140),嘉立创目前有10个存货。芯片作用是把输入信号RGB888或者mipi转出lcos屏的差分信号。同时支持梯形纠正,缩放等功能。通常这款芯片是应用于AR眼镜上面的
楼主自己买了写OVP0921芯片,做了个驱动板,点亮了这个屏。目前驱动板改了一个版本,输入是标准的40Pin的RGB888接口和树莓派的mipi-csi接口。
驱动过程,注意的是OVP0921内置了单片机,单片机的代码有两种方式启动运行。一种是通过外置一颗spi-flash启动,一种是通过I2C接口上传固件序列启动运行。目前好像是必须要有固件代码。配置其他寄存器才生效。驱动过程中还有个问题就是,usb不知道是否有用,默认好像是连接上去没有反应的。
效果还行,感觉灯光效率ok。驱动灯光我这里没有用通常的lcos三色灯驱动ic,采用分立的共阳ic,是hi7003.感觉也还行
1.模组貌似是这款投影仪上面用的。型号AAXA Pico HD Projector .
2.还有一些AR眼镜光波导的720p也是用这款屏幕。外网上面找到一个模组的资料
ovp2200模组30Pin-DM-ARM-101.pdf
3.这里是楼主整理的一个资料文档。更多的资料不方便分享,因为属于一些保密文件。类似于规格书这种,具体有问题群里可以交流
720p投影小模组接口定义和驱动方法.pdf
引脚定义
楼主做的一个驱动板
分辨率320x240.体积小,驱动简单,只要做一个转接板转出来就好,就连初始化都不需要。默认上电配置就是RGB666接口。芯片是HX7033。灯是只有一颗白灯,亮度一般般。白灯貌似是himax家的专利,其他的lcos都是三原色。himax家大都是白光的。采用的是delta RGB像素,就是在屏上加个滤色膜,做到彩色显示。
效果一般般。灯光较暗淡。不过只要10块钱,免驱,又这么小巧。要什么自行车呢,嘿嘿
支持RGB666接口输入,也是通用40Pin接口。然后灯光驱动。还有一个3.3V升压10V给屏用。
背部还预留了一个ESP32-S3的模块(要支持RGB接口引出那款)和TF卡座。本意是还可以做个无线投屏啥的。还没有调,有人调好可以分享下,哈哈
HX7033_Board.zip
咸鱼10元模组资料AN-HX7033-AN01-ver01.pdf
就码这么多字吧,有问题可以加群聊,或者回帖
楼主有没有兴趣研究下 国科微的 GK7205V200 这个才不到 200 也是A7 + 64MB 更具有性价比。并且淘宝能买到元件
这个是不是可以通用以前海思的sdk
@jiabuda
是的,很方便使用。配置uMTP的conf文件就能任意你想作为显示的文件夹
微凉VeiLiang 说:USB gadget下的ffs,可以做mtp设备,用开源项目 https://github.com/viveris/uMTP-Responder 就很方便
请教一下,这个支持t113这类不。看了代码是纯驱动好像~~应该类似adbd?
基于functionfs的,一般默认都编译进去了。uMTP只是一个应用程序,放到文件系统,需要时候执行下脚本调用就能作为mtp设备连接电脑了
USB gadget下的ffs,可以做mtp设备,用开源项目 https://github.com/viveris/uMTP-Responder 就很方便
两Lane的都可以,基本都能驱动。我裸机驱动过几个mipi摄像头
裸机使用usb host可以。但是接收uvc类设备的数据的还是很麻烦的
melis 上本身不支持么?
接上篇F1C100S玩游戏系列-FC红白机Nes模拟器(二)-移植正点原子的nes模拟器(ye781205的汇编核心),带声音,ARM转GNU汇编
和第一篇F1C100S玩游戏系列-FC红白机Nes模拟器(一)-移植InfoNes到BoloRTT工程,带Audio驱动,支持声音
现在第三篇,移植windows端最常见到的模拟器VirtuaNes,支持绝大部分的mapper了,可以说,我现在能找到的nes它都能正常运行!VirtuaNes是c++编写的,好在rtthread的启动linked文件对于c++也有支持。具体修改下面说。其实移植是在一年半以前了,但是一直没有发出来,是因为好像跑起来还有点bug,就是有时候会运行异常,没有找到具体原因。一拖再拖。想想还是发出来让大伙一起找好过自己摸索(逃。移植的是最新版本为0.97,先上链接https://github.com/VeiLiang/BoloRTT.git
---------------------------------------------------------------------------
然后接下来说说移植过程中遇到的坑
坑1:
如果你移植源码到rtthread的工程下,你会发现编译好,运行就会出问题,无法正常跑,,,这是因为VirtuaNes代码里面用到的char型,是有符号的。所以在makefile 或者说rtconfig.py中加入一个编译选项-fsigned-char
坑2:
对于有些指针是强转unsigned char* 到unsigned short或者unsigned int*的。如果unsigned char * 传入的地址不是4字节对齐的,那就崩了,因为没有加入非对齐访问。对于这种情况,我们可以把对应地方修改下,具体例子函数看inline WORD OP6502W( WORD addr )
还有一个坑是移植完成感觉特别卡慢的,,但时代久远,又没有做笔记,害。。。记起来再来这里说吧
----------------------------------------------------------------------------
说说rtthread如何加入c++的支持
1.在link脚本中加入以下代码,不然编译时候会报undefined
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
_sidata = .;
}
__exidx_end = .;
__rodata_start = .;
.rodata : { *(.rodata) *(.rodata.*) }
__rodata_end = .;
. = ALIGN(4);
.ctors :
{
PROVIDE(__ctors_start__ = .);
KEEP(*(SORT(.ctors.*)))
KEEP(*(.ctors))
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
PROVIDE(__ctors_end__ = .);
}
. = ALIGN(4);
.dtors :
{
PROVIDE(__dtors_start__ = .);
KEEP(*(SORT(.dtors.*)))
KEEP(*(.dtors))
PROVIDE(__dtors_end__ = .);
}
. = ALIGN(4);
2.代码中加入:void *__dso_handle = 0
-------------------------------------------------------------
最后上图和视频,顺便预告一下第四篇,会用图中的小屏幕awtk做一个界面,发布时间未定。。。
使用boloRTT中的工程代码,想测试下F1C100S 的USB host,编译烧写至SPIFLASH运行时,USB产生不了中断,烧写至内部ram运行时,却一直有中断触发,一直打印irq: usb_irq=08, tx_irq=00, rx_irq=00, dma_irq:0是什么原因
应该是驱动还没有好
全志的musb的usb部分中断清除标志位要通过再写入来清除
有的不用。试过国产替换的,硬件要改,但是软件不动
有匹配的,我用过
https://item.taobao.com/item.htm?spm=a1z09.2.0.0.d2f12e8da8LGO4&id=566547808242&_u=7j91ik3adab
这个
只能说我当时买的时候是直接可以用的,不保证店家是否修改过
数码管字体通过图像处理识别的话相对容易,而且是发光的。
是的,上清单了....
@cgpsky
看上去好像还是要求dll有除了构造函数之外的,能够返回实例化好类地址的成员函数。
这种看上去就是任务堆栈设置小了
先引用原有的头文件,用C++封装一层,然后导出C接口。
有参考的实例么
一样可以,类似于组件(plugin)加载,明天附上代码
感谢,蹲代码(:
楼主想表达什么
@armstrong
感谢,我去学习下看看。不过好像和上面说的方式类似。windows下dll不知道有没有类似问题的解决方案
@armstrong
是最适合c。C++不知道linux后面会不会加入这种方面的支持
有个做法就是在动态库里面提供对应的类的创建和销毁函数,然后动态库里面实例化和销毁。在创建时候返回的是类的地址,然后自己在外部定义一个同样的类,根据地址偏移进行操作(不知道是否准确,有点c语言结构体的思维了,类的对象地址排布好像也是一样的吧)
现在由于不能修改dll,好像这个办法就行不通了
通常,动态库链接我们都是在编译时候就指定链接位置和链接库的名字。这个方式叫做隐式调用,最简单也是通常我们经常用到的一个方式。
但是往往 ,我们在做支持扩展插件so或者其他特殊应用的时候,会用到Linux提供的加载动态链接库的api ,就是dlopen dlsym dlclose dlerror等。
使用api 我们能够无需事先知道链接库的名字,只有程序在运行要用到动态链接库的时候,就去指定的插件目录查找存在的so文件,然后加载就好,只要提供插件的函数名和我们预期一样,那么就能够准确调用并运行得到自己想要的结果。这个方法在c 语言编译生成的动态链接库使用起来一点问题都没有
但是,在c++编译生成的动态链接库就不一样了,一个是c++支持函数重载,动态库中的名字是加入了标志着函数参数信息的magic字符。这个会导致我们在dlsym的时候,根本无法获取到对应的我们命名的函数。好在只要我们只要对函数符号进行查找,一样是能够解决这个问题的。 最最麻烦的问题是使用到了动态链接库的类,还有类的成员函数,我们在程序中要实例化类,对类的函数进行调用,拿到类的成员等等,到这一步就非常难搞了.....
有没有大佬能够指点一下,怎么才能够解决这个问题?
注:目前最麻烦的是插件的动态库不是自己编译的,无法通过加入一些函数来在动态库内部实例化类返回指针这种形式解决
感谢大佬又解决了一个问题,越来越方便了
感谢楼主的辛苦翻译。是时候转向kicad了
关注,我前面编译过也能跑了,赞
@微凉VeiLiang
老哥我想问一下 这个调色板的值 有什么标准的吗
就是用网上写好的模拟器颜色就好了。我们无非就是拿来改成RGB888 或者RGB 565.亦或是调换下B和R位置而已
可能是因为SetAddress那一部分,之前没有处理好。
本周在调一个开发板,重新把文件放到文件系统,然后打包后烧录。开发板开机后ssh 和tty 登录报错Login Correct ,以前一般输入完root 用户名回车就登录好了,但是这次烧录后发现输入完root,卡了1-2秒钟,然后直接报错Login Correct,如下图所示
然后输入其它的用户名,就会能够进入到输入密码这一步。
经过查看/etc/passwd 和/etc/shadow文件并无问题,root 用户是设置的免密码登录,那么是什么问题呢
经过查阅资料,和经验,有可能是权限问题。但是又不大敢确认,资料也有说是登录相关动态库缺失的。。单独尝试了好像没有问题
最后还是确定去比对一下之前备份的文件系统,通过ls -l 查看,的确新的文件系统的/etc/目录下的权限和以前的不一样,全都变成777了,而老的是各有区别的。
如下
真相大白了,就是权限问题,不知道什么时候把文件系统里面的/etc/都给变成777权限了。应该是因为系统检测到权限不对,为了系统安全就给屏蔽了登录功能,不过报错如果能够更加明晰一点就好了
记得以前其它开发板也有出现过su命令权限报错问题,说是运行su的用户组属性不对什么的,这一看就能知道是权限问题
不知道有没有其他人也会遇到同样的情况,网络上这个报错说是因为权限的人好像不是很多。。。希望本帖能够帮助到遇到同样问题的人
厉害,前排支持一下,楼主挺多开源项目
围观一下,点屏强芯
h264软解码移植了好几个,但是大都是base profile的。支持main profile的比较少。还有相关视频封装格式解析要移植,比较耗时
varzhou 说:下载来看了一下,很多so库依赖
是的,最后一个链接看起来像是针对 Windows 的,无论如何问题是存在的,有没有人在裸机中使用过 H264 硬件解码器?
我有在调,但是由于没有一个比较合适裸机用的解码前端,所以目前项目还是在停滞状态。
楼上说的对。有一个就是uboot保护了spl的代码和boot1代码。甚至像三星的芯片好像还有boot2
word 2016版本好像本身支持
直接作为ftp服务器,把固件拖进去就行了
感谢分享
一个lane就是一对数据线。有的摄像头是2lane或者4lane的。没有试过一个mipi接口接两个mipi摄像头
没有看懂。连接串口不打印是怎么供电的。连接usb能重新打印芯片信息不是等于这个供电才是真的供上电么
厉害,玩到芯片的性能极限。还可以运行GNGEO
A7是正宫,别忽略她就行,玄铁性能未测试,A72这种水平肯定达不到的,A53估计有可能
玄铁这么厉害的么,还以为是A7 A9的性能呢。那有点意思
正常的,想去掉可以加施密特触发器,就是原理上加一个迟滞比较
点赞,一直是f1c100s用pwm输出作为摄像头的mclk,pwm最大支持24Mhz输出
赞,显示效果上个月又调试了一下,发现有个寄存器需要调下,锯齿效果会好很多,晚点发出来
TVD_REG_BASE+0x001c 这个寄存器的bit0 要等于0.原来初始化写的0x0087002f改成0x0087002a 显示效果好很多
赞,显示效果上个月又调试了一下,发现有个寄存器需要调下,锯齿效果会好很多,晚点发出来
微凉VeiLiang 说:裸机和rtthread下搞过。裸机移植的nxp的usb host 协议栈
NXP的是参考的哪个芯片的资料,方便透漏下吗
厉害,感谢分享
裸机和rtthread下搞过。裸机移植的nxp的usb host 协议栈
是的,f1c100s的音频裸机驱动没找到参考,不知谁研究过这个问题,如果有参考的话,可以去写个真正的音频驱动
我之前调过,分享nes游戏模拟的里面就是用audio输出的
https://github.com/VeiLiang/BoloRTT/blob/master/bsp/f1c/drivers/drv_audio.c
是f1c100s么,那直接用音频输出好了。这个spwm好像怎么搞都是会有点沙的...
感谢楼主分享,XFEL是真的好用,配合这个加密真是完美啦
好东西,感谢xboot大佬分享裸机工程
欢迎大佬进驻
导联什么的
dotnet 在arm上一般用来跑什么程序,上位机?
赞,支持一下
赞,感谢楼主分享
插楼,前排支持一下
没有遇到过,帮顶
哈,还不如自制一个
驾驶行为检测?我租过gofun共享汽车,上面就有这种,举个手摸摸耳朵就说请勿接打电话:)
www.linaro.org
release.linaro.org
赞,f1c100s我也推荐这个,windows下也有,很方便。下载arm-eabi
关注,听说sdk都已经出来了
F1C100S应该是没有的,可以用spi falsh的id
补充一下原始设计稿,不是贴图喔,上面的界面是纯代码实现。
不懂就问,这个设计辅助工具是什么
如果感兴趣的人多的话,我可以再讲讲XUI的细节,先说个概括性的。
GUI实现分为三种设计模式:
1,保留模式,传统GUI,都是使用此方案,优点是成熟,缺点是开发繁琐
2,立即模式,诞生于游戏开发领域,解决游戏交互,xui就采用此模式,此模式优点,是代码量低,所想所得,灵活性强1,编写事情响应得心应手,缺点是纯代码,驾驭不了代码的新手,会退避三分
3,声明式,这个在web领域,如火如荼,什么VUE啥的,很现代,优点是,效果赞,赏心锐目,而且现代,缺点是,需要脚本语言配合,而且需要描述能力稍强点的语言,再有就是性能需求也是较高。嵌入式裸奔系统或者各种rtos没有见到过有这种的。不知以后会不会有这玩意儿。
给力,说的很到位。VUE开发有的,叫有嵌入式的框架叫EVM的一直在搞这个。看上去很不错,后面现代ui应该是越来越多是声明式了。主要是配合设计工具特别好用。感觉AWTK也算是吧
上面提示可能是找不到对应的字体,因为加载的资源是assets-mini.c的
想着加载标准的Default资源,然后发现过大,编译不下。只能再自己摸索下了
其中发现个问题,就是assets_default.inc里面的guage是错别字,资源文件是gauge
提示主题缺失的问题已解决。是要实现assets_init函数加载资源
现在又提示字体问题了,按道理说应该有加载了字体资源了
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_measure_text_default:303 condition(c != NULL && str != NULL && c->font != NULL) failed!
canvas_draw_text_impl:625 condition(c->font != NULL) failed!
还有一个问题就是AWTK Designer 提示联网失败,然后显示可以导入许可证,但是许可证不知道怎么下载
目前画面是一片黑色
无文件系统的ucos,基于X1500
跑的demo_ui_app.c。
主函数只调用gui_app_start(240, 320);
ratio=f -2143974832 0
Build at: Apr 22 2021 18:08:48
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
theme_find_style:104 condition(theme->data != NULL) failed!
x1:0,y1:0,x2:239,y2:319
nr:76800
x1:0,y1:0,x2:239,y2:319
nr:76800
x1:6,y1:76,x2:239,y2:202
nr:29718
x1:6,y1:76,x2:239,y2:202
nr:29718
x1:6,y1:76,x2:239,y2:202
nr:29718
能模拟成USB 摄相头 UVC 吗?
淘宝小淘气的工程有uvc,我没有在f1c100s上调过
还有就是这种绕线电感好像不是功率电感,感觉还不如层叠电感
不插卡sunxi-fel可以进入么。R11 和R12有没有贴错成小于100k的电阻
楼上说得在理,感觉现在东西都不好做
和灯光有关,灯光亮,增益设低效果会好
感谢分享,后面可能会用到
感谢分享,linux 相关操作 。真的不是常用的容易忘记,遇到的时候都是重新网上搜索
不知道帮顶。这个几个芯片有手册么
有没有模拟U盘的例子
目前没有,有空再移植分享下。mass storage 好像就几个命令。然后read10 write10对接好底层的存储设备就好了
是usb主机驱动吗?
这个是usb设备的驱动
这种专用芯片好像都很便宜
微凉VeiLiang 说:我移植了一个对接上rtthread,支持u盘和键盘
有没有办法从您那里获取源代码?
目前不便分享 lol
微凉VeiLiang 说:我移植了一个对接上rtthread,支持u盘和键盘
大神 求例程
目前不便分享,可以问下晕哥 lol
我移植了一个对接上rtthread,支持u盘和键盘
楼主好像是威建的?
关注SSD222
就这个风格来说我觉得楼上两个应该是同一个人
好东西,支持
好像开了网络就是这德性,无解
微凉VeiLiang 说:是不是v3s linux驱动的问题?之前看论坛帖子好像有相关反馈
驱动那个帖子我看了,好像不管用。我看您也搞过nes移植,您那个是否有声音延迟问题呢?
恩,我移植的Infones没有发现有声音延迟的问题。就是声音上有些难听,还有就是像热血格斗的打斗的声音没有,跳跃的声音很怪
666,支持,速度可以优化下
有没有兴趣帮在我们新芯片上移植个NES,我们会提供开发板和资料
应该没有问题,什么芯片呢
是不是v3s linux驱动的问题?之前看论坛帖子好像有相关反馈
你好,我想请教个问题,我移植了infones到v3s,出现声音滞后画面大约5s的问题,请问该如何解决呢?这个问题困扰了我很久。。
V3s声音是不是linux驱动的问题,延迟应该和infones没有关系吧。不过infones的声音效果不好
厉害,前排支持分享
厉害,是个好东西
defe裸机调通过可以跑
金属表面打标这个不简单。不过预算都过万了,应该问题不大吧,不了解帮顶
F1C500S应该是兼容的吧,如果是这个封装还没有dram,那哪来的引脚外接sdram ==
感谢分享,如果还有得卖不错,可以跑Android
f1c100s裸机我移植了一个解码mp3的,核心汇编的,效果还可以
能输出 1920*1080@15hz吗?
没有问题
听大家这么一说,想问下,像nxp的yocto这种是什么,感觉像是buildroot
感谢分享,学习下
也可以参考我这个贴子 https://whycan.com/t_5913.html 的说明,修改InfoNES中调色板的数组NesPalette,改成RGB888的
大佬,我在你的菠萝派基础上制作了板子,现在发现运行一会儿就出现死机情况,而且pmic部分碰一下也会造成花屏死机问题,请问有什么经验指示吗
用的是之前的V1 V2版本么。5V处要加电容,不知道是不是这个原因,你可以加一个试下
修改了两个地方可以编译了,
第一、rtconfig.py文件中的第32行
PREFIX = 'arm-eabi-' 修改为 PREFIX = 'arm-none-eabi-'第二、libc_errno.h文件中的第32行
#include <asm-generic/errno.h> 修改为 #include <errno.h>编译成功
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf rtthread.bin
arm-none-eabi-size rtthread.elf
text data bss dec hex filename
1717783 56628 6469356 8243767 7dca37 rtthread.elf
tools/mksunxi.exe rtthread.bin
bootloader size= 2200
The bootloader head has been fixed
scons: done building targets.
感谢分享 arm-none-eabi编译器的编译经验
工程是带sd卡读写的,有sd卡的话会挂载文件系统到/mmc目录,命令行下测试就好
为啥编译不过呢
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build\applications\Apps\demo.o
Error in calling:
arm-eabi-gcc -o "build\applications\Apps\demo.o" -c -mcpu=arm926ej-s -ffunction-sections -fdata-sections -Wall -O2 -DHAVE_CCONFIG_H -DRT_USING_NEWLIB -I. -Iapplications -Iapplications\Apps -Ibootloader -Idrivers -Ilibcpu -Ipackage -Ipackage\infones -Ipackage\jpgdec -Ipackage\lvgl -Ipackage\lvgl\porting -Ipackage\lvgl\src -Ipackage\lvgl\src\lv_core -Ipackage\lvgl\src\lv_draw -Ipackage\lvgl\src\lv_font -Ipackage\lvgl\src\lv_hal -Ipackage\lvgl\src\lv_misc -Ipackage\lvgl\src\lv_objx -Ipackage\lvgl\src\lv_themes -Ipackage\vnes -ID:\RTT\BoloRTT-master\include -ID:\RTT\BoloRTT-master\components\dfs\include -ID:\RTT\BoloRTT-master\components\dfs\filesystems\devfs -ID:\RTT\BoloRTT-master\components\dfs\filesystems\elmfat -ID:\RTT\BoloRTT-master\components\dfs\filesystems\romfs -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi\sfud\inc -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\class -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\core -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\finsh -ID:\RTT\BoloRTT-master\components\libc\compilers\newlib -ID:\RTT\BoloRTT-master\components\libc\pthreads -ID:\RTT\BoloRTT-master\components\libc\time "applications\Apps\demo.c"
Exception: [Error 2] : No such file or directory
scons: *** [build\applications\Apps\demo.o] Error 2
scons: building terminated because of errors.
是在bsp/f1c目录下运行scons么
RGB565的配置用了RGB888的数据?
看这个意思是spi等数字接口可以任意配置在一组脚上输出?能否配置多组外设,比如说我只用串口,我全部io都拿来做串口
没有看懂,别的芯片要传视频给v3s?V3s的mipi csi 驱动摄像头是ok的
面向的应用应该不大一样
感谢分享,给力,这个版本还是非常流畅的
如果只想下载模拟器代码,可以本站链接下来 vnes.rar
关于文件夹命名,原版文件夹就是叫做NES的,加了个v区分下其它移植的模拟器,所以命名就变成vnes了,谅解
本模拟器在项目的目录路径:BoloRTT/bsp/f1c/package/vnes/
接上篇:F1C100S玩游戏系列-FC红白机Nes模拟器(一)-移植InfoNes到BoloRTT工程,带Audio驱动,支持声音
先上工程源码链接
https://github.com/VeiLiang/BoloRTT
关于本次移植的模拟器
这个模拟器最早应该是正点原子网友ye781205看到PocketNester,然后想着跑到stm32f1上,把cpu模拟代码改写成汇编,然后跑起来,还带声音模拟,声音比InfoNes好很多。最后正点原子也完善了对应的mapper,使其可以运行更多的游戏。感谢原子哥,感谢ye781205大佬,使得stm32f1也能运行nes模拟,而且速度非常流畅
移植需要注意的地方
汇编部分:
原工程用的编译器是mdk的armcc,所以汇编的格式是armcc格式的汇编。我们移植过来的时候不能直接编译,需要经过较多需要修改的地方:
1.宏定义 MACRO MEND需要修改成.macro .endm
举例
MACRO
fetch $count ;//提取操作码 ;$标号 宏名 $参数1,$参数2,...
;//---------------------------------------------------------------------
ldr r0,clocksh ;//处理apu需要的时钟数
add r0,r0,#$count
str r0,clocksh
ldr r1,opz ;//获取代码跳转表地址
;//-------------------------------------------------------------------------
subs cycles,cycles,#$count*256;//CYCLE=256 ;// 3*256 正数或0就执行下2条指令
ldrplb r0,[m6502_pc],#1 ; //从存储器中加载字节到一个寄存器中 r0=操作码
; ldrpl pc,[m6502_optbl,r0,lsl#2] ;//r10 ********r0=r0x4***运行代码的地址**************************************
ldrpl pc,[r1,r0,lsl#2]
ldr pc,nexttimeout
MEND
需要修改成
.macro fetch count
//提取操作码 //$标号 宏名 $参数1,$参数2,...
//---------------------------------------------------------------------
ldr r0,clocksh //处理apu需要的时钟数
add r0,r0,#\count
str r0,clocksh
ldr r1,opz //获取代码跳转表地址
//-------------------------------------------------------------------------
subs cycles,cycles,#\count*256 //CYCLE=256 //// 3*256 正数或0就执行下2条指令
ldrplb r0,[m6502_pc],#1 //从存储器中加载字节到一个寄存器中 r0=操作码
// ldrpl pc,[m6502_optbl,r0,lsl#2] //r10 ********r0=r0x4***运行代码的地址**************************************
ldrpl pc,[r1,r0,lsl#2]
ldr pc,nexttimeout
.endm
2.EQU 需要改成.equ
举例
C EQU 0x01 ;//6502 flags 6502标志
Z EQU 0x02
I EQU 0x04
D EQU 0x08
B EQU 0x10 ;//(allways 1 except when IRQ pushes it)IRQ外部中断
R EQU 0x20 ;//(locked at 1)
V EQU 0x40
N EQU 0x80
改成
.equ C , 0x01 //6502 flags 6502标志
.equ Z , 0x02
.equ I , 0x04
.equ D , 0x08
.equ B , 0x10 //(allways 1 except when IRQ pushes it)IRQ外部中断
.equ R , 0x20
.equ V , 0x40 //(locked at 1)
.equ N , 0x80
3.SETA需要改成.equ
对于SETA 可以认为是编译时候要用到的宏变量,一样可以用.equ代替.通常是用于宏搭配着用
_type SETA _ABS
可以改成
.equ _type , _ABS
4.PROC 需要改成%function
例子
cpu6502_init PROC
;----------------------------------------------------------------------------
stmfd sp!,{r4-r11,lr}
ldr r10,=cpu_data ;读取地址
ldr r11,=NES_RAM ;r11=cpu_zpage
改成
.text
.global cpu6502_init
.type cpu6502_init, %function
.align 8
cpu6502_init:
//----------------------------------------------------------------------------
stmfd sp!,{r4-r11,lr}
ldr r10,=cpu_data //读取地址
ldr r11,=NES_RAM //r11=cpu_zpage
ldr r11,[r11] //NES_RAM用了指针
5. AREA rom_code, CODE, READONLY 改成 .text
AREA wram_globals0, DATA, READWRITE 需要改成 .data
6. RN需要改成.req
globalptr RN r10
globalptr .req r10
7.Map需要用对应的#define来解决。值得注意是有的指令可能不行,例如adr,需要改掉指令来实现对应的功能
对于汇编Map关键字的定义,可以想象成是结构体,然后访问成员的时候,对应就能够基于基地址偏移。这些是编译器提供的功能
8.DCD修改成.long
9.IMPORT修改成.extern
10.汇编中mov 的操作数有的在ARM9下不支持,需要分拆成两部分
11.原来的汇编是跑在stm32上的,是cortex-m架构,只支持thumb2不支持ARM指令,f1c100s是ARM9两种都支持,但是通常编译选项会关闭thumb指令或者说start.s没有允许thumb指令,所以源代码中的调用防止进入arm状态的地址偏移,可以去掉。
ldmfd sp!,{r3,lr}
//orr lr,#0x01 //lr最低位置1防止进入arm状态 //F1C100s 本来就是arm状态,需要注释掉这个指令 --By VeiLiang
12.注释不一样,ARMCC汇编格式注释符号为分号; GNU汇编格式为//或者@
C语言部分
对于在汇编中用到的变量,务必需要4字节或者8字节对齐,gcc利用 __attribute__ ((aligned (4)))。
如下
u8 PADdata0 __attribute__ ((aligned (8))); //手柄1键值 [7:0]右7 左6 下5 上4 Start3 Select2 B1 A0
u8 PADdata1 __attribute__ ((aligned (8))); //手柄2键值 [7:0]右7 左6 下5 上4 Start3 Select2 B1 A0
u8 *NES_RAM __attribute__ ((aligned (8))); //保持1024字节对齐
u8 *NES_SRAM __attribute__ ((aligned (8)));
u8* spr_ram __attribute__ ((aligned (8))); //精灵RAM,256字节
按键部分因为目前暂时没有按键,也是没有用上。按键读取函数为
//读取游戏手柄数据
void nes_get_gamepadval(void)
{
// u8 *pt;
// while((usbx.bDeviceState&0XC0)==0X40)//USB设备插入了,但是还没连接成功,猛查询.
// {
// usbapp_pulling(); //轮询处理USB事务
// }
// usbapp_pulling(); //轮询处理USB事务
// if(usbx.hdevclass==4) //USB游戏手柄
// {
// PADdata0=fcpad.ctrlval;
// PADdata1=0;
// }else if(usbx.hdevclass==3)//USB键盘模拟手柄
// {
// KEYBRD_FCPAD_Decode(pt,0);
// PADdata0=fcpad.ctrlval;
// PADdata1=fcpad1.ctrlval;
// }
}
演示
----------------------------------------------------------
----------------------------------------------------------
总结
总的移植下来,感觉学习到东西也蛮多。ARM转GNU汇编需要注意到的东西也比较多,稍有不慎就会data abort .不过出来的效果是真心不错,我还修改了对应的mapper,还有模拟的代码。让模拟器可以支持热血系列还有冒险岛系列运行。声音非常赞,我也移植了VirtualNes,对比发现本模拟器的声音可以和VirtualNes媲美,而且核心用的是汇编,跑在f1c100s上真的是丝滑,赞
致谢
感谢原子哥,感谢ye781205大佬,感谢晕哥,感谢rtthread团队
惯例
如果喜欢本项目https://github.com/VeiLiang/BoloRTT欢迎start fork 测试提交issue
如果觉得本项目对你有用解决了你的问题,欢迎点击我的个人网站用爱发电
以下由 @哇酷小管家 2021-06-03 加入
-----------------------------------------
不方便上github的朋友也可以通过本站下载: BoloRTT_git_full.7z
感觉可以,就是声音如果是带dac会好很多
还有这回事,ddr3为什么会慢过ddr2
学习了。特别喜欢mit,哈哈
不知道楼主驱动8080屏成功了没,感谢分享
直接读 寄存器 ,基地址 0x01c23800
我说的是唯一id读这个位置的寄存器。好像是有个96位还是128位。
直接读 寄存器 ,基地址 0x01c23800
围观,rt-smart 第三方框架如果支持得好的话就给力,例如SDL
Nice,感谢分享经验
没有玩过,只玩过菠萝派 bolopi 哈哈
好东西,顶起来
不大了解,难道是cbt6?
热血系列小时候很爱玩啊,游戏机制很不错(打的好小BOSS会投降认输),打到最后是两只老虎。
是的,还有冒险岛,洛克人,嘿嘿
现在都这么贵了么。那没法玩了
还有就是说一下显示相关的,一般模拟器计算出来显示的是调色板的索引。一共常规来说就是64色的调色板
然后我们跑的时候通常会有的屏幕是RGB565,有的屏幕RGB888.我们就可以自己修改调色板的内容进行适配。
在InfoNES中,调试板的数组是NesPalette。目前BoloRTT里用的是RGB888的
先上工程源码链接
https://github.com/VeiLiang/BoloRTT
-------
关于InfoNES
InfoNES是一个比较早的nes模拟器了,优点是支持的mapper比较多,代码十分方便移植,虽然原版代码是cpp,但是完全没有用到任何的c++的特性,直接把后缀名字改成c就可以正常编译了。缺点就是声音效果比较差,几乎就是听个响,然后很多音效都没有了,例如热血格斗的打斗声,跳起来的声音也非常怪;还有个缺点就是虽然支持的mapper多,但是有些游戏还是会出现不能运行或者画面错乱的情况。不过瑕不掩瑜,因为移植起来真的非常简单,所以在各个平台都会有InfoNES的移植教程,致敬
移植
直接把infoNES的相关文件改成.c后缀就好。然后实现几个接口函数
显示画面函数 void InfoNES_LoadFrame()
读取按键键值 void InfoNES_PadState( DWORD *pdwPad1, DWORD *pdwPad2, DWORD *pdwSystem )
memcpy void *InfoNES_MemoryCopy( void *dest, const void *src, int count )
memset void *InfoNES_MemorySet( void *dest, int c, int count )
调试打印错误信息 void InfoNES_DebugPrint( char *pszMsg )
声音初始化 int InfoNES_SoundOpen( int samples_per_sync, int sample_rate )
声音播放 5个声道 void InfoNES_SoundOutput(int samples, BYTE *wave1, BYTE *wave2, BYTE *wave3, BYTE *wave4, BYTE *wave5)
下面是BoloRTT下实现的代码,因为板子没有游戏按键,所以就没写按键代码
/* Transfer the contents of work frame on the screen */
void InfoNES_LoadFrame()
{
unsigned int x,y;
#ifdef DISP_USE_ARGB_32
unsigned int *src,*dst;
src = (unsigned int *)WorkFrame;
#else
unsigned short *src,*dst;
src = (unsigned short *)WorkFrame;
#endif
for(x=0;x<NES_DISP_HEIGHT;x++)
{
for(y=0;y<NES_DISP_WIDTH;y++)
{
FrameBuffer[x*480+y+160] = *src;
src++;
}
}
// for(x=0;x<NES_DISP_HEIGHT;x++)
// {
// dst = FrameBuffer + (NES_DISP_HEIGHT-1-x);
// for(y=0;y<NES_DISP_WIDTH;y++)
// {
// *dst = *src;
// dst += 480;
// src++;
// }
// }
}
/* Get a joypad state */
void InfoNES_PadState( DWORD *pdwPad1, DWORD *pdwPad2, DWORD *pdwSystem )
{
//add key ctrl in here...
}
/* memcpy */
void *InfoNES_MemoryCopy( void *dest, const void *src, int count )
{
return memcpy(dest,src,count);
}
/* memset */
void *InfoNES_MemorySet( void *dest, int c, int count )
{
return memset(dest,c,count);
}
/* Print debug message */
void InfoNES_DebugPrint( char *pszMsg )
{
}
/* Wait */
void InfoNES_Wait()
{
}
/* Sound Initialize */
void InfoNES_SoundInit( void )
{
}
/* Sound Open */
int InfoNES_SoundOpen( int samples_per_sync, int sample_rate )
{
f1c100s_audio_config(1,16,sample_rate);
f1c100s_audio_open(samples_per_sync*2);
return 0;
}
/* Sound Close */
void InfoNES_SoundClose( void )
{
}
WORD final_wave[367*5];
/* Sound Output 5 Waves - 2 Pulse, 1 Triangle, 1 Noise, 1 DPCM */
void InfoNES_SoundOutput(int samples, BYTE *wave1, BYTE *wave2, BYTE *wave3, BYTE *wave4, BYTE *wave5)
{
int i;
for (i = 0; i < samples; i++)
{
final_wave[i] = (wave1[i]*32 + wave2[i]*32 + wave3[i]*32 + wave4[i]*32 + wave5[i]*32);
}
audio_pcm_play(final_wave,samples*2);
}
总结
总体下来,InfoNES还是不错的,可以跑热血系列游戏,然后就是声音真的比较差,聊胜于无吧。
后面我会继续发布正点原子开发板上跑的NES模拟器,(基于大佬ye781205 编写)cpu实现是汇编语言的,我移植到了BoloRTT上,核心也是改过的可以跑在ARM9下的汇编,速度那叫一个溜,声音效果也非常完美。敬请期待
不要脸打个广告
BoloRT工程,完美跑这bolopi上 https://github.com/VeiLiang/BoloRTT
欢迎start,fork
用爱发电
感谢楼主分享,话说一玩就是买一盘芯片来玩么
32Kb也能跑蓝牙协议栈么?
没有调过主机的uvc类,帮顶
什么如何,很便宜么,便宜拿来拆屏用:)
我可以集成到DKTool吗
嘿嘿,完全可以
裸机上玩过,不大了解linux的
raspberryman 说:usb插入电脑,显示要安装驱动程序,就说明板子正常。
不需要前置固件,里面开机固化的ROM与电脑USB通讯可以完成烧写。
现在情况是连上电脑一点反应没有,
晶振起振了24MHz
ID脚是悬空的
复位C104+R103
还有什么地方要检查
能不能是供电不行? 我几路都是1117出的
检查VAR 的电阻 是不是200K
哪位大哥移植到Arm9上。
看了一下相关视频和资料,rtthread smart把一些基本的启动文件 mmu都整好作为libcpu文件夹里面了。移植起来好像更加简单化了
如果后面rtthread smart能够把一些跨平台的框架移植整合进去,感觉作为一个类似于轻量级的linux系统,用起来是非常不错的
感谢分享经验,解码的f1c好像都是mb32 title格式
微凉VeiLiang 说:田埂上的梦 说:微凉VeiLiang 佬大这么晚了还没睡又在研究啥新驱动
移植了下nes,还有声音驱动。H3 跑起来应该也是挺烫手的吧
声音驱动好裸奔不 最近也要搞
主要是dma整好,bsp linux里面有声音的驱动 sound目录里面
楼主所描述的心理活动,仿佛看透了我的内心!
同样的感觉哈哈,裸机玩多了。有有意识地避开linux
这是假货还是芯片指标不稳定呢?
可以用多个设备,外设好像支持4个片选
好东西,不过论坛好像没有在线增长积分的机制
微凉VeiLiang 说:EE 说:楼上电路图的4脚就是用来去除 pop 的吧,接一个电容到地?没有整过 PAM 家的片子,对一下 DS,class-d通常都好解决吧
嗯,加功放的应该可以这样解决,延后使能
耳机的话,不知道能不能用 NMOS并在耳机两个脚作为开关(短路),然后也用 RC 做个延时。好久前,好像听过类似的技巧性做法。具体是什么电路就没有注意了。
是个好主意,等电平衡后再去掉短路回路
另外 你这是上电就璞声还是软件初始化的时候才璞声?如果是软件初始化有璞声,看下200s 1.2版手册第157页的图,有些mixer开关可能要先设置下好平衡直流电压。
初始化后有pop声。感谢提供信息,我去调下看看