在线时间6 小时
UID3470727
注册时间2023-11-10
NXP金币0
TA的每日心情 | 慵懒 2023-12-15 10:33 |
---|
签到天数: 9 天 [LV.3]偶尔看看II
注册会员
- 积分
- 62
- 最后登录
- 2023-12-15
|
本帖最后由 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速度上限就是如此呢?请大佬指教。。
|
|