您尚未登录。

楼主 #1 2018-08-02 15:58:00

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

F1C100S裸奔framebuffer+PWM+GPIO驱动

最近把xboot的几个驱动剥离了出来,特别是framebuffer,终于可以单独使用了

#if TEST_GPIO
    gpio_f1c100s_set_dir(&GPIO_PE, 2, GPIO_DIRECTION_OUTPUT);
    while(1)
    {
        gpio_f1c100s_set_value(&GPIO_PE, 2, 0);
        gpio_f1c100s_set_value(&GPIO_PE, 2, 1);
    }
#endif

#if TEST_FB
    {
        framebuffer_t fb_f1c100s;
        fb_f1c100s_init(&fb_f1c100s);
        render_t* render = fb_f1c100s_create(&fb_f1c100s);
        for (int i = 0; i < render->pixlen/4;i++)
        {
            ((uint32_t*)render->pixels)[i] = 0xFFFF0000;
        }
        fb_f1c100s_present(&fb_f1c100s, render);
        fb_f1c100s_setbl(&fb_f1c100s, 100);
    }
#endif

#if TEST_PWM
    pwm_t led_pwm_bl =
        {
            .virt = 0x01c21000,
            .duty = 50,
            .period = 1000000,
            .channel = 1,
            .polarity = true,
            .pwm_port = &GPIO_PE,
            .pwm_pin = 6,
            .pwm_pin_cfg = 3,
        };
    pwm_f1c100s_init(&led_pwm_bl);
#endif

编译:make
烧flash:make write

20180802_004940.jpeg

源代码:
minimal_f1c100s_framebuffer.zip

离线

#2 2018-08-02 16:15:45

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

确实很精简了,感谢楼主添砖加瓦.





离线

楼主 #3 2018-08-02 18:25:54

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

要感谢xboot的原代码驱动!话说xboot是GNU license,以它的基础改的代码也应该开源。

另外xboot或者基于xboot改的代码能直接跑商业项目吗?按理得全部开源吧

离线

#4 2018-08-02 18:39:39

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

如果真是GPL,
可以单独找xboot本人单独申请一个商业授权,
xboot作者本人钱挺多,
而且很乐意帮忙解决问题。





离线

#5 2018-08-18 14:46:19

pqfeng
会员
注册时间: 2018-08-18
已发帖子: 129
积分: 129

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

真的是好东西,再问一下,这个可以在V3S上跑么,如果要改大动,大概改哪里?谢谢。

离线

#6 2018-08-18 14:48:04

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

改动不会太大, 按楼主的套路, 从V3s扣代码就好了。





离线

楼主 #7 2018-08-19 00:04:32

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

离线

#8 2018-08-19 21:59:46

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

请问楼主你的 arm-eabi-gcc 是通过什么方式装到Linux 上面的?
我用 arm-none-linux-gnueabi-

make 后出错:

arm-none-linux-gnueabi-gcc -Imachine/include -Iarch/arm32/include -Idriver/include -Ilib -march=armv5te -mtune=arm926ej-s -mfloat-abi=soft -marm -mno-thumb-interwork -g -ggdb -Wall -O3 -ffreestanding -std=gnu99 -D__ARM32_ARCH__=5 -D__ARM926EJS__ -c -MD -o build/driver/fb-f1c100s.o driver/fb-f1c100s.c
In file included from /usr/local/arm-2014.05/arm-none-linux-gnueabi/libc/usr/include/stdlib.h:42:0,
                 from driver/fb-f1c100s.c:26:
/usr/local/arm-2014.05/arm-none-linux-gnueabi/libc/usr/include/bits/waitstatus.h:71:37: error: operator '==' has no right operand
# if __BYTE_ORDER == __LITTLE_ENDIAN
                                     ^
/usr/local/arm-2014.05/arm-none-linux-gnueabi/libc/usr/include/bits/waitstatus.h:86:37: error: operator '==' has no right operand
# if __BYTE_ORDER == __LITTLE_ENDIAN
                                     ^
make: *** [build/driver/fb-f1c100s.o] Error 1

离线

#9 2018-08-19 22:03:45

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

然后换 arm-linux-gnueabihf-gcc 还是一样的错误:

arm-linux-gnueabihf-gcc -Imachine/include -Iarch/arm32/include -Idriver/include -Ilib -march=armv5te -mtune=arm926ej-s -mfloat-abi=soft -marm -mno-thumb-interwork -g -ggdb -Wall -O3 -ffreestanding -std=gnu99 -D__ARM32_ARCH__=5 -D__ARM926EJS__ -c -MD -o build/driver/fb-f1c100s.o driver/fb-f1c100s.c
In file included from /usr/arm-linux-gnueabihf/include/stdlib.h:42:0,
                 from driver/fb-f1c100s.c:26:
/usr/arm-linux-gnueabihf/include/bits/waitstatus.h:71:37: error: operator '==' has no right operand
# if __BYTE_ORDER == __LITTLE_ENDIAN
                                     ^
/usr/arm-linux-gnueabihf/include/bits/waitstatus.h:86:37: error: operator '==' has no right operand
# if __BYTE_ORDER == __LITTLE_ENDIAN
                                     ^
make: *** [build/driver/fb-f1c100s.o] Error 1

离线

楼主 #10 2018-08-19 22:15:48

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

感觉你这个编译器不对,我是用xboot指定的5.3.1版
http://pan.baidu.com/s/1dDtssIt

离线

楼主 #11 2018-08-19 22:16:57

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

arm9没有hf的

离线

#12 2018-08-19 22:21:39

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

把 driver/fb-f1c100s.c 的 include <stdlib.h> 屏蔽起来,
上面的错误没有了,

新的链接错误:

root@ubuntu:~/minimal_f1c100s# make CROSS_COMPILE=arm-linux-gnueabi-
LINK build/firmware.elf
arm-linux-gnueabi-gcc -T f1c100s.ld -nostdlib -Wl,--cref,-Map=build/firmware.elf.map -o build/firmware.elf build/main.o build/machine/sys-clock.o build/machine/sys-dram.o build/machine/sys-uart.o build/machine/sys-copyself.o build/machine/sys-spi-flash.o build/machine/sys-mmu.o build/machine/exception.o build/driver/gpio-f1c100s.o build/driver/pwm-f1c100s.o build/driver/reset-f1c100s.o build/lib/malloc.o build/lib/dma.o build/driver/clk-f1c100s-pll.o build/driver/fb-f1c100s.o build/machine/start.o build/arch/arm32/lib/memcpy.o build/arch/arm32/lib/memset.o -lgcc
build/lib/malloc.o: In function `insert_free_block':
/root/minimal_f1c100s/lib/malloc.c:387: undefined reference to `__assert_fail'
/root/minimal_f1c100s/lib/malloc.c:393: undefined reference to `__assert_fail'
build/lib/malloc.o: In function `block_split':
/root/minimal_f1c100s/lib/malloc.c:424: undefined reference to `__assert_fail'
/root/minimal_f1c100s/lib/malloc.c:428: undefined reference to `__assert_fail'
/root/minimal_f1c100s/lib/malloc.c:426: undefined reference to `__assert_fail'
build/lib/malloc.o:/root/minimal_f1c100s/lib/malloc.c:461: more undefined references to `__assert_fail' follow
/usr/lib/gcc-cross/arm-linux-gnueabi/5/libgcc.a(_dvmd_lnx.o): In function `__aeabi_ldiv0':
(.text+0x8): undefined reference to `raise'
collect2: error: ld returned 1 exit status
Makefile:78: recipe for target 'build/firmware.elf' failed
make: *** [build/firmware.elf] Error 1

离线

#13 2018-08-19 22:24:26

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

感觉你这个编译器不对,我是用xboot指定的5.3.1版
http://pan.baidu.com/s/1dDtssIt

我试一试这个.

离线

#14 2018-08-19 22:35:33

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

离线

#15 2018-08-19 22:47:19

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

果然顺利编译完成.

但是烧进去之后,屏幕串口都没有反应,
而且再次进入 fel 模式,
说明应该是有问题的。



烧这个demo也一样:
https://whycan.cn/t_1393.html

最近编辑记录 awfans (2018-08-19 22:50:02)

离线

楼主 #16 2018-08-19 22:54:06

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

mksunxi tool编了吗?
最后几行应该会显示brom been fixed字样,Bootloader size=xxxx

离线

#17 2018-08-19 23:03:59

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

估计就是这个问题了。





离线

#18 2018-08-19 23:17:33

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

终于搞定,谢谢达哥, 红红的LCD亮起来了.

离线

楼主 #19 2018-08-19 23:27:17

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

awfans 说:

终于搞定,谢谢达哥, 红红的LCD亮起来了.

问下你屏幕有条白线吗?我的有条白线,不知道是代码还有问题还是屏幕硬件有问题了

离线

#20 2018-08-19 23:34:57

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

我的是800x480的5寸屏,上面红红的,下面有一条灰色的,关电脑了,明天仔细看看。

离线

#21 2018-08-21 09:29:28

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

QQ20180821092612.jpg

就是这样的,看起来也挺正常, 800x480

离线

楼主 #22 2018-08-21 11:45:04

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

awfans 说:

https://whycan.cn/files/members/713/QQ20180821092612.jpg

就是这样的,看起来也挺正常, 800x480

下面怎么显示蓝色的?

离线

#23 2018-08-23 17:35:01

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

是呀,我也觉得好奇怪,屏幕是好的。

离线

#24 2018-08-23 17:35:37

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

QQ20180823173248.png

路过, 刚好在调 f1c100s

看了一下代码

估计是楼主手抖了. 

big_smile:D:D





离线

楼主 #25 2018-08-23 17:57:16

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥 说:

https://whycan.cn/files/members/3/QQ20180823173248.png

路过, 刚好在调 f1c100s

看了一下代码

估计是楼主手抖了. 

big_smile:D:D

:mad哈哈哈,多亏晕哥发现,太惭愧了,每次只要手填一堆数,总要出错。

离线

#26 2018-08-23 18:06:33

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

这个代码太好了,终于在 MDK 裸奔起来了.





离线

#27 2018-08-27 17:10:24

ippen
会员
注册时间: 2018-07-22
已发帖子: 345
积分: 339.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

xboot支持哪些文件系统?
看到有fatfs,其他几个不太了解,能不能支持ext2之类的呢

离线

#28 2018-08-27 17:22:25

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

不支持 ext2,自己移植才行吧

离线

#29 2018-08-31 10:13:01

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

arm-none-linux-gnueabi-gcc -Imachine/include -Iarch/arm32/include -Idriver/include -Ilib -march=armv5te -mtune=arm926ej-s -mfloat-abi=soft -marm -mno-thumb-interwork -g -ggdb -Wall -O3 -ffreestanding -std=gnu99 -D__ARM32_ARCH__=5 -D__ARM926EJS__ -c -MD -o build/driver/fb-f1c100s.o driver/fb-f1c100s.c
In file included from c:\baiduyundownload\arm-2014.05\arm-none-linux-gnueabi\libc\usr\include\stdlib.h:42:0,
                 from driver/fb-f1c100s.c:26:
c:\baiduyundownload\arm-2014.05\arm-none-linux-gnueabi\libc\usr\include\bits\waitstatus.h:71:37: error: operator '==' has no right operand
# if __BYTE_ORDER == __LITTLE_ENDIAN
                                     ^
c:\baiduyundownload\arm-2014.05\arm-none-linux-gnueabi\libc\usr\include\bits\waitstatus.h:86:37: error: operator '==' has no right operand
# if __BYTE_ORDER == __LITTLE_ENDIAN
                                     ^
make: *** [Makefile:104:build/driver/fb-f1c100s.o] 错误 1

这问题找到了,

$ arm-none-linux-gnueabi-gcc -E -dM - < /dev/null |grep ENDIAN
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
#define __ORDER_PDP_ENDIAN__ 3412
#define __ORDER_BIG_ENDIAN__ 4321
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__

修改文件 waitstatus.h

__LITTLE_ENDIAN
__BIG_ENDIAN

改为:

__ORDER_LITTLE_ENDIAN__
__ORDER_BIG_ENDIAN__





离线

#30 2018-08-31 10:40:14

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

