您尚未登录。

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

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

基于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
已发帖子: 42
积分: 45

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
已发帖子: 42
积分: 45

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
已发帖子: 42
积分: 45

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

1.jpg
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
已发帖子: 42
积分: 45

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

uint32_t tcon0_dclk;            /* 0x44 */
2.jpg
根据:  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
已发帖子: 42
积分: 45

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
已发帖子: 42
积分: 45

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

3.jpg找到频的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
已发帖子: 42
积分: 45

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
已发帖子: 42
积分: 45

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

液晶屏幕抖动:IMG_20220707_093750.jpg
*.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+4*LayerNum, pdat->width*16);
///*如果       line_per_pixel=18*/

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

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

离线

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

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

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
已发帖子: 42
积分: 45

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));
4.jpg
神奇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
已发帖子: 42
积分: 45

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)[y*lcd_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
已发帖子: 42
积分: 45

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
已发帖子: 42
积分: 45

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))

离线

页脚

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

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