您尚未登录。

楼主 #1 2019-12-19 02:33:38

KeyMove
会员
注册时间: 2019-11-15
已发帖子: 7
积分: 7

F1C100S有人裸机跑过SPI跟DMA吗

void InitSPI1(){
	GPIOA->CFG[0]&=0xffff0000;
	GPIOA->CFG[0]|=0x00001661;
	
	SETBIT(CCU->BUS_SOFT_RST0,1<<CCU_BUS_CLK_GATING_SPI1_GATING);
	ENABLE_BUSCLK(CCU_BUS_CLK_GATING_SPI1_GATING);
	SPI1->CCR=0x00001000+2;
	SPI1->GCR=SPI_GCR_SRST|SPI_GCR_MODE|SPI_GCR_TP_EN|SPI_GCR_EN;
	while(SPI1->GCR&SPI_GCR_SRST);
	SETBIT(SPI1->TCR,SPI_TCR_CPOL|SPI_TCR_CPHA|SPI_TCR_SS_OWNER);//SPI_TCR_CPOL|SPI_TCR_CPHA|
	SETBIT(SPI1->FCR,SPI_FCR_RF_RST|SPI_FCR_TX_FIFO_RST|SPI_FCR_TF_DRQ_EN);
}

void InitDMA(){
	ENABLE_BUSCLK(CCU_BUS_CLK_GATING_DMA_GATING);
	SETBIT(CCU->BUS_SOFT_RST0,1<<CCU_BUS_CLK_GATING_DMA_GATING);
	DMA->NDMA[0].CFG=NDMA_CFG_DESTINATION_DRQ_TYPE_CONFIDENTIAL_SET(NDMA_CFG_DRQ_SPI1_TX)|NDMA_CFG_SOURCE_DRQ_TYPE_SET(NDMA_CFG_DRQ_SDRAM_MEMORY)|NDMA_CFG_SOURCE_ADDRESS_TYPE_SET(NDMA_CFG_ADDRESS_LINEAR_MODE)|NDMA_CFG_DESTINATION_ADDRESS_TYPE_SET(NDMA_CFG_ADDRESS_IO_MODE)|NDMA_CFG_REMAIN_BYTE_COUNTER_READ_ENABLE|NDMA_CFG_WAIT_STATE_SET(NDMA_CFG_WAIT_STATE2);
	DMA->NDMA[0].SRC_ADR=(u32)&lcdbuff;
	DMA->NDMA[0].DES_ADR=(u32)&SPI1->TXD;
}

void flushDMA(){
	SPI1->MBC=SPI1->MTC=SPI1->BCC=DMA->NDMA[0].BYTE_CNT=240*320*2;
	SETBIT(DMA->NDMA[0].CFG,NDMA_CFG_LOADING);
	SETBIT(SPI1->TCR,SPI_TCR_XCH);
	while(DMA->NDMA[0].CFG&NDMA_CFG_BUSY_STATUS)SPI1->RXD;
	SETBIT(SPI1->ISR,SPI_ISR_TC);
	while(!(SPI1->ISR&SPI_ISR_TC))SPI1->RXD;
}
u8 lcdbuff[240*320*2] __attribute__((at(0x80000000)));
for(cnt=0;cnt<240*320;cnt++)lcdbuff[cnt]=0xff;
for(cnt=0;cnt<240*320;cnt++)lcdbuff[cnt+240*320]=0x0;
InitDMA();
ST7789_CS_CLR();
flushDMA();
ST7789_CS_SET();

我试了一下效果
https://whycan.cn/files/members/2421/shua.mp4

测试的过程中发现SPI的RXD如果不读也会卡住SPI,不知道有没有忽略RXD的方法。

离线

楼主 #2 2019-12-24 20:09:38

KeyMove
会员
注册时间: 2019-11-15
已发帖子: 7
积分: 7

Re: F1C100S有人裸机跑过SPI跟DMA吗

SPI1的IO驱动能力不足
spi1.jpg
CLK只能到34M了
ugui0.gif

离线

#3 2019-12-24 21:49:54

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: F1C100S有人裸机跑过SPI跟DMA吗

厉害了,是dma驱动么。加一个强上拉看看

离线

#4 2019-12-25 15:02:31

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 462
积分: 329.5
个人网站

Re: F1C100S有人裸机跑过SPI跟DMA吗

我这抓到同样的波形,换了个板子就好了。
但我SPI时钟设置的是2M,开始以为是逻辑分析仪坏了,换上示波器才发现问题。
感觉是芯片里面某个驱动MOS烧了的原因造成的。
还有没有小伙伴遇到同样的问题?
楼主后面怎么解决的?

2.png

最近编辑记录 aozima (2019-12-25 15:03:47)

离线

#5 2019-12-25 15:12:56

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 462
积分: 329.5
个人网站

Re: F1C100S有人裸机跑过SPI跟DMA吗

同样的固件,正常的板子,波形就很正常。
none.png

最近编辑记录 aozima (2019-12-25 15:13:11)

离线

#6 2023-05-03 23:28:52

家猫戏很足
会员
注册时间: 2018-09-16
已发帖子: 14
积分: 4

Re: F1C100S有人裸机跑过SPI跟DMA吗

想问一下,这个程序模板在哪?

离线

#7 2023-05-04 14:31:14

家猫戏很足
会员
注册时间: 2018-09-16
已发帖子: 14
积分: 4

Re: F1C100S有人裸机跑过SPI跟DMA吗

@KeyMove
是不是不清RX的FIFO传输会停止,是不是清了TP_EN就可以了。
TP_EN
Transmit Pause Enable
In master mode, it is used to control transmit state machine to stop smart
burst sending when RX FIFO is full.
1 – stop transmit data when RXFIFO full
0 – normal operation, ignore RXFIFO status
Note: Can’t be written when XCH=1

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn