在线时间372 小时
UID3135871
注册时间2016-10-9
NXP金币20
TA的每日心情 | 怒 2024-2-5 12:06 |
---|
签到天数: 627 天 [LV.9]以坛为家II
版主
- 积分
- 4429
- 最后登录
- 2024-2-5
|
本帖最后由 胤幻1988 于 2021-4-8 14:02 编辑
今天又捣鼓了半天,我决定不再捣鼓外接什么模块了,就用它本身自带的好了。搞的我好累,想引出个LPSPI1就这么难么?
板上虽说可以去掉电阻,切断跟其他外设的连线,但是电阻太小又密集。而且这板可能别人还要用。
就不弄了,不跳线,不去电阻,先这样弄弄吧。
由于ardunio引出的LPSPI接口,完全连接到外置FLASH上,硬件SPI不成功。
写了好几个代码,一直不成功,差点自闭了。库不行,就用寄存器,还是不行。我也不再深究了。
硬件LPSPI配置:
- CLOCK_SetMux(kCLOCK_LpspiMux, 1U);
- CLOCK_SetDiv(kCLOCK_LpspiDiv, 7U);
- uint32_t srcClock_Hz;
- lpspi_master_config_t masterConfig;
- //Master config
- LPSPI_MasterGetDefaultConfig(&masterConfig);
- masterConfig.baudRate = 500000U;
- masterConfig.bitsPerFrame = 8;
- masterConfig.whichPcs = kLPSPI_Pcs0;
- masterConfig.cpol=kLPSPI_ClockPolarityActiveHigh;
- masterConfig.cpha = kLPSPI_ClockPhaseFirstEdge; // CPHA=0
- masterConfig.direction = kLPSPI_MsbFirst;
- masterConfig.pcsToSckDelayInNanoSec = 1000000000 / masterConfig.baudRate * 2;
- masterConfig.lastSckToPcsDelayInNanoSec = 1000000000 / masterConfig.baudRate * 2;
- masterConfig.betweenTransferDelayInNanoSec = 1000000000 / masterConfig.baudRate * 2;
- masterConfig.whichPcs = kLPSPI_Pcs0;
- masterConfig.pcsActiveHighOrLow = kLPSPI_PcsActiveLow;
- masterConfig.pinCfg = kLPSPI_SdiInSdoOut;
- masterConfig.dataOutConfig = kLpspiDataOutRetained;
- srcClock_Hz = (CLOCK_GetFreq(kCLOCK_Usb1PllPfd0Clk) / (7U + 1U));
- LPSPI_MasterInit(LPSPI1, &masterConfig, srcClock_Hz);
- LPSPI_Enable(LPSPI1,true);*/
复制代码 硬件SPI读写单个字节:
- uint8_t TXDummy;
- uint16_t retry=0;
- LPSPI_WriteData(LPSPI1,data);
- //while ((LPSPI_GetStatusFlags(LPSPI1)>>24)&0x01 == 1)//检测是否BUSY
- while ((LPSPI_GetStatusFlags(LPSPI1)>>10)&0x01 == 1)//传输完成
- {
- retry++;
- if(retry>=1000)
- return 0;
- }
- TXDummy=LPSPI_ReadData(LPSPI1);//¶áè¡êy¾Y Çå¿ÕFIFO
- return TXDummy;
复制代码- while (((LPSPI1->SR & LPSPI_SR_TDF_MASK) >> LPSPI_SR_TDF_SHIFT) == 0);
- LPSPI1->TDR = data;
- LCD_SPI->TCR =
- (LCD_SPI->TCR & ~(LPSPI_TCR_CONT_MASK | LPSPI_TCR_CONTC_MASK | LPSPI_TCR_RXMSK_MASK | LPSPI_TCR_PCS_MASK)) |
- LPSPI_TCR_CONT(1) | LPSPI_TCR_CONTC(0) | LPSPI_TCR_RXMSK(0) | LPSPI_TCR_PCS(0);
- LPSPI1->TCR = ((LPSPI1->TCR) | (LPSPI_TCR_TXMSK_MASK)); //<! Start Transmit Hardware Clear
- LPSPI1->TCR = ((LPSPI1->TCR) & (~LPSPI_TCR_RXMSK_MASK));
- LPSPI1->SR = LPSPI_SR_TDF_MASK; //<! Clear TDF flag
- LCD_SPI->TCR = (LCD_SPI->TCR & ~(LPSPI_TCR_CONTC_MASK));
- while (((LPSPI1->SR & LPSPI_SR_RDF_MASK) >> LPSPI_SR_RDF_SHIFT) == 0);
- temp= LPSPI1->RDR;
- LPSPI1->SR = LPSPI_SR_RDF_MASK; //<! Clear RDF flag
复制代码 模拟SPI:
- #define LCD_CS_SET() GPIO_PinWrite(BOARD_INITPINS_lcd_cs_PERIPHERAL, BOARD_INITPINS_lcd_cs_CHANNEL, 1u) /* LCD spi select set high */
- #define LCD_CS_CLR() GPIO_PinWrite(BOARD_INITPINS_lcd_cs_PERIPHERAL, BOARD_INITPINS_lcd_cs_CHANNEL, 0u) /* LCD spi select set low */
- #define LCD_DC_SET() GPIO_PinWrite(BOARD_INITPINS_lcd_dc_PERIPHERAL, BOARD_INITPINS_lcd_dc_CHANNEL, 1u) /* LCD command set high */
- #define LCD_DC_CLR() GPIO_PinWrite(BOARD_INITPINS_lcd_dc_PERIPHERAL, BOARD_INITPINS_lcd_dc_CHANNEL, 0u) /* LCD command set low */
- #define LCD_RST_SET() GPIO_PinWrite(BOARD_INITPINS_lcd_rst_PERIPHERAL, BOARD_INITPINS_lcd_rst_CHANNEL, 1u) /* LCD reset set high */
- #define LCD_RST_CLR() GPIO_PinWrite(BOARD_INITPINS_lcd_rst_PERIPHERAL, BOARD_INITPINS_lcd_rst_CHANNEL, 0u) /* LCD reset set low */
- #define LCD_SCK_SET() GPIO_PinWrite(BOARD_INITPINS_lcd_sck_PERIPHERAL, BOARD_INITPINS_lcd_sck_CHANNEL, 1u) /* LCD reset set high */
- #define LCD_SCK_CLR() GPIO_PinWrite(BOARD_INITPINS_lcd_sck_PERIPHERAL, BOARD_INITPINS_lcd_sck_CHANNEL, 0u)
- #define LCD_SDO_SET() GPIO_PinWrite(BOARD_INITPINS_lcd_sdo_PERIPHERAL, BOARD_INITPINS_lcd_sdo_CHANNEL, 1u) /* LCD reset set high */
- #define LCD_SDO_CLR() GPIO_PinWrite(BOARD_INITPINS_lcd_sdo_PERIPHERAL, BOARD_INITPINS_lcd_sdo_CHANNEL, 0u)
复制代码- uint8_t i;
- for(i=0;i<8;i++)
- {
- LCD_SCK_CLR();
- if(data&0x80)
- LCD_SDO_SET();
- else
- LCD_SDO_CLR();
- LCD_SCK_SET();
- data<<=1;
- }
- return 0;
复制代码
其余操作LCD的函数,就没什么好说的了。
|
|