LINK build/firmware.elf
arm-none-linux-gnueabi-gcc -T f1c100s.ld -nostdlib -Wl,--cref,-Map=build/firmware.elf.map -o build/firmware.elf build/main.o build/machine/sys-clock.o build/machine/sys-dram.o build/machine/sys-uart.o build/machine/sys-copyself.o build/machine/sys-spi-flash.o build/machine/sys-mmu.o build/machine/exception.o build/driver/gpio-f1c100s.o build/driver/pwm-f1c100s.o build/driver/reset-f1c100s.o build/lib/malloc.o build/lib/dma.o build/driver/clk-f1c100s-pll.o build/driver/fb-f1c100s.o build/machine/start.o build/arch/arm32/lib/memcpy.o build/arch/arm32/lib/memset.o -lgcc -LD:\\Downloads\\arm-2014.05\\arm-none-linux-gnueabi\\libc\\armv4t\\usr\\lib\\ -lc
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3\libgcc.a(bpabi.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3\libgcc.a(_divdi3.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3\libgcc.a(_udivdi3.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld.exe: error: required section '.rel.plt' not found in the linker script
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:79:build/firmware.elf] 错误 1

解决方案:

LIBS         := -lgcc -LD:\\Downloads\\arm-2014.05\\arm-none-linux-gnueabi\\libc\\armv4t\\usr\\lib\\ -lc

https://stackoverflow.com/questions/18165527/linker-unable-to-find-assert-fail





离线

#31 2018-08-31 10:42:44

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

LINK build/firmware.elf
arm-none-linux-gnueabi-gcc -T f1c100s.ld -nostdlib -Wl,--cref,-Map=build/firmware.elf.map -o build/firmware.elf build/main.o build/machine/sys-clock.o build/machine/sys-dram.o build/machine/sys-uart.o build/machine/sys-copyself.o build/machine/sys-spi-flash.o build/machine/sys-mmu.o build/machine/exception.o build/driver/gpio-f1c100s.o build/driver/pwm-f1c100s.o build/driver/reset-f1c100s.o build/lib/malloc.o build/lib/dma.o build/driver/clk-f1c100s-pll.o build/driver/fb-f1c100s.o build/machine/start.o build/arch/arm32/lib/memcpy.o build/arch/arm32/lib/memset.o -lgcc -LD:\\Downloads\\arm-2014.05\\arm-none-linux-gnueabi\\libc\\armv4t\\usr\\lib\\ -lc
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3\libgcc.a(bpabi.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3\libgcc.a(_divdi3.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3\libgcc.a(_udivdi3.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld.exe: error: required section '.rel.plt' not found in the linker script
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:79:build/firmware.elf] 错误 1

解决方案:

添加一个空函数:

/* Dummy function to avoid linker complaints */
void __aeabi_unwind_cpp_pr0(void)
{

};

https://blog.csdn.net/dddxxxx/article/details/47819809





离线

#32 2018-08-31 10:54:15

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

$ make CROSS_COMPILE=arm-none-linux-gnueabi-
LINK build/firmware.elf
arm-none-linux-gnueabi-gcc -T f1c100s.ld -nostdlib -Wl,--cref,-Map=build/firmware.elf.map -o build/firmware.elf build/main.o build/machine/sys-clock.o build/machine/sys-dram.o build/machine/sys-uart.o build/machine/sys-copyself.o build/machine/sys-spi-flash.o build/machine/sys-mmu.o build/machine/exception.o build/driver/gpio-f1c100s.o build/driver/pwm-f1c100s.o build/driver/reset-f1c100s.o build/lib/malloc.o build/lib/dma.o build/driver/clk-f1c100s-pll.o build/driver/fb-f1c100s.o build/machine/start.o build/arch/arm32/lib/memcpy.o build/arch/arm32/lib/memset.o -lgcc -LD:\\Downloads\\arm-2014.05\\arm-none-linux-gnueabi\\libc\\armv4t\\usr\\lib\\ -lc
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld.exe: error: required section '.rel.plt' not found in the linker script
d:/downloads/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:79:build/firmware.elf] 错误 1

最后一个链接错误,不知道怎么改了  sad
看来还是用 xboot 提供的 toolchain 比较顺利

arm-eabi-gcc -x assembler-with-cpp -march=armv5te -mtune=arm926ej-s -mfloat-abi=soft -marm -mno-thumb-interwork -g -ggdb -Wall -O3 -ffreestanding -std=gnu99 -D__ARM32_ARCH__=5 -D__ARM926EJS__ -c -o build/arch/arm32/lib/memset.o arch/arm32/lib/memset.S
LINK build/firmware.elf
arm-eabi-gcc -T f1c100s.ld -nostdlib -Wl,--cref,-Map=build/firmware.elf.map -o build/firmware.elf build/main.o build/machine/sys-clock.o build/machine/sys-dram.o build/machine/sys-uart.o build/machine/sys-copyself.o build/machine/sys-spi-flash.o build/machine/sys-mmu.o build/machine/exception.o build/driver/gpio-f1c100s.o build/driver/pwm-f1c100s.o build/driver/reset-f1c100s.o build/lib/malloc.o build/lib/dma.o build/driver/clk-f1c100s-pll.o build/driver/fb-f1c100s.o build/machine/start.o build/arch/arm32/lib/memcpy.o build/arch/arm32/lib/memset.o -lgcc
arm-eabi-size build/firmware.elf
   text    data     bss     dec     hex filename
  28076      92  524424  552592   86e90 build/firmware.elf
arm-eabi-objcopy -v -O binary build/firmware.elf build/firmware.bin
copy from `build/firmware.elf' [elf32-littlearm] to `build/firmware.bin' [binary]





离线

楼主 #33 2018-08-31 12:19:11

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

编译器差别这么大呀。。。
我都想用llvm了,公司用的就是llvm

离线

#34 2018-08-31 13:22:12

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

越是搞不明白的事情,越是想弄清楚,结果走进死胡同了。





离线

#35 2018-09-22 08:32:11

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

感谢LZ分享:D

离线

#36 2018-09-29 16:14:56

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

牛,framebuffer好了,图片能支持PNG吗?bmp太占空间了。

离线

#37 2018-09-29 16:18:38

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Gardenia 说:

牛,framebuffer好了,图片能支持PNG吗?bmp太占空间了。

移植一个 libpng 就支持 png图片了。

xboot本身就集成了 libpng.





离线

#38 2018-09-29 16:49:36

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥 说:
Gardenia 说:

牛,framebuffer好了,图片能支持PNG吗?bmp太占空间了。

移植一个 libpng 就支持 png图片了。

xboot本身就集成了 libpng.

嗯,看到了,xboot启动时间比较慢,如果要做到1秒以内启动,晕哥有没试过?有可行性不?

离线

#39 2018-09-29 17:17:46

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Gardenia 说:
晕哥 说:
Gardenia 说:

牛,framebuffer好了,图片能支持PNG吗?bmp太占空间了。

移植一个 libpng 就支持 png图片了。

xboot本身就集成了 libpng.

嗯,看到了,xboot启动时间比较慢,如果要做到1秒以内启动,晕哥有没试过?有可行性不?

主要耗时在于spl(boot0)从spi 拷贝 xboot(boot1) 到DRAM,
想办法精简 xboot, 或者分时加载 xboot, 比如再弄个boot2, 系统boot1启动后再加载boot2.





离线

#40 2018-09-29 17:41:47

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥 说:
Gardenia 说:
晕哥 说:

移植一个 libpng 就支持 png图片了。

xboot本身就集成了 libpng.

嗯,看到了,xboot启动时间比较慢,如果要做到1秒以内启动,晕哥有没试过?有可行性不?

主要耗时在于spl(boot0)从spi 拷贝 xboot(boot1) 到DRAM,
想办法精简 xboot, 或者分时加载 xboot, 比如再弄个boot2, 系统boot1启动后再加载boot2.

好的,谢谢,我试试看。

离线

楼主 #41 2018-09-30 20:52:14

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Gardenia 说:
晕哥 说:
Gardenia 说:

嗯,看到了,xboot启动时间比较慢,如果要做到1秒以内启动,晕哥有没试过?有可行性不?

主要耗时在于spl(boot0)从spi 拷贝 xboot(boot1) 到DRAM,
想办法精简 xboot, 或者分时加载 xboot, 比如再弄个boot2, 系统boot1启动后再加载boot2.

好的,谢谢,我试试看。

我做到800ms,主要是把romdisk裁剪了一点,把log关掉,不用的函数关掉,autoboot的一秒等待关掉,基本就差不多了。不要用压缩

离线

#42 2018-10-01 09:23:03

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

:lol:现在才看到,原来你已搞定,能分享下代码吗?我信息里面有我邮箱
我也想试试能不能启动之后能不能先初始化spi,提高下spi访问速度,之后spi拷贝速度会高点,没有qspi确实硬伤啊

最近编辑记录 Gardenia (2018-10-01 09:24:35)

离线

#43 2018-10-01 09:25:43

路人甲
会员
注册时间: 2017-09-07
已发帖子: 202
积分: 199.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Gardenia 说:
达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

:lol:现在才看到,原来你已搞定,能分享下代码吗?我信息里面有我邮箱
我也想试试能不能启动之后能不能先初始化spi,提高下spi访问速度,之后spi拷贝速度会高点,没有qspi确实硬伤啊

没有quad spi,但是貌似有dual spi吧。

离线

#44 2018-10-01 09:48:05

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

路人甲 说:
Gardenia 说:
达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

:lol:现在才看到,原来你已搞定,能分享下代码吗?我信息里面有我邮箱
我也想试试能不能启动之后能不能先初始化spi,提高下spi访问速度,之后spi拷贝速度会高点,没有qspi确实硬伤啊

没有quad spi,但是貌似有dual spi吧。

特地看了下手册,应该是不支持的

离线

#45 2018-10-01 09:59:26

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Allwinner_F1C600_User_Manual_V1.0.pdf

293页:

DRM
Master Dual Mode RX Enable
0: RX use single-bit mode
1: RX use dual mode
Note:Can’t be written when XCH=1.





离线

#46 2018-10-01 10:28:14

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥 说:

Allwinner_F1C600_User_Manual_V1.0.pdf

293页:

DRM
Master Dual Mode RX Enable
0: RX use single-bit mode
1: RX use dual mode
Note:Can’t be written when XCH=1.

lol,又有新的希望了。

离线

楼主 #47 2018-10-01 11:57:31

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Gardenia 说:
达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

:lol:现在才看到,原来你已搞定,能分享下代码吗?我信息里面有我邮箱
我也想试试能不能启动之后能不能先初始化spi,提高下spi访问速度,之后spi拷贝速度会高点,没有qspi确实硬伤啊

在老家,只能回去之后整理给你。
我试过把spi速度提高到100mhz,还有优化底层读fifo的代码,提升非常有限
800ms其中有400ms是全志内部boot代码读spl和启动的时间,这时候spi速度只有3mhz,这还没法改,没办法这是全志写死了。所以优化空间也不多了

离线

#48 2018-10-01 13:34:32

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
Gardenia 说:
达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

:lol:现在才看到,原来你已搞定,能分享下代码吗?我信息里面有我邮箱
我也想试试能不能启动之后能不能先初始化spi,提高下spi访问速度,之后spi拷贝速度会高点,没有qspi确实硬伤啊

在老家,只能回去之后整理给你。
我试过把spi速度提高到100mhz,还有优化底层读fifo的代码,提升非常有限
800ms其中有400ms是全志内部boot代码读spl和启动的时间,这时候spi速度只有3mhz,这还没法改,没办法这是全志写死了。所以优化空间也不多了

好的,非常感谢,那节后再说,图形库都带了850ms已经非常好了

离线

#49 2018-10-04 02:19:28

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

我这里不带文件系统和图形库,只保留要用的功能和驱动,xboot可优化到240kB。很实用了。

对于很多应用,数据文件应该占ROM空间很大一部分。xboot把数据文件打包放在romdisk里,也会占用启动拷贝Flash的时间。这部分是可以优化成在启动之后做的。

离线

#50 2018-10-04 08:58:45

daydayup
会员
注册时间: 2017-10-09
已发帖子: 343
积分: 343

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Quotation 说:
达克罗德 说:

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

我这里不带文件系统和图形库,只保留要用的功能和驱动,xboot可优化到240kB。很实用了。

对于很多应用,数据文件应该占ROM空间很大一部分。xboot把数据文件打包放在romdisk里,也会占用启动拷贝Flash的时间。这部分是可以优化成在启动之后做的。

厉害厉害,能不能分享一下?

离线

#51 2018-10-04 22:59:12

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

daydayup 说:

厉害厉害,能不能分享一下?

开新帖分享了裁剪方法,把XBOOT优化到<170kB了。https://whycan.cn/t_1708.html

离线

#52 2018-10-09 10:54:41

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
Gardenia 说:
达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

:lol:现在才看到,原来你已搞定,能分享下代码吗?我信息里面有我邮箱
我也想试试能不能启动之后能不能先初始化spi,提高下spi访问速度,之后spi拷贝速度会高点,没有qspi确实硬伤啊

在老家,只能回去之后整理给你。
我试过把spi速度提高到100mhz,还有优化底层读fifo的代码,提升非常有限
800ms其中有400ms是全志内部boot代码读spl和启动的时间,这时候spi速度只有3mhz,这还没法改,没办法这是全志写死了。所以优化空间也不多了

楼主休完假了吧?我这边也是需要图形的,方便发我邮箱吗?4201842@qq.com

离线

楼主 #53 2018-10-10 11:02:52

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Gardenia 说:

楼主休完假了吧?我这边也是需要图形的,方便发我邮箱吗?4201842@qq.com

我试了一下发现我的改动太分散,而且xboot和我另外一个框架绑在一起,不好给你,我还是给你说下几个改动吧
1. skip compress [sys-copyself.c]

+#if CONFIG_LZ_COMPRESS
         sys_spi_flash_init();
         sys_spi_flash_read(16384, &z, sizeof(struct zdesc_t));
         sys_spi_flash_exit();
...
         sys_decompress(tmp, ssize, mem, dsize);
         }
         else
+#endif

2. Disable logs [arch/arm32/mach-f1c100s/include/configs.h]

+#define CONFIG_NO_LOG                        (1)

3. 优化了SPI读写

/*
 * sys-spi-flash.c
 *
 * Copyright(c) 2007-2018 Jianjun Jiang <8192542@qq.com>
 * Official site: http://xboot.org
 * Mobile phone: +86-18665388956
 * QQ: 8192542
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#include <xboot.h>

enum {
	SPI_GCR	= 0x04,
	SPI_TCR	= 0x08,
	SPI_IER	= 0x10,
	SPI_ISR	= 0x14,
	SPI_FCR	= 0x18,
	SPI_FSR	= 0x1c,
	SPI_WCR	= 0x20,
	SPI_CCR	= 0x24,
	SPI_MBC	= 0x30,
	SPI_MTC	= 0x34,
	SPI_BCC	= 0x38,
	SPI_TXD	= 0x200,
	SPI_RXD	= 0x300,
};

void sys_spi_flash_init(void)
{
	virtual_addr_t addr;
	u32_t val;

	/* Config GPIOC0, GPIOC1, GPIOC2 and GPIOC3 */
	addr = 0x01c20848 + 0x00;
	val = read32(addr);
	val &= ~(0xf << ((0 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((0 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((1 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((1 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((2 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((2 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((3 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((3 & 0x7) << 2));
	write32(addr, val);

	/* Deassert spi0 reset */
	addr = 0x01c202c0;
	val = read32(addr);
	val |= (1 << 20);
	write32(addr, val);

	/* Open the spi0 bus gate */
	addr = 0x01c20000 + 0x60;
	val = read32(addr);
	val |= (1 << 20);
	write32(addr, val);

	/* Set spi clock rate control register, divided by 4 */
	addr = 0x01c05000;
	write32(addr + SPI_CCR, 0x00001000);

	/* Enable spi0 and do a soft reset */
	addr = 0x01c05000;
	val = read32(addr + SPI_GCR);
	val |= (1 << 31) | (1 << 7) | (1 << 1) | (1 << 0);
	write32(addr + SPI_GCR, val);
	while(read32(addr + SPI_GCR) & (1 << 31));

	val = read32(addr + SPI_TCR);
	val &= ~(0x3 << 0);
	val |= (1 << 6) | (1 << 2);
	write32(addr + SPI_TCR, val);

	val = read32(addr + SPI_FCR);
	val |= (1 << 31) | (1 << 15);
	write32(addr + SPI_FCR, val);
}

void sys_spi_flash_exit(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	/* Disable the spi0 controller */
	val = read32(addr + SPI_GCR);
	val &= ~((1 << 1) | (1 << 0));
	write32(addr + SPI_GCR, val);
}

static void sys_spi_select(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	val = read32(addr + SPI_TCR);
	val &= ~((0x3 << 4) | (0x1 << 7));
	val |= ((0 & 0x3) << 4) | (0x0 << 7);
	write32(addr + SPI_TCR, val);
}

static void sys_spi_deselect(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	val = read32(addr + SPI_TCR);
	val &= ~((0x3 << 4) | (0x1 << 7));
	val |= ((0 & 0x3) << 4) | (0x1 << 7);
	write32(addr + SPI_TCR, val);
}
#define SPI0_BASE	(0x01c05000)
static inline void sys_spi_write_txbuf(u8_t * buf, int len)
{
	// virtual_addr_t addr = 0x01c05000;
	int i;

	if(!buf)
		len = 0;

	write32(SPI0_BASE + SPI_MTC, len & 0xffffff);
	write32(SPI0_BASE + SPI_BCC, len & 0xffffff);
	for(i = 0; i < len; ++i)
		write8(SPI0_BASE + SPI_TXD, *buf++);
}

static int sys_spi_transfer(void * txbuf, void * rxbuf, int len)
{
	// virtual_addr_t addr = 0x01c05000;
	int count = len;
	u8_t * tx = txbuf;
	u8_t * rx = rxbuf;
	u8_t val;
	int n, i;

	while(count > 0)
	{
		n = (count <= 64) ? count : 64;
		write32(SPI0_BASE + SPI_MBC, n);
		sys_spi_write_txbuf(tx, n);
		write32(SPI0_BASE + SPI_TCR, read32(SPI0_BASE + SPI_TCR) | (1 << 31));

		// while((read32(SPI0_BASE + SPI_FSR) & 0xff) < n);
		for(i = 0; i < n; i++)
		{
			while((read32(SPI0_BASE + SPI_FSR) & 0xff) == 0);
			val = read8(SPI0_BASE + SPI_RXD);
			if(rx)
				*rx++ = val;
		}

		if(tx)
			tx += n;
		count -= n;
	}
	return len;
}

static int sys_spi_write_then_read(void * txbuf, int txlen, void * rxbuf, int rxlen)
{
	if(sys_spi_transfer(txbuf, NULL, txlen) != txlen)
		return -1;
	if(sys_spi_transfer(NULL, rxbuf, rxlen) != rxlen)
		return -1;
	return 0;
}

void sys_spi_flash_read(int addr, void * buf, int count)
{
	u8_t tx[4];

	tx[0] = 0x03;
	tx[1] = (u8_t)(addr >> 16);
	tx[2] = (u8_t)(addr >> 8);
	tx[3] = (u8_t)(addr >> 0);
	sys_spi_select();
	sys_spi_write_then_read(tx, 4, buf, count);
	sys_spi_deselect();
}

4. Remove shells and Lua frameworks

+#if XBOOT_SHELL_ENABLE
     /* Do auto boot */
Add a comment to this line
     do_autoboot();
         //run_shell();
                 system("/application/examples");
     }
+#else
+    while(1);
+#endif

make file remove these lines:
-                framework                                    \
-                framework/base64                            \
-                framework/display                            \
-                framework/event                                \
-                framework/hardware                            \
-                framework/lang                                \
-                framework/stopwatch                            \


-INCDIRS        +=     xboot/src/external/lua-5.3.4
-SRCDIRS        +=    xboot/src/external/lua-5.3.4
-INCDIRS        +=     xboot/src/external/lua-cjson-2.1.0
-SRCDIRS        +=    xboot/src/external/lua-cjson-2.1.0

再把romdisk删掉一些,我只留了ttf文件

5. 参照xboot最新版,加上编译选项 —ffunction-sections和—gc-sections [这个一定要做,能省1.xMB]

6. SPI升到100MHz [arch/arm32/mach-f1c100s/sys-spi-flash.c]
-    write32(addr + SPI_CCR, 0x00001001);
+    write32(addr + SPI_CCR, 0x00001000);

7. CPU生到最高频率720Mhz [arch/arm32/mach-f1c100s/sys-clock.c]
-    clock_set_pll_cpu(408000000);
+    clock_set_pll_cpu(800000000);

离线

#54 2018-10-10 21:07:41

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
Gardenia 说:

楼主休完假了吧?我这边也是需要图形的,方便发我邮箱吗?4201842@qq.com

我试了一下发现我的改动太分散,而且xboot和我另外一个框架绑在一起,不好给你,我还是给你说下几个改动吧
1. skip compress [sys-copyself.c]

+#if CONFIG_LZ_COMPRESS
         sys_spi_flash_init();
         sys_spi_flash_read(16384, &z, sizeof(struct zdesc_t));
         sys_spi_flash_exit();
...
         sys_decompress(tmp, ssize, mem, dsize);
         }
         else
+#endif

2. Disable logs [arch/arm32/mach-f1c100s/include/configs.h]

+#define CONFIG_NO_LOG                        (1)

3. 优化了SPI读写

/*
 * sys-spi-flash.c
 *
 * Copyright(c) 2007-2018 Jianjun Jiang <8192542@qq.com>
 * Official site: http://xboot.org
 * Mobile phone: +86-18665388956
 * QQ: 8192542
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#include <xboot.h>

enum {
	SPI_GCR	= 0x04,
	SPI_TCR	= 0x08,
	SPI_IER	= 0x10,
	SPI_ISR	= 0x14,
	SPI_FCR	= 0x18,
	SPI_FSR	= 0x1c,
	SPI_WCR	= 0x20,
	SPI_CCR	= 0x24,
	SPI_MBC	= 0x30,
	SPI_MTC	= 0x34,
	SPI_BCC	= 0x38,
	SPI_TXD	= 0x200,
	SPI_RXD	= 0x300,
};

void sys_spi_flash_init(void)
{
	virtual_addr_t addr;
	u32_t val;

	/* Config GPIOC0, GPIOC1, GPIOC2 and GPIOC3 */
	addr = 0x01c20848 + 0x00;
	val = read32(addr);
	val &= ~(0xf << ((0 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((0 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((1 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((1 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((2 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((2 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((3 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((3 & 0x7) << 2));
	write32(addr, val);

	/* Deassert spi0 reset */
	addr = 0x01c202c0;
	val = read32(addr);
	val |= (1 << 20);
	write32(addr, val);

	/* Open the spi0 bus gate */
	addr = 0x01c20000 + 0x60;
	val = read32(addr);
	val |= (1 << 20);
	write32(addr, val);

	/* Set spi clock rate control register, divided by 4 */
	addr = 0x01c05000;
	write32(addr + SPI_CCR, 0x00001000);

	/* Enable spi0 and do a soft reset */
	addr = 0x01c05000;
	val = read32(addr + SPI_GCR);
	val |= (1 << 31) | (1 << 7) | (1 << 1) | (1 << 0);
	write32(addr + SPI_GCR, val);
	while(read32(addr + SPI_GCR) & (1 << 31));

	val = read32(addr + SPI_TCR);
	val &= ~(0x3 << 0);
	val |= (1 << 6) | (1 << 2);
	write32(addr + SPI_TCR, val);

	val = read32(addr + SPI_FCR);
	val |= (1 << 31) | (1 << 15);
	write32(addr + SPI_FCR, val);
}

void sys_spi_flash_exit(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	/* Disable the spi0 controller */
	val = read32(addr + SPI_GCR);
	val &= ~((1 << 1) | (1 << 0));
	write32(addr + SPI_GCR, val);
}

static void sys_spi_select(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	val = read32(addr + SPI_TCR);
	val &= ~((0x3 << 4) | (0x1 << 7));
	val |= ((0 & 0x3) << 4) | (0x0 << 7);
	write32(addr + SPI_TCR, val);
}

static void sys_spi_deselect(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	val = read32(addr + SPI_TCR);
	val &= ~((0x3 << 4) | (0x1 << 7));
	val |= ((0 & 0x3) << 4) | (0x1 << 7);
	write32(addr + SPI_TCR, val);
}
#define SPI0_BASE	(0x01c05000)
static inline void sys_spi_write_txbuf(u8_t * buf, int len)
{
	// virtual_addr_t addr = 0x01c05000;
	int i;

	if(!buf)
		len = 0;

	write32(SPI0_BASE + SPI_MTC, len & 0xffffff);
	write32(SPI0_BASE + SPI_BCC, len & 0xffffff);
	for(i = 0; i < len; ++i)
		write8(SPI0_BASE + SPI_TXD, *buf++);
}

static int sys_spi_transfer(void * txbuf, void * rxbuf, int len)
{
	// virtual_addr_t addr = 0x01c05000;
	int count = len;
	u8_t * tx = txbuf;
	u8_t * rx = rxbuf;
	u8_t val;
	int n, i;

	while(count > 0)
	{
		n = (count <= 64) ? count : 64;
		write32(SPI0_BASE + SPI_MBC, n);
		sys_spi_write_txbuf(tx, n);
		write32(SPI0_BASE + SPI_TCR, read32(SPI0_BASE + SPI_TCR) | (1 << 31));

		// while((read32(SPI0_BASE + SPI_FSR) & 0xff) < n);
		for(i = 0; i < n; i++)
		{
			while((read32(SPI0_BASE + SPI_FSR) & 0xff) == 0);
			val = read8(SPI0_BASE + SPI_RXD);
			if(rx)
				*rx++ = val;
		}

		if(tx)
			tx += n;
		count -= n;
	}
	return len;
}

static int sys_spi_write_then_read(void * txbuf, int txlen, void * rxbuf, int rxlen)
{
	if(sys_spi_transfer(txbuf, NULL, txlen) != txlen)
		return -1;
	if(sys_spi_transfer(NULL, rxbuf, rxlen) != rxlen)
		return -1;
	return 0;
}

void sys_spi_flash_read(int addr, void * buf, int count)
{
	u8_t tx[4];

	tx[0] = 0x03;
	tx[1] = (u8_t)(addr >> 16);
	tx[2] = (u8_t)(addr >> 8);
	tx[3] = (u8_t)(addr >> 0);
	sys_spi_select();
	sys_spi_write_then_read(tx, 4, buf, count);
	sys_spi_deselect();
}

4. Remove shells and Lua frameworks

+#if XBOOT_SHELL_ENABLE
     /* Do auto boot */
Add a comment to this line
     do_autoboot();
         //run_shell();
                 system("/application/examples");
     }
+#else
+    while(1);
+#endif

make file remove these lines:
-                framework                                    \
-                framework/base64                            \
-                framework/display                            \
-                framework/event                                \
-                framework/hardware                            \
-                framework/lang                                \
-                framework/stopwatch                            \


-INCDIRS        +=     xboot/src/external/lua-5.3.4
-SRCDIRS        +=    xboot/src/external/lua-5.3.4
-INCDIRS        +=     xboot/src/external/lua-cjson-2.1.0
-SRCDIRS        +=    xboot/src/external/lua-cjson-2.1.0

再把romdisk删掉一些,我只留了ttf文件

5. 参照xboot最新版,加上编译选项 —ffunction-sections和—gc-sections [这个一定要做,能省1.xMB]

6. SPI升到100MHz [arch/arm32/mach-f1c100s/sys-spi-flash.c]
-    write32(addr + SPI_CCR, 0x00001001);
+    write32(addr + SPI_CCR, 0x00001000);

7. CPU生到最高频率720Mhz [arch/arm32/mach-f1c100s/sys-clock.c]
-    clock_set_pll_cpu(408000000);
+    clock_set_pll_cpu(800000000);

这两天把spi驱动搞了下,dual模式+提高spi速度,都没有很明显速度提升,有点奇怪,有个问题请教下,在刚启动的时候sys_copyself()是在flash里面运行的还是dram,在调用前没看到相关函数的拷贝过程,如果是在flash里面运行的,这里执行效率就相当低了。

最近编辑记录 Gardenia (2018-10-10 21:08:19)

离线

#55 2018-10-10 21:16:41

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

所有代码都在DDR或者SRAM跑,全志全部都没有XIP功能。





离线

楼主 #56 2018-10-10 22:31:52

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Gardenia 说:
达克罗德 说:
Gardenia 说:

楼主休完假了吧?我这边也是需要图形的,方便发我邮箱吗?4201842@qq.com

我试了一下发现我的改动太分散,而且xboot和我另外一个框架绑在一起,不好给你,我还是给你说下几个改动吧
1. skip compress [sys-copyself.c]

+#if CONFIG_LZ_COMPRESS
         sys_spi_flash_init();
         sys_spi_flash_read(16384, &z, sizeof(struct zdesc_t));
         sys_spi_flash_exit();
...
         sys_decompress(tmp, ssize, mem, dsize);
         }
         else
+#endif

2. Disable logs [arch/arm32/mach-f1c100s/include/configs.h]

+#define CONFIG_NO_LOG                        (1)

3. 优化了SPI读写

/*
 * sys-spi-flash.c
 *
 * Copyright(c) 2007-2018 Jianjun Jiang <8192542@qq.com>
 * Official site: http://xboot.org
 * Mobile phone: +86-18665388956
 * QQ: 8192542
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#include <xboot.h>

enum {
	SPI_GCR	= 0x04,
	SPI_TCR	= 0x08,
	SPI_IER	= 0x10,
	SPI_ISR	= 0x14,
	SPI_FCR	= 0x18,
	SPI_FSR	= 0x1c,
	SPI_WCR	= 0x20,
	SPI_CCR	= 0x24,
	SPI_MBC	= 0x30,
	SPI_MTC	= 0x34,
	SPI_BCC	= 0x38,
	SPI_TXD	= 0x200,
	SPI_RXD	= 0x300,
};

void sys_spi_flash_init(void)
{
	virtual_addr_t addr;
	u32_t val;

	/* Config GPIOC0, GPIOC1, GPIOC2 and GPIOC3 */
	addr = 0x01c20848 + 0x00;
	val = read32(addr);
	val &= ~(0xf << ((0 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((0 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((1 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((1 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((2 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((2 & 0x7) << 2));
	write32(addr, val);

	val = read32(addr);
	val &= ~(0xf << ((3 & 0x7) << 2));
	val |= ((0x2 & 0x7) << ((3 & 0x7) << 2));
	write32(addr, val);

	/* Deassert spi0 reset */
	addr = 0x01c202c0;
	val = read32(addr);
	val |= (1 << 20);
	write32(addr, val);

	/* Open the spi0 bus gate */
	addr = 0x01c20000 + 0x60;
	val = read32(addr);
	val |= (1 << 20);
	write32(addr, val);

	/* Set spi clock rate control register, divided by 4 */
	addr = 0x01c05000;
	write32(addr + SPI_CCR, 0x00001000);

	/* Enable spi0 and do a soft reset */
	addr = 0x01c05000;
	val = read32(addr + SPI_GCR);
	val |= (1 << 31) | (1 << 7) | (1 << 1) | (1 << 0);
	write32(addr + SPI_GCR, val);
	while(read32(addr + SPI_GCR) & (1 << 31));

	val = read32(addr + SPI_TCR);
	val &= ~(0x3 << 0);
	val |= (1 << 6) | (1 << 2);
	write32(addr + SPI_TCR, val);

	val = read32(addr + SPI_FCR);
	val |= (1 << 31) | (1 << 15);
	write32(addr + SPI_FCR, val);
}

void sys_spi_flash_exit(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	/* Disable the spi0 controller */
	val = read32(addr + SPI_GCR);
	val &= ~((1 << 1) | (1 << 0));
	write32(addr + SPI_GCR, val);
}

static void sys_spi_select(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	val = read32(addr + SPI_TCR);
	val &= ~((0x3 << 4) | (0x1 << 7));
	val |= ((0 & 0x3) << 4) | (0x0 << 7);
	write32(addr + SPI_TCR, val);
}

static void sys_spi_deselect(void)
{
	virtual_addr_t addr = 0x01c05000;
	u32_t val;

	val = read32(addr + SPI_TCR);
	val &= ~((0x3 << 4) | (0x1 << 7));
	val |= ((0 & 0x3) << 4) | (0x1 << 7);
	write32(addr + SPI_TCR, val);
}
#define SPI0_BASE	(0x01c05000)
static inline void sys_spi_write_txbuf(u8_t * buf, int len)
{
	// virtual_addr_t addr = 0x01c05000;
	int i;

	if(!buf)
		len = 0;

	write32(SPI0_BASE + SPI_MTC, len & 0xffffff);
	write32(SPI0_BASE + SPI_BCC, len & 0xffffff);
	for(i = 0; i < len; ++i)
		write8(SPI0_BASE + SPI_TXD, *buf++);
}

static int sys_spi_transfer(void * txbuf, void * rxbuf, int len)
{
	// virtual_addr_t addr = 0x01c05000;
	int count = len;
	u8_t * tx = txbuf;
	u8_t * rx = rxbuf;
	u8_t val;
	int n, i;

	while(count > 0)
	{
		n = (count <= 64) ? count : 64;
		write32(SPI0_BASE + SPI_MBC, n);
		sys_spi_write_txbuf(tx, n);
		write32(SPI0_BASE + SPI_TCR, read32(SPI0_BASE + SPI_TCR) | (1 << 31));

		// while((read32(SPI0_BASE + SPI_FSR) & 0xff) < n);
		for(i = 0; i < n; i++)
		{
			while((read32(SPI0_BASE + SPI_FSR) & 0xff) == 0);
			val = read8(SPI0_BASE + SPI_RXD);
			if(rx)
				*rx++ = val;
		}

		if(tx)
			tx += n;
		count -= n;
	}
	return len;
}

static int sys_spi_write_then_read(void * txbuf, int txlen, void * rxbuf, int rxlen)
{
	if(sys_spi_transfer(txbuf, NULL, txlen) != txlen)
		return -1;
	if(sys_spi_transfer(NULL, rxbuf, rxlen) != rxlen)
		return -1;
	return 0;
}

void sys_spi_flash_read(int addr, void * buf, int count)
{
	u8_t tx[4];

	tx[0] = 0x03;
	tx[1] = (u8_t)(addr >> 16);
	tx[2] = (u8_t)(addr >> 8);
	tx[3] = (u8_t)(addr >> 0);
	sys_spi_select();
	sys_spi_write_then_read(tx, 4, buf, count);
	sys_spi_deselect();
}

4. Remove shells and Lua frameworks

+#if XBOOT_SHELL_ENABLE
     /* Do auto boot */
Add a comment to this line
     do_autoboot();
         //run_shell();
                 system("/application/examples");
     }
+#else
+    while(1);
+#endif

make file remove these lines:
-                framework                                    \
-                framework/base64                            \
-                framework/display                            \
-                framework/event                                \
-                framework/hardware                            \
-                framework/lang                                \
-                framework/stopwatch                            \


-INCDIRS        +=     xboot/src/external/lua-5.3.4
-SRCDIRS        +=    xboot/src/external/lua-5.3.4
-INCDIRS        +=     xboot/src/external/lua-cjson-2.1.0
-SRCDIRS        +=    xboot/src/external/lua-cjson-2.1.0

再把romdisk删掉一些,我只留了ttf文件

5. 参照xboot最新版,加上编译选项 —ffunction-sections和—gc-sections [这个一定要做,能省1.xMB]

6. SPI升到100MHz [arch/arm32/mach-f1c100s/sys-spi-flash.c]
-    write32(addr + SPI_CCR, 0x00001001);
+    write32(addr + SPI_CCR, 0x00001000);

7. CPU生到最高频率720Mhz [arch/arm32/mach-f1c100s/sys-clock.c]
-    clock_set_pll_cpu(408000000);
+    clock_set_pll_cpu(800000000);

这两天把spi驱动搞了下,dual模式+提高spi速度,都没有很明显速度提升,有点奇怪,有个问题请教下,在刚启动的时候sys_copyself()是在flash里面运行的还是dram,在调用前没看到相关函数的拷贝过程,如果是在flash里面运行的,这里执行效率就相当低了。

全志的brom程序启动时自动从spi nor拷贝最前面的几k代码到内部SRAM后执行的。后来因为SRAM太慢,xboot老大又改成再一次拷贝到dram后再从dram执行copyself,把整个image拷贝到DRAM

离线

#57 2018-10-11 11:19:14

Gardenia
会员
注册时间: 2018-09-29
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

谢谢,了解了,按你的改了又有些提升,目前效果还不错,谢谢楼主。

离线

#58 2018-10-22 09:19:52

alan8918
会员
注册时间: 2018-06-26
已发帖子: 42
积分: 42

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

这玩意的性能,裸奔还是蛮有玩头的

离线

#59 2018-11-02 13:53:36

cddxhy
会员
注册时间: 2018-11-02
已发帖子: 6
积分: 4

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

裸奔?好多库不能用呢?

离线

#60 2018-11-02 14:02:25

lilo
会员
注册时间: 2017-10-15
已发帖子: 215
积分: 215

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

cddxhy 说:

裸奔?好多库不能用呢?

需要什么库

离线

#61 2018-11-17 09:55:25

Pese
会员
注册时间: 2017-11-28
已发帖子: 13
积分: 8

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

楼主位的外设驱动代码(spi iic uasrt等),都验证可用的吗?

离线

#62 2018-11-17 10:55:26

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Pese 说:

楼主位的外设驱动代码(spi iic uasrt等),都验证可用的吗?

可以的,都验证过了。





离线

#63 2018-11-17 17:57:42

Pese
会员
注册时间: 2017-11-28
已发帖子: 13
积分: 8

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

请教,楼主位的framebuffer,有没有画点函数?

离线

楼主 #64 2018-11-18 08:58:03

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Pese 说:

请教,楼主位的framebuffer,有没有画点函数?

framebuffer都有了,画点就是把rgba写到对应行列的那个32位数

离线

#65 2018-11-18 14:53:20

Pese
会员
注册时间: 2017-11-28
已发帖子: 13
积分: 8

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
Pese 说:

请教,楼主位的framebuffer,有没有画点函数?

framebuffer都有了,画点就是把rgba写到对应行列的那个32位数

这样?下载麻烦未测试
void point(x,y,color){
((uint32_t *)render->pixels)[x+800*y] = color;
  fb_f1c100s_present(&fb_f1c100s, render);
}
不过裸机真的麻烦,使用了标准库,makefile加-lc -lm -lnosys编译,就报错,外设驱动又不全,玩不来啊
In function `_sbrk':
sbrk.c:(.text._sbrk+0x28): undefined reference to `end'
collect2.exe: error: ld returned 1 exit status
噢gcc是gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (GNU Tools for Arm Embedded Processors 7-2018-q2-update)

离线

楼主 #66 2018-11-18 16:05:46

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Pese 说:
达克罗德 说:
Pese 说:

请教,楼主位的framebuffer,有没有画点函数?

framebuffer都有了,画点就是把rgba写到对应行列的那个32位数

这样?下载麻烦未测试
void point(x,y,color){
((uint32_t *)render->pixels)[x+800*y] = color;
  fb_f1c100s_present(&fb_f1c100s, render);
}
不过裸机真的麻烦,使用了标准库,makefile加-lc -lm -lnosys编译,就报错,外设驱动又不全,玩不来啊
In function `_sbrk':
sbrk.c:(.text._sbrk+0x28): undefined reference to `end'
collect2.exe: error: ld returned 1 exit status
噢gcc是gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (GNU Tools for Arm Embedded Processors 7-2018-q2-update)

present是把全屏都更新。你不要每画一个点都更新全屏,而是全部画完才调present

离线

#67 2018-11-19 11:27:46

Pese
会员
注册时间: 2017-11-28
已发帖子: 13
积分: 8

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
Pese 说:
达克罗德 说:

framebuffer都有了,画点就是把rgba写到对应行列的那个32位数

这样?下载麻烦未测试
void point(x,y,color){
((uint32_t *)render->pixels)[x+800*y] = color;
  fb_f1c100s_present(&fb_f1c100s, render);
}
不过裸机真的麻烦,使用了标准库,makefile加-lc -lm -lnosys编译,就报错,外设驱动又不全,玩不来啊
In function `_sbrk':
sbrk.c:(.text._sbrk+0x28): undefined reference to `end'
collect2.exe: error: ld returned 1 exit status
噢gcc是gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (GNU Tools for Arm Embedded Processors 7-2018-q2-update)

present是把全屏都更新。你不要每画一个点都更新全屏,而是全部画完才调present

折腾一下,还是不行,不知道为什么,这是什么原因?
代码和显示如下(按代码应该是有一条绿线的)
1.png
3.jpg

离线

楼主 #68 2018-11-19 12:47:54

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Pese 说:
达克罗德 说:
Pese 说:

这样?下载麻烦未测试
void point(x,y,color){
((uint32_t *)render->pixels)[x+800*y] = color;
  fb_f1c100s_present(&fb_f1c100s, render);
}
不过裸机真的麻烦,使用了标准库,makefile加-lc -lm -lnosys编译,就报错,外设驱动又不全,玩不来啊
In function `_sbrk':
sbrk.c:(.text._sbrk+0x28): undefined reference to `end'
collect2.exe: error: ld returned 1 exit status
噢gcc是gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (GNU Tools for Arm Embedded Processors 7-2018-q2-update)

present是把全屏都更新。你不要每画一个点都更新全屏,而是全部画完才调present

折腾一下,还是不行,不知道为什么,这是什么原因?
代码和显示如下(按代码应该是有一条绿线的)
https://whycan.cn/files/members/377/1.png
https://whycan.cn/files/members/377/3.jpg

很奇怪,你全屏画蓝色都可以,没理由画一行不行呀。晕哥发现的我在驱动把480写成400这个问题你改了吗?

离线

#69 2018-11-19 14:34:25

Pese
会员
注册时间: 2017-11-28
已发帖子: 13
积分: 8

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
Pese 说:
达克罗德 说:

present是把全屏都更新。你不要每画一个点都更新全屏,而是全部画完才调present

折腾一下,还是不行,不知道为什么,这是什么原因?
代码和显示如下(按代码应该是有一条绿线的)
https://whycan.cn/files/members/377/1.png
https://whycan.cn/files/members/377/3.jpg

很奇怪,你全屏画蓝色都可以,没理由画一行不行呀。晕哥发现的我在驱动把480写成400这个问题你改了吗?

改了,所以看到的是全屏蓝色的,奇怪的是全屏刷一个颜色就可以,可这样画线或画一个矩形,就不行,你有空试试上面画线的代码看看!!

离线

楼主 #70 2018-11-21 01:16:56

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

改了,所以看到的是全屏蓝色的,奇怪的是全屏刷一个颜色就可以,可这样画线或画一个矩形,就不行,你有空试试上面画线的代码看看!!

原来是我的Bug,defe和debe的divider没有设对。PLL时钟要用f1c100s_tcon_clk_get_rate()来获取,主要是改动一下两个地方:

static void f1c100s_clk_defe_init(void)
{
	clk_mux_set_parent(0x01c2010c, 3, 24, 0);
	clk_divider_set_rate(0x01c2010c, 4, 0, true, f1c100s_tcon_clk_get_rate(), 198000000);
}

static void f1c100s_clk_debe_init(void)
{
	clk_mux_set_parent(0x01c20104, 3, 24, 0);
	clk_divider_set_rate(0x01c20104, 4, 0, true, f1c100s_tcon_clk_get_rate(), 198000000);
}

main

        framebuffer_t fb_f1c100s;
        fb_f1c100s_init(&fb_f1c100s);
        render_t* render = fb_f1c100s_create(&fb_f1c100s);
        for (int i = 0; i < render->pixlen/4;i++)
        {
            ((uint32_t*)render->pixels)[i] = 0xFF0000FF;
        }
        fb_f1c100s_present(&fb_f1c100s, render);
        for (int i = 0; i < 800;i++)
        {
            ((uint32_t*)render->pixels)[i+80000] = 0xFF00FF00;
        }
        fb_f1c100s_present(&fb_f1c100s, render);
        fb_f1c100s_setbl(&fb_f1c100s, 100);

webwxgetmsgimg.jpeg

完整fb-f1c100s.c文件

离线

#71 2018-11-21 08:33:48

lilo
会员
注册时间: 2017-10-15
已发帖子: 215
积分: 215

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

讨论好激烈, 拍照合影留念!

离线

#72 2018-11-21 19:04:00

Pese
会员
注册时间: 2017-11-28
已发帖子: 13
积分: 8

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

改了,所以看到的是全屏蓝色的,奇怪的是全屏刷一个颜色就可以,可这样画线或画一个矩形,就不行,你有空试试上面画线的代码看看!!

原来是我的Bug,defe和debe的divider没有设对。PLL时钟要用f1c100s_tcon_clk_get_rate()来获取,主要是改动一下两个地方:

static void f1c100s_clk_defe_init(void)
{
	clk_mux_set_parent(0x01c2010c, 3, 24, 0);
	clk_divider_set_rate(0x01c2010c, 4, 0, true, f1c100s_tcon_clk_get_rate(), 198000000);
}

static void f1c100s_clk_debe_init(void)
{
	clk_mux_set_parent(0x01c20104, 3, 24, 0);
	clk_divider_set_rate(0x01c20104, 4, 0, true, f1c100s_tcon_clk_get_rate(), 198000000);
}

main

        framebuffer_t fb_f1c100s;
        fb_f1c100s_init(&fb_f1c100s);
        render_t* render = fb_f1c100s_create(&fb_f1c100s);
        for (int i = 0; i < render->pixlen/4;i++)
        {
            ((uint32_t*)render->pixels)[i] = 0xFF0000FF;
        }
        fb_f1c100s_present(&fb_f1c100s, render);
        for (int i = 0; i < 800;i++)
        {
            ((uint32_t*)render->pixels)[i+80000] = 0xFF00FF00;
        }
        fb_f1c100s_present(&fb_f1c100s, render);
        fb_f1c100s_setbl(&fb_f1c100s, 100);

https://whycan.cn/files/members/729/webwxgetmsgimg.jpeg

完整fb-f1c100s.c文件

厉害了!!

离线

#73 2018-11-27 19:49:44

t01051
会员
注册时间: 2018-11-27
已发帖子: 1
积分: 1

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

嘿嘿,过两天试试 ~~

离线

#74 2018-11-30 08:49:19

ldqmoon
会员
注册时间: 2018-05-25
已发帖子: 16
积分: 16

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

支持一下, 之前搞了很长时间,可以只搞出一半来,这次有完整的了

离线

#75 2018-12-02 13:38:34

执念执战
会员
注册时间: 2018-11-27
已发帖子: 19
积分: 9

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

在大佬的裸机代码基础上移植了ZLG_GUI并显示了旋转立方体。

gifeditor_20181202_114251.gif
可惜大佬没写例子的外设都还没摸索会,不然就多加点功能了。
另外,我想以此写一篇新手裸机教程,可以吗?

离线

#76 2018-12-02 13:46:22

basicdev
会员
注册时间: 2017-10-02
已发帖子: 159
积分: 159

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

这个Demo真是666,这个是gif的吗,是不是用zlg gui模拟器导出的gif,方便分享代码吗?

离线

#77 2018-12-02 15:11:51

执念执战
会员
注册时间: 2018-11-27
已发帖子: 19
积分: 9

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

basicdev 说:

这个Demo真是666,这个是gif的吗,是不是用zlg gui模拟器导出的gif,方便分享代码吗?

想多了,这个是荔枝派屏幕显示,手机拍下来,然后软件转成GIF的,图像质量一下降,颜色都没了,不好看了。
但这个的demo我已经写了教程,在博客园,有源码。 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html   。
就是在荔枝派Nano上面移植显示的,要的话拿去。不过没有你说的GUI自己导出GIF的功能........它没有那么高级,图片显示函数都要自己写,简单的菜单等功能倒是能实现,虽然丑了点。而且我不清楚这个GUI是否免费,纯粹拿来玩。如果你想要你说的功能,得自己写或另外移植支持此功能的GUI了。另外,驱动代码就是本帖子的大神的作品,希望楼主允许。

最近编辑记录 执念执战 (2018-12-02 15:12:51)

离线

#78 2018-12-02 15:25:24

basicdev
会员
注册时间: 2017-10-02
已发帖子: 159
积分: 159

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

执念执战 说:
basicdev 说:

这个Demo真是666,这个是gif的吗,是不是用zlg gui模拟器导出的gif,方便分享代码吗?

想多了,这个是荔枝派屏幕显示,手机拍下来,然后软件转成GIF的,图像质量一下降,颜色都没了,不好看了。
但这个的demo我已经写了教程,在博客园,有源码。 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html   。
就是在荔枝派Nano上面移植显示的,要的话拿去。不过没有你说的GUI自己导出GIF的功能........它没有那么高级,图片显示函数都要自己写,简单的菜单等功能倒是能实现,虽然丑了点。而且我不清楚这个GUI是否免费,纯粹拿来玩。如果你想要你说的功能,得自己写或另外移植支持此功能的GUI了。另外,驱动代码就是本帖子的大神的作品,希望楼主允许。

感谢解惑, 拜读了你的帖子,简直就是小白从入门到精通啊,还提供源码下载。

离线

#79 2018-12-02 16:08:07

执念执战
会员
注册时间: 2018-11-27
已发帖子: 19
积分: 9

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

basicdev 说:
执念执战 说:
basicdev 说:

这个Demo真是666,这个是gif的吗,是不是用zlg gui模拟器导出的gif,方便分享代码吗?

想多了,这个是荔枝派屏幕显示,手机拍下来,然后软件转成GIF的,图像质量一下降,颜色都没了,不好看了。
但这个的demo我已经写了教程,在博客园,有源码。 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html   。
就是在荔枝派Nano上面移植显示的,要的话拿去。不过没有你说的GUI自己导出GIF的功能........它没有那么高级,图片显示函数都要自己写,简单的菜单等功能倒是能实现,虽然丑了点。而且我不清楚这个GUI是否免费,纯粹拿来玩。如果你想要你说的功能,得自己写或另外移植支持此功能的GUI了。另外,驱动代码就是本帖子的大神的作品,希望楼主允许。

感谢解惑, 拜读了你的帖子,简直就是小白从入门到精通啊,还提供源码下载。


实在是因为荔枝派吃灰太久,突然有大佬弄了个能入门的东西,所以想让其他还没入门的也感受一下。而且这些都是单片机思维的东西,一般的接触起来也简单。以后学一下更高级的东西再写移植这个立方体的教程。当然,如果楼主能放出点各个驱动的简单使用代码,我还打算弄个小掌机,基于这个3D显示写点小游戏,来更加深入的写点入门帖。可惜,人家能写出来源码,我都不会用,这个差距一下子就出来了......

离线

#80 2018-12-02 17:42:12

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

执念执战 说:
basicdev 说:
执念执战 说:

想多了,这个是荔枝派屏幕显示,手机拍下来,然后软件转成GIF的,图像质量一下降,颜色都没了,不好看了。
但这个的demo我已经写了教程,在博客园,有源码。 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html   。
就是在荔枝派Nano上面移植显示的,要的话拿去。不过没有你说的GUI自己导出GIF的功能........它没有那么高级,图片显示函数都要自己写,简单的菜单等功能倒是能实现,虽然丑了点。而且我不清楚这个GUI是否免费,纯粹拿来玩。如果你想要你说的功能,得自己写或另外移植支持此功能的GUI了。另外,驱动代码就是本帖子的大神的作品,希望楼主允许。

感谢解惑, 拜读了你的帖子,简直就是小白从入门到精通啊,还提供源码下载。


实在是因为荔枝派吃灰太久,突然有大佬弄了个能入门的东西,所以想让其他还没入门的也感受一下。而且这些都是单片机思维的东西,一般的接触起来也简单。以后学一下更高级的东西再写移植这个立方体的教程。当然,如果楼主能放出点各个驱动的简单使用代码,我还打算弄个小掌机,基于这个3D显示写点小游戏,来更加深入的写点入门帖。可惜,人家能写出来源码,我都不会用,这个差距一下子就出来了......

感谢 @执念执战 这么细致入微的入门教程, 感谢移植这么漂亮的ZLG GUI。


@执念执战分享的代码:
minimal_f1c100s_framebuffer_zlggui.rar

我在linux下编译的时候有整数类型定义错误,所以稍稍改了一下通过编译: minimal_f1c100s_fb_zlggui.tgz

我换上了4.3寸液晶体验了一把:





离线

#81 2018-12-03 11:12:23

vigour1000
会员
注册时间: 2018-11-19
已发帖子: 99
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

裸奔要做成stm32f103那样的标准库方式才好统一研究

离线

#82 2018-12-06 23:32:37

小菜
会员
注册时间: 2018-12-06
已发帖子: 45
积分: 45

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

学习

离线

#83 2018-12-11 20:10:42

小菜
会员
注册时间: 2018-12-06
已发帖子: 45
积分: 45

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

大侠,我编译的时候出现mksunxi无法编译,还请问大概是什么情况。
我已经使用root用户来编译了,还提示没有权限。
minimal_f1c100s.jpg

离线

楼主 #84 2018-12-11 20:31:04

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

小菜 说:

大侠,我编译的时候出现mksunxi无法编译,还请问大概是什么情况。
我已经使用root用户来编译了,还提示没有权限。
https://whycan.cn/files/members/1297/minimal_f1c100s.jpg

没遇到过,你试试把sunxitool的可执行文件用chmod 777处理下

离线

#85 2018-12-11 21:23:15

小菜
会员
注册时间: 2018-12-06
已发帖子: 45
积分: 45

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

原来是tools/mksunxi/mksunxi没有执行权限。多谢指点。

离线

#86 2018-12-11 21:46:19

小菜
会员
注册时间: 2018-12-06
已发帖子: 45
积分: 45

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

编译完的firmware.bin文件可以从SD卡里运行吗?还是必须要烧到flash中?

离线

#87 2018-12-11 22:01:36

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

小菜 说:

编译完的firmware.bin文件可以从SD卡里运行吗?还是必须要烧到flash中?

不行, spl(boot0)里面没有sd卡驱动,xboot最新的代码或许可以了





离线

#88 2018-12-18 09:04:43

dearsohucom
会员
注册时间: 2018-12-18
已发帖子: 4
积分: 4

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

各位真牛逼,吾等在此膜拜!

离线

#89 2019-01-17 10:31:15

duckduckgo
会员
注册时间: 2018-12-13
已发帖子: 58
积分: 43

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

ce-f1c100s-timer.c和cs-f1c100s-timer.c这两个有什么区别?

离线

#90 2019-01-17 17:11:18

siwen
会员
注册时间: 2019-01-17
已发帖子: 7
积分: 7

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

我想买一款F1C200S的产品拆解一下,求产品链接。

离线

#91 2019-01-17 17:26:56

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

siwen 说:

我想买一款F1C200S的产品拆解一下,求产品链接。

C100,C500,C600都是同一个die,估计C200也差不多吧





离线

#92 2019-01-18 20:11:15

jw__liu
会员
注册时间: 2019-01-18
已发帖子: 40
积分: 40

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

不错受到鼓舞 正在做nuc972的显示代码一天了还没头绪。

离线

#93 2019-01-23 13:45:37

Jin劲
会员
注册时间: 2018-04-06
已发帖子: 217
积分: 217

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

A

A

AAAAAAAAAAAA

离线

#94 2019-01-28 13:35:36

xinyu_khan
会员
注册时间: 2019-01-15
已发帖子: 31
积分: 31

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

学习了

离线

#95 2019-01-30 18:16:57

0752ben
会员
注册时间: 2019-01-30
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

首先感谢楼主的贡献,源码在荔枝派F1C100S板上顺利的跑起来了。
下面有个问题想请教下:
我想修改液晶驱动函数,改成1024*768分辨率,通过VGA驱动15寸液晶屏。
VGA时序参考了 https://www.cnblogs.com/qidaiymm/p/6006039.html ,http://www.docin.com/p-540410877.html   查看了相关的VGA标准时序。修改了液晶初始化函数,但是一直不成功,不知道 除了 VGA的时序需要修改,还有那些参数需要修改?

代码如下:


void fb_f1c100s_init(framebuffer_t * fb)
{
    int32_t i;
    fb_f1c100s_pdata_t * pdat = &fb_f1c100s_pData;

    pdat->virtdefe = phys_to_virt(F1C100S_DEFE_BASE);
    pdat->virtdebe = phys_to_virt(F1C100S_DEBE_BASE);
    pdat->virttcon = phys_to_virt(F1C100S_TCON_BASE);
    pdat->clkdefe = "clkdefe";
    pdat->clkdebe = "clkdebe";
    pdat->clktcon = "clktcon";
    pdat->rstdefe = 46;        //请问这里是是什么参数?
    pdat->rstdebe = 44;        //请问这里是是什么参数?
    pdat->rsttcon = 36;          //请问达克罗德这里是是什么参数?

    pdat->width = 1024;       //分辨率
    pdat->height = 768;

    pdat->pwidth = 136;  //h-pulse-width 水平脉冲宽度
    pdat->pheight = 6;   // v-pulse-width 垂直脉冲宽度

    pdat->bits_per_pixel = 18;
    pdat->bytes_per_pixel = 4;
    pdat->index = 0;
    pdat->vram[0] = dma_alloc_noncoherent(pdat->width * pdat->height * pdat->bytes_per_pixel);
    pdat->vram[1] = dma_alloc_noncoherent(pdat->width * pdat->height * pdat->bytes_per_pixel);

    pdat->timing.pixel_clock_hz = 65000000;  //65MHZ 时钟

 
    pdat->timing.h_front_porch = 24;     //水平前沿值
    pdat->timing.h_back_porch = 160; // //水平后沿值     
    pdat->timing.h_sync_len = 1344;  // 
   
    pdat->timing.v_front_porch = 3;     //垂直前沿值
    pdat->timing.v_back_porch = 29; //垂直后沿值
    pdat->timing.v_sync_len = 806;   
   
    pdat->timing.h_sync_active = false;
    pdat->timing.v_sync_active = false;
    pdat->timing.den_active = false;
    pdat->timing.clk_active = false;
    pdat->backlight = &led_pwm_bl;

    fb->name = "fb-f1c100s";
    fb->width = pdat->width;
    fb->height = pdat->height;
    fb->pwidth = pdat->pwidth;
    fb->pheight = pdat->pheight;
    fb->bpp = pdat->bytes_per_pixel * 8;
    fb->priv = pdat;

    f1c100s_clk_pll_video_set_enable(true);
    f1c100s_clk_debe_init();
    f1c100s_clk_defe_init();
    f1c100s_clk_tcon_init();
    // clk_enable(pdat->clkdefe);
    // clk_enable(pdat->clkdebe);
    // clk_enable(pdat->clktcon);
    f1c100s_clk_defe_enable();
    f1c100s_clk_debe_enable();
    f1c100s_clk_tcon_enable();
    if(pdat->rstdefe >= 0)
        reset_f1c100s_deassert(&reset_2, pdat->rstdefe - reset_2.base);
    if(pdat->rstdebe >= 0)
        reset_f1c100s_deassert(&reset_2, pdat->rstdebe - reset_2.base);
    if(pdat->rsttcon >= 0)
        reset_f1c100s_deassert(&reset_2, pdat->rsttcon - reset_2.base);
    for(i = 0x0800; i < 0x1000; i += 4)
        write32(pdat->virtdebe + i, 0);
    fb_f1c100s_init_hw(pdat);

}

网址的fb-f1c100s.c文件下载  fb-f1c100s.zip

离线

#96 2019-01-30 18:25:56

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

@0752ben 厉害厉害, 感谢分享!





离线

楼主 #97 2019-01-30 19:02:33

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

那是几个显示相关模块的内部复位管,和时序没什么关系

离线

#98 2019-02-02 22:39:30

0752ben
会员
注册时间: 2019-01-30
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

你好,达克罗德
我在修改液framebuffer初始化函数的时候,void fb_f1c100s_init(framebuffer_t * fb)函数中,只要修改了频率参数,  您的代码中 原来pdat->timing.pixel_clock_hz = 33000000 ,只要这个参数一旦修改后,不管是变大还是变小。 F1C100S的LCD_CLK硬件引脚就没有信号输出了。
我尝试了下,查询液晶初始化的其他函数,实在没有发现问题所在。
请问下达克罗德,您的代码从XBOOT中移植出来,是否需要修改什么地方,才可以 实现其他分辨率的刷屏频率。

离线

楼主 #99 2019-02-03 08:15:57

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

0752ben 说:

你好,达克罗德
我在修改液framebuffer初始化函数的时候,void fb_f1c100s_init(framebuffer_t * fb)函数中,只要修改了频率参数,  您的代码中 原来pdat->timing.pixel_clock_hz = 33000000 ,只要这个参数一旦修改后,不管是变大还是变小。 F1C100S的LCD_CLK硬件引脚就没有信号输出了。
我尝试了下,查询液晶初始化的其他函数,实在没有发现问题所在。
请问下达克罗德,您的代码从XBOOT中移植出来,是否需要修改什么地方,才可以 实现其他分辨率的刷屏频率。

71楼的修改你改了吗
我最近要支持1024x600,成功了我发出来

离线

#100 2019-02-04 20:41:03

0752ben
会员
注册时间: 2019-01-30
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

你好,达克罗德。
我的工程替换了71楼的 “完整FB-f1c100s.c文件”,编译成功后,修改pdat->timing.pixel_clock_hz  ,情况是一样的,LCD_CLK硬件引脚就没有信号输出。

离线

楼主 #101 2019-02-10 02:01:11

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

0752ben 说:

你好,达克罗德。
我的工程替换了71楼的 “完整FB-f1c100s.c文件”,编译成功后,修改pdat->timing.pixel_clock_hz  ,情况是一样的,LCD_CLK硬件引脚就没有信号输出。

启动时PLL_VIDEO时钟只有198MHZ,而全志要求和pixel时钟的倍数必须大于等于4,实际我发现大于等于6才行。所以33Mhz以上TCON时钟工作不正常
需要把PLL video时钟设高一点
把sys_clock.c中

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004107);

时钟输出=24000000*(0x41+1)/(0x07+1)=198Mhz
改为

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004103);

时钟输出=24000000*(0x41+1)/(0x03+1)=396Mhz

这时候pixel_clock_hz能设置成更高时钟了

离线

#102 2019-02-21 22:18:24

www220
会员
注册时间: 2018-02-09
已发帖子: 46
积分: 46

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

有usb开源资料就爽了

离线

#103 2019-03-04 16:30:40

0752ben
会员
注册时间: 2019-01-30
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
0752ben 说:

你好,达克罗德。
我的工程替换了71楼的 “完整FB-f1c100s.c文件”,编译成功后,修改pdat->timing.pixel_clock_hz  ,情况是一样的,LCD_CLK硬件引脚就没有信号输出。

启动时PLL_VIDEO时钟只有198MHZ,而全志要求和pixel时钟的倍数必须大于等于4,实际我发现大于等于6才行。所以33Mhz以上TCON时钟工作不正常
需要把PLL video时钟设高一点
把sys_clock.c中

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004107);

时钟输出=24000000*(0x41+1)/(0x07+1)=198Mhz
改为

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004103);

时钟输出=24000000*(0x41+1)/(0x03+1)=396Mhz

这时候pixel_clock_hz能设置成更高时钟了


你好,达克罗德,我还是没能调通1280*720分辨率输出。上个月忙起来,就没有时间研究了。请问您接付费外包吗?我的联系方式邮箱 243280383@qq.com

离线

楼主 #104 2019-03-04 19:35:14

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

0752ben 说:
达克罗德 说:
0752ben 说:

你好,达克罗德。
我的工程替换了71楼的 “完整FB-f1c100s.c文件”,编译成功后,修改pdat->timing.pixel_clock_hz  ,情况是一样的,LCD_CLK硬件引脚就没有信号输出。

启动时PLL_VIDEO时钟只有198MHZ,而全志要求和pixel时钟的倍数必须大于等于4,实际我发现大于等于6才行。所以33Mhz以上TCON时钟工作不正常
需要把PLL video时钟设高一点
把sys_clock.c中

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004107);

时钟输出=24000000*(0x41+1)/(0x07+1)=198Mhz
改为

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004103);

时钟输出=24000000*(0x41+1)/(0x03+1)=396Mhz

这时候pixel_clock_hz能设置成更高时钟了


你好,达克罗德,我还是没能调通1280*720分辨率输出。上个月忙起来,就没有时间研究了。请问您接付费外包吗?我的联系方式邮箱 243280383@qq.com

不好意思,实在没有时间,我只是业余玩玩,研究也很浅

离线

#105 2019-03-04 20:04:11

0752ben
会员
注册时间: 2019-01-30
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德,谢谢你的回复

离线

#106 2019-03-05 09:42:18

www220
会员
注册时间: 2018-02-09
已发帖子: 46
积分: 46

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

这种级别芯片跑裸奔实在太累了

离线

#107 2019-04-29 10:24:31

Aysi
会员
注册时间: 2019-04-03
已发帖子: 15
积分: 34.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

你好!定时器中断和UART中断试过吗?串口初始化时加了    接收中断
val = read32(addr + 0X04);
write32(addr + 0x04, val|0x01);
T0定时器按晕哥的MDK裸奔配置了,,
但老是没反应,,,是配置错吗?中断是在arm32_do_irq中处理吗?还有什么要修改?

离线

#108 2019-06-14 10:15:42

duckduckgo
会员
注册时间: 2018-12-13
已发帖子: 58
积分: 43

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

非常好。
这个是裸机的,请问想在 RT-Thread上跑,启动文件和链接文件该怎么修改?
下面这个是RT-Thread官方写的,项目地址:https://github.com/RT-Thread/rt-thread/tree/master/bsp/allwinner_tina
只能在内存里跑,不能从flash启动。

方法如下:

sudo sunxi-fel -p write  0x00000000 tina-spl.bin
sudo sunxi-fel exec 0x00000000
sudo sunxi-fel -p write  0x80000000 rtthread.bin
sudo sunxi-fel exec 0x80000000

tina-spl.bin是由开源项目https://github.com/uestczyh222/tina-spl.git 编译得到的bin文件。

start_gcc.S:

/*
 * File      : start_gcc.S
 * This file is part of RT-Thread RTOS
 * COPYRIGHT (C) 2013-2018, RT-Thread Development Team
 */

.equ MODE_USR,        0x10
.equ MODE_FIQ,        0x11
.equ MODE_IRQ,        0x12
.equ MODE_SVC,        0x13
.equ MODE_ABT,        0x17
.equ MODE_UND,        0x1B
.equ MODE_SYS,        0x1F
.equ MODEMASK,        0x1F
.equ NOINT,           0xC0

.equ I_BIT,           0x80
.equ F_BIT,           0x40

.equ UND_STACK_SIZE,  0x00000100
.equ SVC_STACK_SIZE,  0x00000100
.equ ABT_STACK_SIZE,  0x00000100
.equ FIQ_STACK_SIZE,  0x00000100
.equ IRQ_STACK_SIZE,  0x00000100
.equ SYS_STACK_SIZE,  0x00000100

 /*
 ***************************************
 * Interrupt vector table
 ***************************************
 */
.section .vectors
.code 32

.global system_vectors
system_vectors:
    ldr pc, _vector_reset
    ldr pc, _vector_undef
    ldr pc, _vector_swi
    ldr pc, _vector_pabt
    ldr pc, _vector_dabt
    ldr pc, _vector_resv
    ldr pc, _vector_irq
    ldr pc, _vector_fiq

_vector_reset:
    .word reset
_vector_undef:
    .word vector_undef
_vector_swi:
    .word SVC_Handler
_vector_pabt:
    .word vector_pabt
_vector_dabt:
    .word vector_dabt
_vector_resv:
    .word vector_resv
_vector_irq:
    .word vector_irq
_vector_fiq:
    .word vector_fiq

.balignl    16,0xdeadbeef


 /*
 ***************************************
 *  Stack and Heap Definitions 
 ***************************************
 */
    .section .data
    .space UND_STACK_SIZE
    .align 3
    .global und_stack_start
und_stack_start:

    .space ABT_STACK_SIZE
    .align 3
    .global abt_stack_start
abt_stack_start:

    .space FIQ_STACK_SIZE
    .align 3
    .global fiq_stack_start
fiq_stack_start:

    .space IRQ_STACK_SIZE
    .align 3
    .global irq_stack_start
irq_stack_start:

    .skip SYS_STACK_SIZE
    .align 3
    .global sys_stack_start
sys_stack_start:

    .space SVC_STACK_SIZE
    .align 3
    .global svc_stack_start
svc_stack_start:

/*
 ***************************************
 * Startup Code 
 ***************************************
 */
    .section .text
    .global reset
reset:
    /* Enter svc mode and mask interrupts */
    mrs r0, cpsr
    bic r0, r0, #MODEMASK
    orr r0, r0, #MODE_SVC|NOINT
    msr cpsr_cxsf, r0

    /* init cpu  */
    bl  cpu_init_crit
    
    /* todo:copyself to link address */
    
    /* Copy vector to the correct address */
    ldr r0, =system_vectors
    mrc p15, 0, r2, c1, c0, 0
    ands r2, r2, #(1 << 13)
    ldreq r1, =0x00000000
    ldrne r1, =0xffff0000
    ldmia r0!, {r2-r8, r10}
    stmia r1!, {r2-r8, r10}
    ldmia r0!, {r2-r8, r10}
    stmia r1!, {r2-r8, r10}

    /* turn off the watchdog */
    ldr r0, =0x01C20CB8
    mov     r1, #0x0
    str     r1, [r0]

    /* mask all IRQs source */
    ldr r1, =0xffffffff
    ldr r0, =0x01C20430
    str r1, [r0], #0x04
    str r1, [r0]
    
    /* Call low level init function */
    ldr     sp, =svc_stack_start
    ldr     r0, =rt_low_level_init
    blx     r0
    
    /* init stack */
    bl stack_setup
    
    /* clear bss */
    mov     r0, #0
    ldr     r1, =__bss_start
    ldr     r2, =__bss_end

bss_clear_loop:
    cmp     r1, r2
    strlo   r0, [r1], #4
    blo     bss_clear_loop
       
    /* call c++ constructors of global objects */
    /*
    ldr     r0, =__ctors_start__
    ldr     r1, =__ctors_end__
ctor_loop:
    cmp     r0, r1
    beq     ctor_end
    ldr     r2, [r0], #4
    stmfd   sp!, {r0-r1}
    mov     lr, pc
    bx      r2
    ldmfd   sp!, {r0-r1}
    b       ctor_loop
ctor_end:
    */
    /* start RT-Thread Kernel */
    ldr     pc, _rtthread_startup
_rtthread_startup:
    .word  rtthread_startup



cpu_init_crit:
    /* invalidate I/D caches */
    mov r0, #0
    mcr p15, 0, r0, c7, c7, 0
    mcr p15, 0, r0, c8, c7, 0

    /* disable MMU stuff and caches */
    mrc p15, 0, r0, c1, c0, 0
    bic r0, r0, #0x00002300
    bic r0, r0, #0x00000087
    orr r0, r0, #0x00000002
    orr r0, r0, #0x00001000
    mcr p15, 0, r0, c1, c0, 0

    bx lr
 
stack_setup:
    /* Setup Stack for each mode */
    mrs     r0, cpsr
    bic     r0, r0, #MODEMASK

    orr     r1, r0, #MODE_UND|NOINT
    msr     cpsr_cxsf, r1
    ldr     sp, =und_stack_start

    orr     r1, r0, #MODE_ABT|NOINT
    msr     cpsr_cxsf, r1
    ldr     sp, =abt_stack_start

    orr     r1, r0, #MODE_IRQ|NOINT
    msr     cpsr_cxsf, r1
    ldr     sp, =irq_stack_start

    orr     r1, r0, #MODE_FIQ|NOINT
    msr     cpsr_cxsf, r1
    ldr     sp, =fiq_stack_start

    orr     r1, r0, #MODE_SYS|NOINT
    msr     cpsr_cxsf,r1
    ldr     sp, =sys_stack_start

    orr     r1, r0, #MODE_SVC|NOINT
    msr     cpsr_cxsf, r1
    ldr     sp, =svc_stack_start

    bx      lr
 
/*
 ***************************************
 * exception handlers 
 ***************************************
 */
    .global rt_hw_trap_udef
    .global rt_hw_trap_swi
    .global rt_hw_trap_pabt
    .global rt_hw_trap_dabt
    .global rt_hw_trap_resv
    .global rt_hw_trap_irq
    .global rt_hw_trap_fiq
    
    .global rt_interrupt_enter
    .global rt_interrupt_leave
    .global rt_thread_switch_interrupt_flag
    .global rt_interrupt_from_thread
    .global rt_interrupt_to_thread

    /* Interrupt */
    .align  5
vector_fiq:
    stmfd   sp!,{r0-r7,lr}
    bl      rt_hw_trap_fiq
    ldmfd   sp!,{r0-r7,lr}
    subs    pc, lr, #4

    .align  5
vector_irq:
    stmfd   sp!, {r0-r12,lr}

    bl      rt_interrupt_enter
    bl      rt_hw_trap_irq
    bl      rt_interrupt_leave

    ldr     r0, =rt_thread_switch_interrupt_flag
    ldr     r1, [r0]
    cmp     r1, #1
    beq     rt_hw_context_switch_interrupt_do

    ldmfd   sp!, {r0-r12,lr}
    subs    pc,  lr, #4

rt_hw_context_switch_interrupt_do:
    mov     r1,  #0         
    str     r1,  [r0]

    mov     r1, sp          
    add     sp, sp, #4*4
    ldmfd   sp!, {r4-r12,lr}
    mrs     r0,  spsr       
    sub     r2,  lr, #4     

    msr     cpsr_c, #I_BIT|F_BIT|MODE_SVC

    stmfd   sp!, {r2}       
    stmfd   sp!, {r4-r12,lr}
    ldmfd   r1,  {r1-r4}    
    stmfd   sp!, {r1-r4}    
    stmfd   sp!, {r0}       

    ldr     r4,  =rt_interrupt_from_thread
    ldr     r5,  [r4]
    str     sp,  [r5]       

    ldr     r6,  =rt_interrupt_to_thread
    ldr     r6,  [r6]
    ldr     sp,  [r6]       

    ldmfd   sp!, {r4}       
    msr     spsr_cxsf, r4

    ldmfd   sp!, {r0-r12,lr,pc}^ 

    /* Exception */
.macro push_svc_reg
    sub     sp, sp, #17 * 4
    stmia   sp, {r0 - r12} 
    mov     r0, sp
    mrs     r6, spsr       
    str     lr, [r0, #15*4]
    str     r6, [r0, #16*4]
    str     sp, [r0, #13*4]
    str     lr, [r0, #14*4]
.endm

    .align 5
.weak SVC_Handler
SVC_Handler:
vector_swi:
    push_svc_reg
    bl      rt_hw_trap_swi
    b       .

    .align  5
vector_undef:
    push_svc_reg
    bl      rt_hw_trap_udef
    b       .

    .align  5
vector_pabt:
    push_svc_reg
    bl      rt_hw_trap_pabt
    b       .

    .align  5
vector_dabt:
    push_svc_reg
    bl      rt_hw_trap_dabt
    b       .

    .align  5
vector_resv:
    push_svc_reg
    bl      rt_hw_trap_resv
    b       .

link.lds:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)

SECTIONS
{
    . = 0x80000000;
    
    . = ALIGN(4);
    __text_start = .;
    .text :
    {
        *(.vectors)
        *(.text)
        *(.text.*)
	KEEP(*(.fini))

        /* section information for finsh shell */
        . = ALIGN(4);
        __fsymtab_start = .;
        KEEP(*(FSymTab))
        __fsymtab_end = .;
        . = ALIGN(4);
        __vsymtab_start = .;
        KEEP(*(VSymTab))
        __vsymtab_end = .;
        . = ALIGN(4);

        /* section information for modules */
        . = ALIGN(4);
        __rtmsymtab_start = .;
        KEEP(*(RTMSymTab))
        __rtmsymtab_end = .;

        /* section information for initialization */
        . = ALIGN(4);
        __rt_init_start = .;
        KEEP(*(SORT(.rti_fn*)))
        __rt_init_end = .;
    } =0
    __text_end = .;

    __rodata_start = .;
    .rodata   : { *(.rodata) *(.rodata.*) *(.eh_frame) }
    __rodata_end = .;

    . = ALIGN(4);
    .ctors :
    {
        PROVIDE(__ctors_start__ = .);
	*crtbegin.o(.ctors)
	*crtbegin?.o(.ctors)
	*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
	*(SORT(.ctors.*))
	*(.ctors)
        PROVIDE(__ctors_end__ = .);       
    }

    .ARM.extab : 
    {
	*(.ARM.extab* .gnu.linkonce.armextab.*)
    } 
    /* The .ARM.exidx section is used for C++ exception handling. */
    /* .ARM.exidx is sorted, so has to go in its own output section.  */
    __exidx_start = .;
    ARM.exidx :
    {
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)

        /* This is used by the startup in order to initialize the .data secion */
        _sidata = .;
    }
    __exidx_end = .;
    
    .dtors :
    {
        PROVIDE(__dtors_start__ = .);
        *crtbegin.o(.dtors)
 		*crtbegin?.o(.dtors)
 		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
 		*(SORT(.dtors.*))
 		*(.dtors)
        PROVIDE(__dtors_end__ = .);
    }

    __data_start = .;
    . = ALIGN(4);
    .data :
    {
        *(.data)
        *(.data.*)

		. = ALIGN(4);
		/* preinit data */
		PROVIDE_HIDDEN (__preinit_array_start = .);
		KEEP(*(.preinit_array))
		PROVIDE_HIDDEN (__preinit_array_end = .);

		. = ALIGN(4);
		/* init data */
		PROVIDE_HIDDEN (__init_array_start = .);
		KEEP(*(SORT(.init_array.*)))
		KEEP(*(.init_array))
		PROVIDE_HIDDEN (__init_array_end = .);


		. = ALIGN(4);
		/* finit data */
		PROVIDE_HIDDEN (__fini_array_start = .);
		KEEP(*(SORT(.fini_array.*)))
		KEEP(*(.fini_array))
		PROVIDE_HIDDEN (__fini_array_end = .);

		KEEP(*(.jcr*))
		. = ALIGN(4);
		/* All data end */

        *(.gnu.linkonce.d*)
    }
    __data_end = .;

    . = ALIGN(4);
    __bss_start = .;
    .bss       :
    {
    *(.bss)
    *(.bss.*)
    *(COMMON)
    . = ALIGN(4);
    }
    . = ALIGN(4);
    __bss_end = .;

    /* Stabs debugging sections.  */
    .stab 0 : { *(.stab) }
    .stabstr 0 : { *(.stabstr) }
    .stab.excl 0 : { *(.stab.excl) }
    .stab.exclstr 0 : { *(.stab.exclstr) }
    .stab.index 0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) }
    .comment 0 : { *(.comment) }

    .debug_abbrev 0 : { *(.debug_abbrev) }
    .debug_info 0 : { *(.debug_info) }
    .debug_line 0 : { *(.debug_line) }
    .debug_pubnames 0 : { *(.debug_pubnames) }
    .debug_aranges 0 : { *(.debug_aranges) }
    _end = .;
}

最近编辑记录 duckduckgo (2019-06-14 10:16:47)

离线

楼主 #109 2019-06-14 17:48:48

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

你把最终要的头信息都丢了

    .global    _start
_start:
    /* Boot head information for BROM */
    .long 0xea000016
    .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
    .long 0, 0x2000
    .byte 'S', 'P', 'L', 2
    .long 0, 0
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x28 - boot type */
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x40 - boot params, 0x5c - dram size */
而且ld文件里
.obj/source/start.o (.text)一定要放到最开始

最后还要用tools下面mksunxi对头信息处理一下

离线

#110 2019-06-14 18:07:28

Jin劲
会员
注册时间: 2018-04-06
已发帖子: 217
积分: 217

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

你把最终要的头信息都丢了

    .global    _start
_start:
    /* Boot head information for BROM */
    .long 0xea000016
    .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
    .long 0, 0x2000
    .byte 'S', 'P', 'L', 2
    .long 0, 0
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x28 - boot type */
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x40 - boot params, 0x5c - dram size */
而且ld文件里
.obj/source/start.o (.text)一定要放到最开始

最后还要用tools下面mksunxi对头信息处理一下

这么说 中断向量不放到0了? 中断向量首地址是不是要重新在cp15配置了

离线

楼主 #111 2019-06-14 18:35:39

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Jin劲 说:
达克罗德 说:

你把最终要的头信息都丢了

    .global    _start
_start:
    /* Boot head information for BROM */
    .long 0xea000016
    .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
    .long 0, 0x2000
    .byte 'S', 'P', 'L', 2
    .long 0, 0
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x28 - boot type */
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x40 - boot params, 0x5c - dram size */
而且ld文件里
.obj/source/start.o (.text)一定要放到最开始

最后还要用tools下面mksunxi对头信息处理一下

这么说 中断向量不放到0了? 中断向量首地址是不是要重新在cp15配置了

只是编译的时候放到文件的头,这样就放到flash的头,启动之后,ram或dram内容都是自己控制了。这个spl也就没用了

离线

#112 2019-06-14 21:19:42

Jin劲
会员
注册时间: 2018-04-06
已发帖子: 217
积分: 217

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
Jin劲 说:
达克罗德 说:

你把最终要的头信息都丢了

    .global    _start
_start:
    /* Boot head information for BROM */
    .long 0xea000016
    .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
    .long 0, 0x2000
    .byte 'S', 'P', 'L', 2
    .long 0, 0
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x28 - boot type */
    .long 0, 0, 0, 0, 0, 0, 0, 0    /* 0x40 - boot params, 0x5c - dram size */
而且ld文件里
.obj/source/start.o (.text)一定要放到最开始

最后还要用tools下面mksunxi对头信息处理一下

这么说 中断向量不放到0了? 中断向量首地址是不是要重新在cp15配置了

只是编译的时候放到文件的头,这样就放到flash的头,启动之后,ram或dram内容都是自己控制了。这个spl也就没用了

brom拷贝flash代码到sram,还拷贝这个头部吗?如果拷贝这个头部,是否brom拷贝到sram后,brom代码控制pc跳到0x1C(头部是0x0-0x018)?

离线

楼主 #113 2019-06-14 22:06:24

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

brom应该不拷贝这个头,我记得这个头会填上跳转地址的,所以brom知道怎么跳

离线

#114 2019-07-12 07:42:11

hzpyl
会员
注册时间: 2019-07-10
已发帖子: 80
积分: 80

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

裸奔的例子。

离线

#115 2019-07-12 14:08:36

hzpyl
会员
注册时间: 2019-07-10
已发帖子: 80
积分: 80

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

下载程序到荔枝派Nano,ok了。


编译不知道怎么用?以下是“荔枝派Licheepi nano裸机移植ZLG_GUI和3D旋转立方体”的一段

终端中输入 sudo su ,然后输入密码进入root模式,然后输入 export PATH=$PATH:/opt/gcc-linaro-5.3.1-2016.05-x86_64_arm-eabi/bin  (注意替换为自己下载的编译链的名字和放置的实际地址),既将编译链临时加入到路径中。关闭终端后再开启需要重新输入。
终端中cd 到minimal_f1c100s_framebuffer\minimal_f1c100s 文件夹下,然后输入 make ,回车开始编译。当提示什么错误时,你需要再看看交叉编译环境的搭建部分。

sudo su 在什么地方能执行?

离线

#116 2019-07-12 14:32:37

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

你说的是这个吧: https://www.cnblogs.com/zhinianzhizhan/p/10051013.html

我看了一下, 实际上应该可以不去执行 sudo su





离线

#117 2019-07-12 14:45:04

hzpyl
会员
注册时间: 2019-07-10
已发帖子: 80
积分: 80

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥,是这个网址。
这个网址的minimal_f1c100s_fb_zlggui.rar源码,其.bin能下载到 荔枝派Nano,5寸电容屏能显示。
所以,看看能不能修改程序,想编译一下。
我一直搞单片机的。Linux等没有搞过,见笑了。

export PATH=$PATH:/opt/gcc-linaro-5.3.1-2016.05-x86_64_arm-eabi/bin
这个需要在什么地方运行? 麻烦你,能截个图吗?

离线

#118 2019-07-12 15:01:42

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

export PATH=$PATH:/opt/gcc-linaro-5.3.1-2016.05-x86_64_arm-eabi/bin

这个命令的意思是, 把 /opt/gcc-linaro-5.3.1-2016.05-x86_64_arm-eabi/bin 这个路径添加到系统搜索目录,

然后可以直接执行: arm-linux-gnueabi-gcc 这种 gcc 编译命令.


你可以在命令窗口直接运行.





离线

#119 2019-07-12 15:41:51

hzpyl
会员
注册时间: 2019-07-10
已发帖子: 80
积分: 80

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

QQ20190712153930.png

是不是需要进入Linux系统,才能用这个命令?
WINDOWS 下的不能用的?

离线

#120 2019-07-12 16:03:23

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

嗯, 对的, 需要 Linux 系统。

建议先去看下 Ubuntu + 嵌入式编程入门的书籍或者视频(http://www.bilibili.com/)





离线

#121 2019-07-13 20:39:58

hzpyl
会员
注册时间: 2019-07-10
已发帖子: 80
积分: 80

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

“荔枝派Licheepi nano裸机移植ZLG_GUI和3D旋转立方体”的源程序,
已经可以,修改、编译、下载了。

Ubuntu太难学了:

export PATH=$PATH:/opt/gcc531/bin            不行
export PATH=$PATH:/home/pyl/opt/gcc531/bin        OK  (注: pyl为用户名)


Windows 下,我一般用UltraEdit写程序,
Ubuntu下,用什么?

好像,Ubuntu下,不能访问Windows下的文件啊。

最近编辑记录 hzpyl (2019-07-13 21:05:20)

离线

#122 2019-07-13 22:07:39

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

我前面说错了, 如果只编译楼主的项目或者 xboot, 可以不用 Linux

在Linux 就可以搞定

Windows 软件浮点数工具链:
https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabi/


mingw32/64:
https://download.qt.io/development_releases/prebuilt/mingw_32/


不过, 你仍然得学下命令行和Makefile等。





离线

#123 2019-07-31 18:10:29

ldqmoon
会员
注册时间: 2018-05-25
已发帖子: 16
积分: 16

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
0752ben 说:

你好,达克罗德。
我的工程替换了71楼的 “完整FB-f1c100s.c文件”,编译成功后,修改pdat->timing.pixel_clock_hz  ,情况是一样的,LCD_CLK硬件引脚就没有信号输出。

启动时PLL_VIDEO时钟只有198MHZ,而全志要求和pixel时钟的倍数必须大于等于4,实际我发现大于等于6才行。所以33Mhz以上TCON时钟工作不正常
需要把PLL video时钟设高一点
把sys_clock.c中

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004107);

时钟输出=24000000*(0x41+1)/(0x07+1)=198Mhz
改为

	write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81004103);

时钟输出=24000000*(0x41+1)/(0x03+1)=396Mhz

这时候pixel_clock_hz能设置成更高时钟了


你好,
F1C100S 裸机的话,能支持到1200x1920吗?

离线

楼主 #124 2019-07-31 20:20:25

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

不可能这么高分辨率,内存带宽还有CPU主频限制了

离线

#125 2019-08-09 15:40:57

linhuaou
会员
注册时间: 2019-08-09
已发帖子: 35
积分: 35

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

F1C100S 的RTT Keil/IAR工程怎么生成的?RTT的env下运行scons --target=iar的提示如下--
> scons --target=iar
scons: Reading SConscript files ...
Please make sure your toolchains is GNU GCC!

离线

#126 2019-09-27 13:36:52

northerntree
会员
注册时间: 2019-08-12
已发帖子: 19
积分: 19

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

你好,按照你的教程,成功在480x272的屏幕上实现了,非常感谢大神的详细教程。:D

有一个小小的建议:
MyCommon.C里,Set_Point和Get_Point里有两个野值800,对移植不太友好。


执念执战 说:
basicdev 说:

这个Demo真是666,这个是gif的吗,是不是用zlg gui模拟器导出的gif,方便分享代码吗?

想多了,这个是荔枝派屏幕显示,手机拍下来,然后软件转成GIF的,图像质量一下降,颜色都没了,不好看了。
但这个的demo我已经写了教程,在博客园,有源码。 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html   。
就是在荔枝派Nano上面移植显示的,要的话拿去。不过没有你说的GUI自己导出GIF的功能........它没有那么高级,图片显示函数都要自己写,简单的菜单等功能倒是能实现,虽然丑了点。而且我不清楚这个GUI是否免费,纯粹拿来玩。如果你想要你说的功能,得自己写或另外移植支持此功能的GUI了。另外,驱动代码就是本帖子的大神的作品,希望楼主允许。

最近编辑记录 northerntree (2019-09-27 13:37:50)

离线

#127 2019-09-28 18:28:00

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

楼主大大,我下载了这个工程,编译生成bin文件,使用sunxi-tools-win32support_f1c100s_flash工具,烧写后。
LED无法点亮,串口没有数据。请问是否因为我的SPIflash是16MB的,跟你的链接脚本对应不上呢?

离线

#128 2019-09-28 18:31:24

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动





离线

#129 2019-10-01 15:11:51

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥,这个问题解决了。
现在有另一个问题。
同样的程序,烧写进荔枝派nano可以执行。但是使用我自己画的板子,程序能够烧写进Flash里面,重启后没有任何反应。
(1)能够烧写程序进Spi  Flash
(2)重启后没有进入USB FEL模式
(3)板子布线 SPI Flash离CPU是4cm。

离线

#130 2019-10-01 15:39:27

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

上面那个问题是怎么解决的呢?

板子可以进入FEL?烧完之后串口是否有输出?





离线

#131 2019-10-02 04:33:38

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

LinjieGuo 说:

楼主大大,我下载了这个工程,编译生成bin文件,使用sunxi-tools-win32support_f1c100s_flash工具,烧写后。
LED无法点亮,串口没有数据。请问是否因为我的SPIflash是16MB的,跟你的链接脚本对应不上呢?

这个情况,使用的是荔枝派nano,更换了一个下载工具版本就可以了。

晕哥 说:

下载 sunxi-tools-win32support_f1c100s(20180329).7z,解压缩, 运行 zadig-2.3.exe

点击 Options -> List All Devices:

https://whycan.cn/files/members/3/QQ20180416161704.png

选择 WinUSB (v6.1.7600.16385)
点击 【Install WCID Driver】

https://whycan.cn/files/members/3/QQ20180416161712.png
按上面步奏装好驱动

https://whycan.cn/files/members/3/QQ20180416161717.png
装完后,sunxi-fel.exe 运行一切正常。

接下来烧录一个spi flash试一试。

最近编辑记录 LinjieGuo (2019-10-02 04:39:45)

离线

#132 2019-10-02 04:48:51

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

目前,我自己做的板子,程序烧录之后,还是无法正常执行程序。LED无法点亮,串口也没有数据输出!
板子PCB文件:F1C100S-Cube_.zip
板子SCH文件:F1C100S-Cube_SCH.zip

最近编辑记录 LinjieGuo (2019-10-02 04:54:07)

离线

#133 2019-10-02 11:56:34

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

LinjieGuo 说:

目前,我自己做的板子,程序烧录之后,还是无法正常执行程序。LED无法点亮,串口也没有数据输出!
板子PCB文件:F1C100S-Cube_.zip
板子SCH文件:F1C100S-Cube_SCH.zip

同样的程序烧录到 荔枝派 nano OK ?





离线

#134 2019-10-02 13:12:56

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥 说:
LinjieGuo 说:

目前,我自己做的板子,程序烧录之后,还是无法正常执行程序。LED无法点亮,串口也没有数据输出!
板子PCB文件:F1C100S-Cube_.zip
板子SCH文件:F1C100S-Cube_SCH.zip

同样的程序烧录到 荔枝派 nano OK ?

是的,程序烧录到荔枝派是没问题的.
能够进入USB FEL模式,并且下载程序也是没有问题。就是下载之后,无法执行。

最近编辑记录 LinjieGuo (2019-10-02 13:14:39)

离线

#135 2019-10-02 13:40:29

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

检查串口电路,usb串口模块,用sunxi-fel读出数据进行比较,

如果这些都没问题,那检查一下DRAM的电压对不对,波纹是不是太大,要不要加电容。

因为fel 并不使用 dram





离线

#136 2019-10-02 14:09:45

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥 说:

检查串口电路,usb串口模块,用sunxi-fel读出数据进行比较,

如果这些都没问题,那检查一下DRAM的电压对不对,波纹是不是太大,要不要加电容。

因为fel 并不使用 dram

禀告晕哥,刚刚检查了电路,DRAM只有2.34V电压,不对劲啊。

最近编辑记录 LinjieGuo (2019-10-02 14:11:20)

离线

#137 2019-10-02 15:29:40

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

手册是 2.5V, 你调整一下.





离线

#138 2019-10-03 04:13:03

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

晕哥 说:

手册是 2.5V, 你调整一下.

荔枝派上面的PDF原理图也是470K-160K,Vout=0.6*(1+470/160) = 2.36V。

使用万用表测试荔枝派nano上面的输出,测得电压位2.38V。
可能不是这里得问题。

最近编辑记录 LinjieGuo (2019-10-03 04:13:43)

离线

#139 2019-10-04 08:21:19

wangzhg1
会员
注册时间: 2019-08-24
已发帖子: 27
积分: 27

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

用一个ams1117-2.5。
不过,你这个问题,应该还是别的问题,

最近编辑记录 wangzhg1 (2019-10-04 08:23:02)

离线

#140 2019-10-11 20:42:29

jlau
会员
注册时间: 2018-06-11
已发帖子: 198
积分: 190.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

楼主,我编译了你的代码。可以通过烧录运行,但下载到内存执行失败。我用的下面的指令:
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000

看@晕哥 的帖子 https://whycan.cn/t_449.html  xboot是可以直接下载运行的,你这个是不能直接下载运行的吗?

最近编辑记录 jlau (2019-10-11 21:04:37)

离线

#141 2019-10-11 21:09:58

jlau
会员
注册时间: 2018-06-11
已发帖子: 198
积分: 190.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

jlau 说:

楼主,我编译了你的代码。可以通过烧录运行,但下载到内存执行失败。我用的下面的指令:
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000

看@晕哥 的帖子 https://whycan.cn/t_449.html  xboot是可以直接下载运行的,你这个是不能直接下载运行的吗?

找到方法了,新的下载运行命令变了:
sunxi-fel spl xboot.bin; sunxi-fel -p write 0x80000000 xboot.bin; sunxi-fel exec 0x80000000;

离线

#142 2019-10-31 17:46:44

gui401
会员
注册时间: 2019-10-25
已发帖子: 45
积分: 29.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

@达克罗德 你好,这个裸机工程能放到eclipse里编译吗?是否可以用eclipse来代替@晕哥的IAR demo来单步调试呢?因为IAR jilink调试需要先烧录xboot,我现在想做的是能直接进行裸机单步并且能点亮屏幕。

离线

楼主 #143 2019-10-31 18:03:14

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

gui401 说:

@达克罗德 你好,这个裸机工程能放到eclipse里编译吗?是否可以用eclipse来代替@晕哥的IAR demo来单步调试呢?因为IAR jilink调试需要先烧录xboot,我现在想做的是能直接进行裸机单步并且能点亮屏幕。

eclipse编译肯定可以。调试我不懂。现在基本就靠打印来调试

离线

#144 2019-10-31 18:16:51

gui401
会员
注册时间: 2019-10-25
已发帖子: 45
积分: 29.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:
gui401 说:

@达克罗德 你好,这个裸机工程能放到eclipse里编译吗?是否可以用eclipse来代替@晕哥的IAR demo来单步调试呢?因为IAR jilink调试需要先烧录xboot,我现在想做的是能直接进行裸机单步并且能点亮屏幕。

eclipse编译肯定可以。调试我不懂。现在基本就靠打印来调试

谢谢!能分享一下这个裸机的eclipse工程吗?我自己建的编译出一堆错误,无从下手了。

离线

楼主 #145 2019-11-01 08:16:01

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

gui401 说:
达克罗德 说:
gui401 说:

@达克罗德 你好,这个裸机工程能放到eclipse里编译吗?是否可以用eclipse来代替@晕哥的IAR demo来单步调试呢?因为IAR jilink调试需要先烧录xboot,我现在想做的是能直接进行裸机单步并且能点亮屏幕。

eclipse编译肯定可以。调试我不懂。现在基本就靠打印来调试

谢谢!能分享一下这个裸机的eclipse工程吗?我自己建的编译出一堆错误,无从下手了。

我没有工程。按理eclipse也是执行我写的Makefile就好。不要用eclipse自己的Makefile

离线

#146 2019-11-07 09:24:50

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

请问,如果我使用小容量的SPIflash,应该修改那个文件,如何修改,才能做到适配不同的spiflash呢

离线

#147 2019-11-07 13:23:37

silong1126
会员
注册时间: 2019-11-07
已发帖子: 32
积分: 32

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

这颗芯片不错。

离线

#148 2019-12-05 21:47:01

Gbear
会员
注册时间: 2019-11-15
已发帖子: 34
积分: 53

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

执念执战 说:

想多了,这个是荔枝派屏幕显示,手机拍下来,然后软件转成GIF的,图像质量一下降,颜色都没了,不好看了。
但这个的demo我已经写了教程,在博客园,有源码。 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html   。
就是在荔枝派Nano上面移植显示的,要的话拿去。不过没有你说的GUI自己导出GIF的功能........它没有那么高级,图片显示函数都要自己写,简单的菜单等功能倒是能实现,虽然丑了点。而且我不清楚这个GUI是否免费,纯粹拿来玩。如果你想要你说的功能,得自己写或另外移植支持此功能的GUI了。另外,驱动代码就是本帖子的大神的作品,希望楼主允许。

大神,小弟新手一枚,想求您共享一下您 https://www.cnblogs.com/zhinianzhizhan/p/10051013.html 中的《基于荔枝派Nano的Linux新手学习笔记》这个资料你博客中的QQ群里面已经没有这个可以下载了,感觉这个资料对我这样的新手指导意义非凡。在此先谢谢啦。

离线

#149 2019-12-10 08:35:41

gui401
会员
注册时间: 2019-10-25
已发帖子: 45
积分: 29.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

你好@达克罗德  我用这个裸机工程在while(1)里通过寄存器翻转某个IO,示波器测频率只能达到3MHz,有办法提高吗?while里就read32和write32语句写0写1都执行一次读写,按道理不应该这么慢啊

离线

楼主 #150 2019-12-10 10:47:37

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

gui401 说:

你好@达克罗德  我用这个裸机工程在while(1)里通过寄存器翻转某个IO,示波器测频率只能达到3MHz,有办法提高吗?while里就read32和write32语句写0写1都执行一次读写,按道理不应该这么慢啊

没试过,我估计芯片设计决定的吧,记得有人说过,这种mpu翻转io还不如单片机的

离线

#151 2019-12-10 10:49:37

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

没试过,我估计芯片设计决定的吧,记得有人说过,这种mpu翻转io还不如单片机的

这个芯片非工业芯片,主要是音视频方案,驱动一些外设可能要借助一个小小的单片机,用串口/SPI通讯。

离线

#152 2019-12-10 10:50:12

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

没试过,我估计芯片设计决定的吧,记得有人说过,这种mpu翻转io还不如单片机的

达克罗德大哥,请问,如果我使用小容量的SPIflash,应该修改那个文件,如何修改,才能做到适配不同的spiflash呢

离线

#153 2019-12-10 11:28:04

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

gui401 说:

你好@达克罗德  我用这个裸机工程在while(1)里通过寄存器翻转某个IO,示波器测频率只能达到3MHz,有办法提高吗?while里就read32和write32语句写0写1都执行一次读写,按道理不应该这么慢啊

确实就是这么慢。如果你翻转时,同一组的其他IO口的状态是确定的,那可以省略一次read32,直接写值,速度能到6.xMHz。

离线

#154 2019-12-18 10:46:51

iamkylin
会员
注册时间: 2019-10-09
已发帖子: 16
积分: 4

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

学习ing, 多谢诸位分享!

离线

#155 2020-01-01 20:59:43

hefanghua
会员
注册时间: 2020-01-01
已发帖子: 1
积分: 1

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

太好了,可以当MCU用了,谢谢分享。请教一下:nano最大支持多大的分辨率?想把笔记本的屏幕用上。

离线

#156 2020-01-07 11:13:57

thwin520
会员
注册时间: 2019-11-01
已发帖子: 15
积分: 15

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

谢谢,不知道怎么弄成可以在keil上编译后可以直接下载到spi flash直接运行的,苦恼。

离线

#157 2020-01-07 11:15:01

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

thwin520 说:

谢谢,不知道怎么弄成可以在keil上编译后可以直接下载到spi flash直接运行的,苦恼。

keil上面有个load模式,自己写个bat脚本,命名位load.bat,就可以了

离线

#158 2020-02-16 22:10:28

ghosoft
会员
注册时间: 2020-02-16
已发帖子: 17
积分: 6.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

不可能这么高分辨率,内存带宽还有CPU主频限制了

不在乎帧数,  慢点没关系呢?

离线

#159 2020-03-13 18:00:14

mcucool
会员
注册时间: 2019-10-15
已发帖子: 9
积分: 9

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

谢谢分享,学习了

离线

#160 2020-03-15 00:36:07

1017078605@qq.com
会员
注册时间: 2020-01-18
已发帖子: 3
积分: 3

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

root@yu-virtual-machine:/home/yu/lichee/lvgl_f1c100s# make
arm-eabi-objcopy -v -O binary build/firmware.elf build/firmware.bin
copy from `build/firmware.elf' [elf32-littlearm] to `build/firmware.bin' [binary]
Make header information for brom booting
tools/mksunxi/mksunxi: 1: tools/mksunxi/mksunxi: Syntax error: ")" unexpected
Makefile:140: recipe for target 'build/firmware.bin' failed
make: *** [build/firmware.bin] Error 2

各位大佬, 我用这个编译gcc-linaro-5.3.1-2016.05-i686_arm-eabi.tar
出现了以上的错误,请教下是什么问题?

离线

#161 2020-03-15 01:31:09

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

1017078605@qq.com 说:

root@yu-virtual-machine:/home/yu/lichee/lvgl_f1c100s# make
arm-eabi-objcopy -v -O binary build/firmware.elf build/firmware.bin
copy from `build/firmware.elf' [elf32-littlearm] to `build/firmware.bin' [binary]
Make header information for brom booting
tools/mksunxi/mksunxi: 1: tools/mksunxi/mksunxi: Syntax error: ")" unexpected
Makefile:140: recipe for target 'build/firmware.bin' failed
make: *** [build/firmware.bin] Error 2

各位大佬, 我用这个编译gcc-linaro-5.3.1-2016.05-i686_arm-eabi.tar
出现了以上的错误,请教下是什么问题?

makefile贴一下,多写了个括号吧?

离线

#162 2020-03-15 22:25:13

1017078605@qq.com
会员
注册时间: 2020-01-18
已发帖子: 3
积分: 3

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

大佬,
这是原代码:
lvgl_f1c100s.zip

大佬帮忙看下,好像是 140行这里错了 @$(MKSUNXI) $@,但是我新手看不懂

这是makefile的文件:

#
# Machine makefile
#

.PHONY:clean
.PHONY:write
.PHONY:mktool
.PHONY:dump

BUILD ?= build
RM = rm
ECHO = @echo
CP = cp
MKDIR = mkdir
SED = sed
PYTHON = python

CROSS_COMPILE = arm-eabi-
CC	          = $(CROSS_COMPILE)gcc
AS	          = $(CROSS_COMPILE)gcc -x assembler-with-cpp
LD	          = $(CROSS_COMPILE)ld
OBJCOPY	      = $(CROSS_COMPILE)objcopy
OBJDUMP       = $(CROSS_COMPILE)objdump
SIZE 		  = $(CROSS_COMPILE)size

CSRCS = \
	main.c \
	machine/sys-clock.c \
	machine/sys-dram.c \
	machine/sys-uart.c \
	machine/sys-copyself.c \
	machine/sys-spi-flash.c \
	machine/sys-mmu.c \
	machine/exception.c \

# drivers
CSRCS += \
	driver/gpio-f1c100s.c \
	driver/pwm-f1c100s.c \
	driver/reset-f1c100s.c \
	lib/malloc.c \
	lib/dma.c \
	driver/clk-f1c100s-pll.c \
	driver/fb-f1c100s.c \
	arch/arm32/lib/strcpy.c \
	arch/arm32/lib/strlen.c \

SRC_ASM = machine/start.S \
		  arch/arm32/lib/memcmp.S \
		  arch/arm32/lib/memcpy.S \
		arch/arm32/lib/memmove.S \
		arch/arm32/lib/memset.S \
		arch/arm32/lib/setjmp.S \
		arch/arm32/lib/strcmp.S \
		arch/arm32/lib/strncmp.S \
		
		  
#LIBRARIES
include ./lvgl/lv_core/lv_core.mk
include ./lvgl/lv_hal/lv_hal.mk
include ./lvgl/lv_objx/lv_objx.mk
include ./lvgl/lv_fonts/lv_fonts.mk
include ./lvgl/lv_misc/lv_misc.mk
include ./lvgl/lv_themes/lv_themes.mk
include ./lvgl/lv_draw/lv_draw.mk

#DRIVERS
#include ./lv_drivers/display/display.mk
#include ./lv_drivers/indev/indev.mk

#EXAMPLES
include ./lv_examples/lv_tests/lv_test_obj/lv_test_obj.mk
include ./lv_examples/lv_tests/lv_test_stress/lv_test_stress.mk
include ./lv_examples/lv_tests/lv_test_theme/lv_test_theme.mk
include ./lv_examples/lv_tests/lv_test_group/lv_test_group.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_bar/lv_test_bar.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_btn/lv_test_btn.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_btnm/lv_test_btnm.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_cb/lv_test_cb.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_chart/lv_test_chart.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_cont/lv_test_cont.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_ddlist/lv_test_ddlist.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_gauge/lv_test_gauge.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_img/lv_test_img.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_kb/lv_test_kb.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_label/lv_test_label.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_led/lv_test_led.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_line/lv_test_line.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_list/lv_test_list.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_lmeter/lv_test_lmeter.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_mbox/lv_test_mbox.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_page/lv_test_page.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_roller/lv_test_roller.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_slider/lv_test_slider.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_sw/lv_test_sw.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_ta/lv_test_ta.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_tabview/lv_test_tabview.mk
include ./lv_examples/lv_tests/lv_test_objx/lv_test_win/lv_test_win.mk

include ./lv_examples/lv_apps/benchmark/benchmark.mk
include ./lv_examples/lv_apps/demo/demo.mk
include ./lv_examples/lv_apps/sysmon/sysmon.mk
include ./lv_examples/lv_apps/terminal/terminal.mk
include ./lv_examples/lv_apps/tpcal/tpcal.mk

include ./lv_examples/lv_tutorial/1_hello_world/lv_tutorial_hello_world.mk
include ./lv_examples/lv_tutorial/2_objects/lv_tutorial_objects.mk
include ./lv_examples/lv_tutorial/3_styles/lv_tutorial_styles.mk
include ./lv_examples/lv_tutorial/4_themes/lv_tutorial_themes.mk
include ./lv_examples/lv_tutorial/5_antialiasing/lv_tutorial_antialiasing.mk
include ./lv_examples/lv_tutorial/6_images/lv_tutorial_images.mk
include ./lv_examples/lv_tutorial/7_fonts/lv_tutorial_fonts.mk
include ./lv_examples/lv_tutorial/8_animations/lv_tutorial_animations.mk
include ./lv_examples/lv_tutorial/9_responsive/lv_tutorial_responsive.mk

OBJ = $(addprefix $(BUILD)/, $(CSRCS:.c=.o)) $(addprefix $(BUILD)/, $(SRC_ASM:.S=.o))

DEFINES		+= -D__ARM32_ARCH__=5 -D__ARM926EJS__

ASFLAGS		:= -g -ggdb -Wall -O3 -ffreestanding -std=gnu99 $(DEFINES)
CFLAGS		:= -g -ggdb -Wall -O3 -ffreestanding -std=gnu99 $(DEFINES)
CXXFLAGS	:= -g -ggdb -Wall -O3 -ffreestanding -std=gnu99 $(DEFINES)
LDFLAGS		:= -T f1c100s.ld -nostdlib
MCFLAGS		:= -march=armv5te -mtune=arm926ej-s -mfloat-abi=soft -marm -mno-thumb-interwork

LIBDIRS		:=
LIBS 		:= -lgcc
INCDIRS		:= -Imachine/include -Iarch/arm32/include -I.
SRCDIRS		:=


INCDIRS		+= -Idriver/include -Ilib

# $(BUILD)/firmware_boot.bin:$(BUILD)/firmware.bin
# 	./tools/mksunxiboot/mksunxiboot $^ $@

$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
	$(OBJCOPY) -v -O binary $^ $@
	@echo Make header information for brom booting
	@$(MKSUNXI) $@

$(BUILD)/firmware.elf: $(OBJ)
	$(ECHO) "LINK $@"
	$(CC) $(LDFLAGS) -Wl,--cref,-Map=$@.map -o $@ $^ $(LIBS)
	$(SIZE) $@


$(BUILD)/%.o: %.S
	$(ECHO) "AS $<"
	$(AS) $(MCFLAGS) $(ASFLAGS) -c -o $@ $<
	
$(BUILD)/%.o: %.s
	$(ECHO) "AS $<"
	$(AS) $(MCFLAGS) $(CFLAGS) -o $@ $<

define compile_c
$(ECHO) "CC $<"
$(CC) $(INCDIRS) $(MCFLAGS) $(CFLAGS) -c -MD -o $@ $<
@# The following fixes the dependency file.
@# See http://make.paulandlesley.org/autodep.html for details.
@# Regex adjusted from the above to play better with Windows paths, etc.
@$(CP) $(@:.o=.d) $(@:.o=.P); \
  $(SED) -e 's/#.*//' -e 's/^.*:  *//' -e 's/ *\\$$//' \
      -e '/^$$/ d' -e 's/$$/ :/' < $(@:.o=.d) >> $(@:.o=.P); \
  $(RM) -f $(@:.o=.d)
endef

$(BUILD)/%.o: %.c
	$(call compile_c)

OBJ_DIRS = $(sort $(dir $(OBJ)))
$(OBJ): | $(OBJ_DIRS)
$(OBJ_DIRS):
	$(MKDIR) -p $@

clean:
	find . -name "*.o"  | xargs rm -f
	find . -name "*.bin"  | xargs rm -f
	find . -name "*.elf"  | xargs rm -f
	find . -name "*.P"  | xargs rm -f
#rm -rf *.o *.bin 
#rm -rf $(BUILD)/*.o $(BUILD)/*.bin

write:
	sudo sunxi-fel -p spiflash-write 0 $(BUILD)/firmware.bin

mktool:
	cd tools/mksunxiboot && make
	cd tools/mksunxi && make

dump:
	$(OBJDUMP) -S myboot.o | less

MKSUNXI		:= tools/mksunxi/mksunxi

mkboot:
	@echo Make header information for brom booting
	@$(MKSUNXI) $(BUILD)/firmware.bin 

离线

#163 2020-03-20 21:51:53

1017078605@qq.com
会员
注册时间: 2020-01-18
已发帖子: 3
积分: 3

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Quotation 说:

makefile贴一下,多写了个括号吧?

找到原因了 ,tools/mksunxi/mksunxi目录下的mksunxi要用新的编译链编译下。

离线

#164 2020-04-02 15:37:40

XZHDJH
会员
注册时间: 2020-01-18
已发帖子: 37
积分: 37

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

mark

离线

#165 2020-04-23 00:12:34

piotr_go
会员
注册时间: 2020-04-21
已发帖子: 7
积分: 7

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Nice work.

What "pdat->pwidth" and "pdat->pheight" are? What is "physical- width/height" ?

Is there a bare metal AUDIO or SD card driver?

离线

#166 2020-04-23 16:12:44

wukenaihe
会员
注册时间: 2020-04-07
已发帖子: 11
积分: 6

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

各位大神,有哪位知道楼主发的这个例子把framebuffer的颜色格式由原来的ARGB32格式改成RGB565格式的吗?具体要改哪些地方?

离线

楼主 #167 2020-04-24 09:35:48

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

piotr_go 说:

Nice work.

What "pdat->pwidth" and "pdat->pheight" are? What is "physical- width/height" ?

Is there a bare metal AUDIO or SD card driver?

it is LCD physical size. they are not used, you don't need care about it.

离线

#168 2020-04-24 10:41:14

龙折翼
会员
注册时间: 2020-04-24
已发帖子: 9
积分: 9

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

这个裸奔程序不错,感谢大神的贡献

离线

#169 2020-04-24 13:44:50

tam2907
会员
注册时间: 2020-03-29
已发帖子: 45
积分: 59.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

芯片不错,就是参考资料太有限了,。

离线

#170 2020-04-24 17:47:42

tam2907
会员
注册时间: 2020-03-29
已发帖子: 45
积分: 59.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

代码看起好简洁,逛了几天论坛,今天已下单TINY200板子。

离线

#171 2020-04-26 17:37:05

wukenaihe
会员
注册时间: 2020-04-07
已发帖子: 11
积分: 6

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

大佬你好,xboot支持F1C100S的硬件解码jpg以及音视频的播放吗?

离线

楼主 #172 2020-04-26 18:18:06

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

wukenaihe 说:

大佬你好,xboot支持F1C100S的硬件解码jpg以及音视频的播放吗?

据我所知是不支持的,RTT好像有网友实现了支持

离线

#173 2020-04-28 12:04:02

1035036848
会员
注册时间: 2020-04-28
已发帖子: 12
积分: 12

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

希望我可以快点能下载试试你的代码。。。

离线

#174 2020-04-28 12:13:14

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

1035036848 说:

希望我可以快点能下载试试你的代码。。。

麻烦找几个帖子后面认真回复,随意post帖子系统一会一会自动清除积分。





离线

#175 2020-04-29 21:36:33

1035036848
会员
注册时间: 2020-04-28
已发帖子: 12
积分: 12

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

我有两个屏,一个屏正常红色,一个屏不是。
_20200429213548.jpg_20200429213538.jpg

离线

#176 2020-04-29 21:47:20

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

两个屏幕规格一样吗?  看下屏幕是 SYNC/DE 模式, 与开发板/代码是否一致?





离线

#177 2020-04-30 08:27:35

1035036848
会员
注册时间: 2020-04-28
已发帖子: 12
积分: 12

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

哇酷小二 说:

两个屏幕规格一样吗?  看下屏幕是 SYNC/DE 模式, 与开发板/代码是否一致?

肯定是不一样的。不行的那一块,我也不知道是什么规格什么参数。只能慢慢试吧,有哪些参数建议调整的吗

离线

#178 2020-04-30 11:41:06

1035036848
会员
注册时间: 2020-04-28
已发帖子: 12
积分: 12

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

哇酷小二 说:

两个屏幕规格一样吗?  看下屏幕是 SYNC/DE 模式, 与开发板/代码是否一致?

请问,这里的驱动方式,是串行的rgb通讯还是并行的?

离线

#179 2020-04-30 11:42:42

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

1035036848 说:

请问,这里的驱动方式,是串行的rgb通讯还是并行的?

并行的,R/G/B一起发的。





离线

#180 2020-04-30 11:58:24

1035036848
会员
注册时间: 2020-04-28
已发帖子: 12
积分: 12

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

哇酷小二 说:

并行的,R/G/B一起发的。

我怀疑我的是串行的。程序发送的是红色,我的那个屏是白色。然后我调整大小的时候,它是会跟着改变大小的。就是只有颜色不对。当然,大小也会小很多。比如480*272的,是这样的。_20200430115755.jpg

离线

#181 2020-04-30 12:11:58

1035036848
会员
注册时间: 2020-04-28
已发帖子: 12
积分: 12

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

验证了,真的是。

我修改代码如下:
main函数里面的
_20200430121244.png
然后结果这样
_20200430120726.jpg

最近编辑记录 1035036848 (2020-04-30 12:13:17)

离线

#182 2020-05-18 09:51:23

jiafulu
会员
注册时间: 2020-05-18
已发帖子: 3
积分: 3

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

非常感谢  已下载,编译通过了 F1C100s 正常运行

离线

#183 2020-05-27 17:55:40

huxiao45
会员
注册时间: 2019-11-04
已发帖子: 10
积分: 4.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

非常感谢,先下来看看,晚点再回来回复,不知道跟其它裸奔的有什么区别

离线

#184 2020-06-16 18:31:29

Sa_t_an
会员
注册时间: 2020-06-16
已发帖子: 7
积分: 2

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

Great!!!

离线

#185 2020-06-17 12:15:42

tfx
会员
注册时间: 2020-06-17
已发帖子: 0
积分: 0

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

感谢大神的分享,现在刚开始学习F1c100s

离线

#186 2020-06-19 16:36:15

longer321
会员
注册时间: 2020-06-19
已发帖子: 3
积分: 3

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

这个整的可以跑起来吗?我试一下!嘻嘻

离线

#187 2020-06-19 17:48:09

lilianfu
会员
注册时间: 2020-06-06
已发帖子: 3
积分: 3

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

裸跑操作显示,太厉害了

离线

#188 2020-06-30 15:07:12

Nicolaxu
会员
注册时间: 2020-06-21
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

有点厉害,前来膜拜以下,最近也在弄F1C100S,学习下

离线

#189 2020-07-06 17:32:25

hnllb
会员
注册时间: 2020-07-06
已发帖子: 3
积分: 3

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

神仙到底在哪里,看看这里就知道了。

离线

#190 2020-07-14 12:49:59

fovaffedde-6612
会员
注册时间: 2020-07-14
已发帖子: 11
积分: 11

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

裸机可以跑硬件解码H264的视频么?还是只有软解?貌似软解jpg然后显示没问题,但是播视频就没试过。

离线

#191 2020-07-16 13:21:07

abbottn
会员
注册时间: 2020-07-16
已发帖子: 6
积分: 4.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

确实很精简了,感谢楼主添砖加瓦.

离线

#192 2020-07-16 13:36:55

abbottn
会员
注册时间: 2020-07-16
已发帖子: 6
积分: 4.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

正要评估这款芯片,不知道裸奔效果如何,做串口屏的联系我啊 qq:2477550

离线

#193 2020-07-16 14:35:03

AYUMI7
会员
注册时间: 2018-11-24
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

都是大佬     不知道我的板子啥时候才能玩得动

离线

#194 2020-07-23 10:19:51

hughhuang
会员
注册时间: 2020-07-23
已发帖子: 9
积分: 9

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

感谢楼主分享,希望能有很大的帮助,早日向楼主看齐。

离线

#195 2020-07-29 20:47:01

Nicolaxu
会员
注册时间: 2020-06-21
已发帖子: 5
积分: 5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

达克罗德 说:

framebuffer驱动我还是花了几个晚上功夫的,为了不用xboot的dts还有driver架构,把reset,clock等好几个模块都改了一遍。如果再来一遍V3S的话,应该容易很多,因为两芯片同出一源代码很类似。

不过不打算继续自己搞裸奔了,可重用性太低,累死人。准备直接用xboot或者RTOS这样的平台来开发后续产品,开发驱动有标准,代码容易复用,功能也更强大。比如说切换V3S和F1C100S对xboot来说非常简单,上层完全不用改

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

达克罗德您好,请问如果想要实现framebuffer 水平翻转,有可能实现吗,具体要怎么弄呢?

离线

#196 2020-07-31 17:27:03

f_Endman
会员
注册时间: 2020-04-16
已发帖子: 55
积分: 137

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

今天刚到手荔枝派,自己仿照mksunxiboot写了一个下载到sd卡的程序,但BROM总是给我引导到SPIFlash自带的uboot里面。。头疼了,回复一下拿个下载权限,看看大佬是怎么写的

离线

#197 2020-09-04 08:36:33

如意如意
会员
注册时间: 2020-07-10
已发帖子: 36
积分: 33

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

请教诸位大佬,要将ARGB32格式改为RGB565格式,除了要将render->format改为PIXEL_FORMAT_RGB16_565,还需要做那些改动?
   

        //render->format = PIXEL_FORMAT_ARGB32;
	render->format = PIXEL_FORMAT_RGB16_565;

离线

#198 2021-01-18 12:33:14

a06041114
会员
注册时间: 2021-01-18
已发帖子: 9
积分: 9

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

在V3S和F1C100S间摇摆,不知道哪个好

离线

#199 2021-01-18 14:06:40

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 565
积分: 570
个人网站

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

a06041114 说:

在V3S和F1C100S间摇摆,不知道哪个好

小朋友才做选择,成年人都要不就好了。

离线

#200 2021-07-24 15:28:49

Aaudiolala
会员
注册时间: 2021-07-03
已发帖子: 1
积分: 0.5

Re: F1C100S裸奔framebuffer+PWM+GPIO驱动

该评论内容与本帖子无关,鼓励各位坑友积极发言讨论与帖子有关的内容!

离线

  • 不通过:与技术无关

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn