您尚未登录。

楼主 # 2022-06-14 17:56:30

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

基于f1c200s运行th_thread的学习记录.

首先根据LinjieGuo的帖子 https://whycan.com/t_7659.html 做移植.
1,从本贴 https://whycan.com/t_3958.html 下载[allwinner_tina_prj_v1.zip]
2.解压 [allwinner_tina_prj_v1.zip] ,到 rt-thread-gitee_master\bsp目录下。
3.修改main.c去掉uart2部分,注释掉//Sys_Servs_Init();//Services
4.打开ENV,转换目录到rt-thread-gitee_master\bsp目录下输入menuconfig。去掉SDIO支持,我不用SD卡.
5编译RTT,输入scons。得到未经修饰的rtthread.bin
6执行脚本文件,[flashtospi.bat],这个脚本用于修饰rtthread.bin,增加魔术头,并下载bin文件到flash中。

最近编辑记录 nice (2022-06-15 16:33:08)

离线

楼主 #1 2022-06-15 09:28:36

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

接入uart1接口,上电显示:
\ | /

  • RT - Thread Operating System
    / | \ 4.1.1 build Jun 15 2022 09:23:43
    2006 - 2022 Copyright by RT-Thread team
    [32m[I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.[0m
    [32m[I/SFUD] gd25qxx flash device is initialize success.[0m
    [32m[I/SFUD] Probe SPI flash gd25qxx by SPI device spi00 success.[0m
    Start...
    periph_get_pll_clk:600000000
    cpu_get_clk:408000000
    ahb_get_clk:200000000
    apb_get_clk:100000000
    [Thread]GUIThread Created.
    msh />

离线

楼主 #2 2022-06-16 16:25:47

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

1,更改LV的像素设置
2.更改drv_fb.c里的像素时钟设置
关于 :pixel_clock_hz
static void f1c100s_tcon_set_mode(lcd_cfg_Struct * pdat)
val = f1c100s_tcon_clk_get_rate() / pdat->pixel_clock_hz;

write32((uint32_t)&tcon->tcon0_dclk, (0xf << 28) | (val << 0));
struct f1c100s_tcon_reg_t tcon = (struct f1c100s_tcon_reg_t )F1C100S_TCON_BASE;
#define F1C100S_TCON_BASE (0x01c0c000)

离线

楼主 #3 2022-06-16 16:30:38

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.


Allwinner_F1C200s_User_Manual_V1.1.pdf

最近编辑记录 nice (2022-06-16 16:32:43)

离线

楼主 #4 2022-06-16 16:52:54

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

uint32_t tcon0_dclk; / 0x44 /

根据: write32((uint32_t)&tcon->tcon0_dclk, (0xf << 28) | (val << 0));
lclk_en:4'hf

DCLKDIV: dot clock divider
Tdclk = Tsclk * DCLKDIV
Note:
1.if dclk1&dclk2 used,5<DCLKDIV <96
2.if dclk only,DCLKDIV >=4 || DCLKDIV=2

f1c100s_tcon_clk_get_rate()
-> video_get_pll_clk()
-> PLL_VIDEO_CTRL_REG 0x0010 PLL_VIDEO Control Register 查看倍频情况.
这边是获取了,查一下,设置部分找到:
void rt_hw_board_init(void)
{

video_set_pll_clk(198000000);

最近编辑记录 nice (2022-06-16 17:03:22)

离线

楼主 #5 2022-06-16 17:33:10

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

感谢:达克罗德和staunchheart
请参考https://whycan.cn/t_2135.html
同时参考https://whycan.cn/t_3611.html
RTT下sys-clock.c
write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL,0x81004103);// 0x81004107);//

离线

楼主 #6 2022-06-17 09:46:57

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

找到频的dclk,对应pixel_clock_hz改之/

void sys_clock_init(void)
->write32(F1C100S_CCU_BASE + CCU_PLL_VIDEO_CTRL, 0x81003b03);

void rt_hw_board_init(void)
->video_set_pll_clk(360000000);//(198000000);
时钟输出=24000000*(0x3b+1)/(0x03+1)=360Mhz
drv_fb.c
->lcd_cfg_Struct lcd_cfg={
.pixel_clock_hz=60000000, //9210200,

最近编辑记录 nice (2022-06-17 10:29:25)

离线

楼主 #7 2022-06-30 16:41:43

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

.pixel_clock_hz=52M设置方法:
52*6=312M
时钟24*x/y=312M ->x/y=13
若y=4,x=52, -> 0x03 ,0x33 ->24000000*(0x33+1)/(0x03+1) ->0x81003303

离线

楼主 #8 2022-07-07 09:42:21

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

液晶屏幕抖动:
*.s
->
rtthread_startup()
->
rt_application_init()
->
main_thread_entry()
->
rt_components_init()
main()

rt_components_init()->
INIT_DEVICE_EXPORT(board_lcd_init);
|->INIT_EXPORT(fn, "3")

const char __rti_##fn##_name[] = #fn; \
RT_USED const struct rt_init_desc __rt_init_desc_##fn RT_SECTION(".rti_fn." level) = \
{ __rti_##fn##_name, fn};

const char __rti_board_lcd_init_name[] = "board_lcd_init";
RT_USED const struct rt_init_desc
__rt_init_desc_board_lcd_init RT_SECTION(".rti_fn." "3") =
{ __rti_board_lcd_init_name, board_lcd_init};

///如果 line_per_pixel=16/
// write32((uint32_t)&debe->layer0_attr1_ctrl+4*LayerNum, 0x05 << 8);
// write32((uint32_t)&debe->layer0_stride+4LayerNum, pdat->width16);
///如果 line_per_pixel=18/

write32((uint32_t)&debe->layer0_attr1_ctrl+4*LayerNum, 0x09 << 8);
write32((uint32_t)&debe->layer0_stride+4LayerNum, pdat->width32);

最近编辑记录 nice (2022-07-07 13:36:18)

离线

楼主 #9 2022-07-07 13:35:40

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

还不行,怎么回事,通过对比发现.clk_divider_set_rate中参数clk_divider_set_rate(0x01c2010c, 4, 0, true, /24000000 /f1c100s_tcon_clk_get_rate(), 312000000);
千万另用24M,要用:f1c100s_tcon_clk_get_rate()

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(), 312000000);
}
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(), 312000000);
}

最近编辑记录 nice (2022-07-07 13:37:00)

离线

楼主 #10 2022-07-07 14:38:28

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

颜色反了, write32((uint32_t)&debe->layer0_attr1_ctrl+4*LayerNum, 0x09 << 8);改成
write32((uint32_t)&debe->layer0_attr1_ctrl+4*LayerNum, 0x09 << 8 | (1 << 2));

神奇lvgl还是反色,

运行一段时间图象抖动,加大# define LV_MEM_SIZE (64U * 1024U)

最近编辑记录 nice (2022-07-07 14:52:47)

离线

楼主 #11 2022-07-07 18:39:08

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

半屏原因,把下面代码中的(uint16_t)改成(uint32_t)

static void disp_flush(lv_disp_drv_t disp_drv, const lv_area_t area, lv_color_t * color_p)
{
int32_t x;
int32_t y;
for(y = area->y1; y <= area->y2; y++) {
for(x = area->x1; x <= area->x2; x++) {
((uint32_t)lcd_layer0.vram)[ylcd_layer0.width+x]=color_p->full;
color_p++;
}
}
lv_disp_flush_ready(disp_drv);
}

离线

楼主 #12 2022-07-16 17:14:40

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

根据LinjieGuo的帖子 https://whycan.com/t_7659.html 做加上文件系统.
根据windoufu的帖子 https://whycan.com/t_6453.html 加上模拟u盘功能,

打包附件如下
rt_thread.7z

最近编辑记录 nice (2022-07-16 17:15:31)

离线

楼主 #13 2022-11-02 15:34:51

nice
会员
注册时间: 2021-01-02
已发帖子: 43
积分: 46

Re: 基于f1c200s运行th_thread的学习记录.

在u-boot中颜色反色了,方法\u-boot\arch\arm\include\asm\arch-sunxi\display.h
254行#define SUNXI_DE_BE_LAYER_ATTR1_FMT_XRGB8888 (0x09 << ))
改成#define SUNXI_DE_BE_LAYER_ATTR1_FMT_XRGB8888 ((0x09 << 8)| (1 << 2))

离线

#14 2024-08-17 22:38:46

肉蛋葱鸡
会员
注册时间: 2024-08-17
已发帖子: 2
积分: 2

Re: 基于f1c200s运行th_thread的学习记录.

请问RT-Thread studio集成开发环境里面可以用menuconfig修改配置吗

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发