请选择 进入手机版 | 继续访问电脑版
查看: 2902|回复: 2

[原创] LPC54628 UI开发 2-emwin移植

[复制链接]
  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
    发表于 2020-2-18 18:43:50 | 显示全部楼层 |阅读模式
    本帖最后由 day_day 于 2020-2-18 20:43 编辑

    (一)emwin
    emwin 基本是目前主流的嵌入式界面解决方案,例程也是默认给这个方案。
    其余还有比如gfx、rtt自带图形、最近迅速崛起的guilite
    但最方便的还是传统的emwin,依据官方例程,可以迅速地在自己的工程内模块化添加emwin,而非强耦合扰乱工程秩序。

    驱动LCD的帖子见:
    驱动LCD但本次移植不使用图形界面生成的驱动代码,因为图形界面的配置有点局限,无法满足emwin的需要,生成的文件是只读的,修改会破坏图形界面配置文件的再配置功能

    (二)移植
    1-添加接口文件
    接口文件是笔者个人的说话,指代emwin与特定mcu驱动之间交互的文件。
    这里可以直接采用官方已经移植好的文件,找一个emwin的例程,把emwin_support的头文件和源文件一起加入工程。


    2-添加触控驱动
    添加fsl_ft5406的头文件和源文件


    3-main函数初始化时添加驱动函数
    1.     BOARD_InitLCDPins();
    2.     BOARD_InitACCELPins();
    3.     BOARD_InitSDRAMPins();

    4.     BOARD_InitSDRAM();
    5.     APP_LCDC_Init();
    复制代码


    上面的三个函数是引脚初始化
    第一个是驱动LCD的引脚
    第二个是驱动触控芯片的引脚,虽然函数本来是针对加速度传感器的,但加速度传感器与触控芯片挂在同一条i2c总线上。
    第三个是驱动SDRAM的引脚,这个是必须,片上sram虽然大,但面对emwin这种吃内存的大户也吃不消,更何况24bit的bpp已经溢出了300%


    注意,这个时候我们已经不使用图形界面配置的那个LCD驱动了,需要把图形界面配置的驱动去掉,因为图形界面似乎没办法把缓存指向片外的SDRAM。
    APP_LCDC_Init 函数和图形界面配置出来的初始化函数区别仅在于:
    1. lcdConfig.upperPanelAddr = VRAM_ADDR;
    复制代码


    VRAM_ADDR 是地址 ((0xa0000000) + 0x50000)
    转换一下就会发现已经溢出了220K的片内SRAM,这也是为什么需要初始化SDRAM的原因,只有SDRAM这种128M的大内存才能处理。同样,如果闪存超出,即程序过大,也可以使用片上的SPI FLASH,同样有128M之大。


    4-添加emwin相关初始化函数

    1.     SysTick_Config(SystemCoreClock / 1000U);

    2.     BOARD_InitPWM();
    3.     Init_CTIMER();

    4.     GUI_Init();
    5.     WM_MULTIBUF_Enable(1);
    6.     GUI_UC_SetEncodeUTF8();

    7.     CreateFramewin();
    8.     WM_Exec();
    复制代码


    SysTick_Config 是必要的,emwin需要systick定时器。BOARD_InitPWM则不一定需要,这个是调光用的。
    因此需要加上两个函数:
    1. #define CTIMER CTIMER3                 /* Timer 3 */
    2. #define CTIMER_MAT_OUT kCTIMER_Match_1 /* Match output 1 */
    3. #define CTIMER_CLK_FREQ CLOCK_GetFreq(kCLOCK_AsyncApbClk)
    4. #define CTIMER_PRESCALE (CTIMER_CLK_FREQ / 1000)
    5. void BOARD_InitPWM(void)
    6. {
    7.     sctimer_config_t config;
    8.     sctimer_pwm_signal_param_t pwmParam;
    9.     uint32_t event;

    10.     CLOCK_AttachClk(kMAIN_CLK_to_SCT_CLK);

    11.     CLOCK_SetClkDiv(kCLOCK_DivSctClk, 2, true);

    12.     SCTIMER_GetDefaultConfig(&config);

    13.     SCTIMER_Init(SCT0, &config);

    14.     pwmParam.output           = kSCTIMER_Out_5;
    15.     pwmParam.level            = kSCTIMER_HighTrue;
    16.     pwmParam.dutyCyclePercent = 5;

    17.     SCTIMER_SetupPwm(SCT0, &pwmParam, kSCTIMER_CenterAlignedPwm, 1000U, CLOCK_GetSctClkFreq(), &event);
    18. }

    19. void Init_CTIMER(void)
    20. {
    21.     ctimer_config_t config;
    22.     /* Enable the asynchronous bridge */
    23.     SYSCON->ASYNCAPBCTRL = 1;

    24.     /* Use 12 MHz clock for some of the Ctimers */
    25.     CLOCK_AttachClk(kFRO12M_to_ASYNC_APB);

    26.     CTIMER_GetDefaultConfig(&config);
    27.     config.prescale = CTIMER_PRESCALE;

    28.     CTIMER_Init(CTIMER, &config);
    29.     CTIMER_StartTimer(CTIMER);
    30. }
    复制代码


    5-添加emwin代码
    使用 GUIBuilder.exe 创建emwin布局文件,添加头文件,引出 CreateFramewin(); 函数
    直接加入工程即可编译下载,相关调用再第三步中的 CreateFramewin(); 已经做好了
    如果还需要二次开发,可以再向生成的emwin文件里面添加代码。


    效果.gif
    实验代码:
    LPC54628J512_Project.zip (2.04 MB, 下载次数: 35)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    653

    主题

    6308

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    19847
    最后登录
    2024-4-16
    发表于 2020-3-2 10:51:29 | 显示全部楼层
    感谢楼主的经验分享!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    26

    主题

    97

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    386
    最后登录
    2023-9-12
    发表于 2023-3-8 10:44:35 | 显示全部楼层
    不错,后续捣鼓的话,可以参考一下哟,感谢感谢
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-16 22:06 , Processed in 0.107915 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表