查看: 431|回复: 4

[求助] 关于 RT1052 LPSPI 最大速率问题

[复制链接]
  • TA的每日心情
    慵懒
    2023-12-15 10:33
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    13

    帖子

    0

    注册会员

    Rank: 2

    积分
    62
    最后登录
    2023-12-15
    发表于 2023-12-3 21:58:35 | 显示全部楼层 |阅读模式
    本帖最后由 oneofzero 于 2023-12-5 10:05 编辑

    最近在驱动一块 240X320的液晶屏幕,
    下面是LPSPI 相关初始化代码
    void LCDSPI_Init()
    {
            LCDGPIOInit();
            int lpspiclk = 0;

            CLOCK_SetMux(kCLOCK_LpspiMux, LPSPI_CLOCK_SOURCE_SELECT);
            CLOCK_SetDiv(kCLOCK_LpspiDiv, LPSPI_CLOCK_SOURCE_DIVIDER);

            //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_01_LPSPI1_PCS0,0);   
            IOMUXC_SetPinMux(SPILCD_SCK, 0);                                    
            IOMUXC_SetPinMux(SPILCD_MOSI, 0);                                    
            IOMUXC_SetPinMux(SPILCD_CS, 0);  
            //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_03_LPSPI1_SDI,0);                                    

                    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_01_LPSPI1_PCS0,0x10B0);  
        IOMUXC_SetPinConfig(SPILCD_SCK, 0x10B0);                              
            IOMUXC_SetPinConfig(SPILCD_MOSI, 0x10B0);                                                                              
            IOMUXC_SetPinConfig(SPILCD_CS, 0x10B0);     
            //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_03_LPSPI1_SDI,0x10B0);   
            //int baudrate = 160;        
            lpspiclk = LPSPI_CLOCK_FREQ;
            //lpspiclk = (CLOCK_GetFreq(kCLOCK_Usb1PllPfd0Clk) / (16));
            
                    //LPSPI1时钟
            lpspi1_config.baudRate = LPSPI_CLOCK_FREQ/2;//80 * 1000000;
                    //SPI速度
            lpspi1_config.whichPcs=kLPSPI_Pcs0;
                    //片选信号,PCS0
            lpspi1_config.pcsActiveHighOrLow=kLPSPI_PcsActiveLow;
                    //片选信号低电平有效
            lpspi1_config.bitsPerFrame = 8;
                    //设置SPI的数据大小:SPI发送接收8位帧结构
            lpspi1_config.cpol = kLPSPI_ClockPolarityActiveHigh;
                    //串行同步时钟低电平有效
            //lpspi1_config.cpha = kLPSPI_ClockPhaseSecondEdge;
            lpspi1_config.cpha = kLPSPI_ClockPhaseFirstEdge;
                    //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
            lpspi1_config.direction = kLPSPI_MsbFirst;
                    //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
            lpspi1_config.pinCfg = kLPSPI_SdiInSdoOut;
                    //SDI输入引脚,SDO输出引脚
            lpspi1_config.dataOutConfig = kLpspiDataOutRetained;
                    //输出数据保留
            lpspi1_config.pcsToSckDelayInNanoSec = 5;
                    //片选拉低到时钟有效之间的延时时间,单位ns
            lpspi1_config.lastSckToPcsDelayInNanoSec = 5;
                    //最后一个时钟到片选拉高之间的延时,单位ns
            lpspi1_config.betweenTransferDelayInNanoSec = 0;
                    //两次传输之间的延时,单位ns
            LPSPI_MasterInit(LCDSPI, &lpspi1_config, lpspiclk);
            LPSPI_Enable(LCDSPI, false);

            LCDSPI->CFGR1 &= (~LPSPI_CFGR1_NOSTALL_MASK);

            LPSPI_Enable(LCDSPI, true);



            LPSPI_FlushFifo(LCDSPI, true, true);
            
            //LPSPI_Enable(LCDSPI, true);
            
            PRINTF("LCDSPI FREQ:%d\n", lpspiclk);
    }

    unsigned char LCDSPI_ReadWriteByte(uint8_t* data, int size)
    {
            //SPILCD_CS(0);

            //unsigned char spirxdata = 0;
            lpspi_transfer_t spi_tranxfer;

            spi_tranxfer.configFlags = kLPSPI_MasterPcs0 | kLPSPI_MasterPcsContinuous;
            spi_tranxfer.txData = data;
            spi_tranxfer.rxData = NULL;//recvdata;
            spi_tranxfer.dataSize = size;
            LPSPI_MasterTransferBlocking(LCDSPI, &spi_tranxfer);         
            
            //SPILCD_CS(1);

            return 0;

    }

    [21:45:55 584]LCDSPI FREQ:120000000
    显示速度120M
    但是 实际 测试 速度只有大约40Mhz (320*240*2*8/0.03=4096000hz) ,刷一屏幕要30ms

    不知道是我设置不对,还是这个spi速度上限就是如此呢?请大佬指教。。




    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-12-15 10:33
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    13

    帖子

    0

    注册会员

    Rank: 2

    积分
    62
    最后登录
    2023-12-15
     楼主| 发表于 2023-12-5 10:05:39 | 显示全部楼层
    esp32s3 上的spi 上到80mhz 都没有问题,rt1052 的spi 速度这么慢吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    注册会员

    Rank: 2

    积分
    54
    最后登录
    2024-3-17
    发表于 2023-12-5 16:48:24 | 显示全部楼层
    lpspi的速度最大应该是30Mhz
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-12-15 10:33
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    13

    帖子

    0

    注册会员

    Rank: 2

    积分
    62
    最后登录
    2023-12-15
     楼主| 发表于 2023-12-6 09:22:26 | 显示全部楼层
    应该不止30Mhz,目前测试下来至少有40mhz 不然刷一屏幕不可能只要 30ms,等有空试一下EDMA 那个接口 看看,是不是速度更快。。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-12-15 10:33
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    13

    帖子

    0

    注册会员

    Rank: 2

    积分
    62
    最后登录
    2023-12-15
     楼主| 发表于 2023-12-12 18:00:49 | 显示全部楼层
    eefocus_3937691 发表于 2023-12-5 16:48
    lpspi的速度最大应该是30Mhz

    是的官方回复说只有30Mhz... 但是测试下来应该有40mhz 。。不然达不到刷新一屏幕数据 320X240X16bit  只需要30ms。。或者也可能是我的计时函数有问题, 不过这个速度也太慢了。esp32 轻松上80Mhz 。。。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-28 06:09 , Processed in 0.152111 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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