查看: 1761|回复: 2

[分享] 【OKdo E1双核Cortex M33开发板】Core1通过SPI接口驱动OLED

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32035
    最后登录
    2024-4-26
    发表于 2020-12-2 15:39:19 | 显示全部楼层 |阅读模式
    基于Keil双核架构的研究1
    -core1作为显示核心
    1.  设计思想
    LPC55S69具有2个相同的Cortex-M33内核,Core0作为主核心,Core1作为辅助核心。使用Core1驱动Oled显示器,作为显示模块使用。可以大大的解放Core0的工作量,完成数据的采集和运行,让后将结果通过Core1显示出来。
    显示模块为0.96寸的Oled显示器,采用SPI接口通讯。为了充分的设计验证,分别采用GPIO的方式模拟SPI时序和SPI硬件方式驱动oled显示器。基本引脚引用关系为:
    11.png
    2.  软件实践2.1. 资源配置
    通过Config tools工具完成对于Core1引脚使用的配置。
    GPIO模式下的配置:
    12.png
    SPI模式下的配置:
    13.png
    14.png





    配置完成后生成驱动代码。
    2.2. 增加OLED驱动到Core1工程中
    15.png
    如图所示,将oled.c oled.h font.h增加到Core1的工程中。
    2.3. 修改oled驱动
    移植oled驱动中写入字节的函数,完成驱动修改。GPIO模式如下所示:
    1. void OLED_WR_Byte(u8 dat,u8 cmd)
    2. {
    3.    u8 i;
    4. //  OLED_RS=cmd;//命令、数据选择
    5. //  OLED_CS=0;
    6.        GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_RS_GPIO,BOARD_INITPINS_CORE1_LCD_RS_PORT, (BOARD_INITPINS_CORE1_LCD_RS_PIN),cmd);
    7.        GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_CS_GPIO,BOARD_INITPINS_CORE1_LCD_CS_PORT, (BOARD_INITPINS_CORE1_LCD_CS_PIN),0);
    8.        //数据移位输出,msb first
    9.        for(i=0;i<8;i++)
    10.        {
    11. //     OLED_SCLK=0;
    12.            GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_SCK_GPIO,BOARD_INITPINS_CORE1_LCD_SCK_PORT, (BOARD_INITPINS_CORE1_LCD_SCK_PIN),0);
    13.            if(dat&0x80)
    14. //         OLED_SDIN=1;
    15.               GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_SDA_GPIO,BOARD_INITPINS_CORE1_LCD_SDA_PORT, (BOARD_INITPINS_CORE1_LCD_SDA_PIN),1);
    16.            else
    17. //         OLED_SDIN=0;
    18.               GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_SDA_GPIO,BOARD_INITPINS_CORE1_LCD_SDA_PORT, (BOARD_INITPINS_CORE1_LCD_SDA_PIN),0);
    19. //     OLED_SCLK=1;
    20.            GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_SCK_GPIO,BOARD_INITPINS_CORE1_LCD_SCK_PORT, (BOARD_INITPINS_CORE1_LCD_SCK_PIN),1);
    21.            dat<<=1;
    22.        }
    23. //  OLED_CS=1;
    24. //  OLED_RS=1;
    25.        GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_CS_GPIO,BOARD_INITPINS_CORE1_LCD_CS_PORT, (BOARD_INITPINS_CORE1_LCD_CS_PIN),1);
    26.        GPIO_PinWrite(BOARD_INITPINS_CORE1_LCD_RS_GPIO,BOARD_INITPINS_CORE1_LCD_RS_PORT, (BOARD_INITPINS_CORE1_LCD_RS_PIN),1);
    27. }
    复制代码
    SPI模式如下所示:
    1. void OLED_WR_Byte(u8 dat,u8 cmd)
    2. {
    3.    spi_transfer_t xfer            ={0};
    4.    
    5.        GPIO_PinWrite(BOARD_INITPINS_LCD_RS_GPIO,BOARD_INITPINS_LCD_RS_PORT, (BOARD_INITPINS_LCD_RS_PIN),cmd);
    6.        srcBuff[0]= dat;
    7.    /*Start Transfer*/
    8.    xfer.txData      = srcBuff;
    9.    xfer.rxData      = destBuff;
    10.    xfer.dataSize    = 1;
    11.    xfer.configFlags = kSPI_FrameAssert;
    12.    SPI_MasterTransferBlocking(SPI1, &xfer);
    13.        GPIO_PinWrite(BOARD_INITPINS_LCD_RS_GPIO,BOARD_INITPINS_LCD_RS_PORT, (BOARD_INITPINS_LCD_RS_PIN),1);
    14. }
    复制代码
    2.4. 初始化和显示刷新
    Core1的main函数中,增加Oled的初始化函数,显示刷新函数。
    1. OLED_Init();
    2.     OLED_ShowString(10,0,"OKDoE1 NXP");
    3.     OLED_Refresh_Gram();  
    4.       
    5.    for (;;)
    6.     {
    7.               lcd_count++;
    8.               if((lcd_count% 500) == 0)
    9.               {
    10. GPIO_PortToggle(GPIO, BOARD_INITPINS_CORE1_LED_R_PORT,
    11. 1u <<BOARD_INITPINS_CORE1_LED_R_PIN);
    12.               }
    13.               sprintf((char*)lcd_disp,"%05d",lcd_count);
    14.               OLED_ShowString(20,25,lcd_disp);
    15.               OLED_Refresh_Gram();  
    16.            
    17. }
    复制代码
    显示效果为在屏幕上刷新一个自增的16位数字,增加到65535后自动变为0.
    3.  效果验证
    通过GPIO模式和SPI模式都可以在core1中正确运行,驱动显示刷新。
    16.gif
    实际显示效果展示,通过Core1完成了oled的显示驱动。

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-21 11:31
  • 签到天数: 35 天

    [LV.5]常住居民I

    7

    主题

    1876

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1802
    最后登录
    2024-4-1
    发表于 2020-12-2 17:48:18 来自手机 | 显示全部楼层
    有空搞一下,很好的例程
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7092
    最后登录
    2023-4-20
    发表于 2020-12-2 21:48:07 | 显示全部楼层
    本帖最后由 jinglixixi 于 2020-12-2 21:49 编辑

    点赞!!!有时间用用Config tools工具
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-28 00:46 , Processed in 0.123654 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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