完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
使用SPISAQueRXDATA()API可以正确地接收SPIS组件的10位数据。输入SPI信号如下。1。SS低。2。十次SCLK和莫西来了。三。SS变高。4。重复256次。(步骤1)3)当我使用DMA将SPIS接收的数据传送到SRAM时,所有存储的数据似乎都是较低的字节。DMA访问SPI 10位FIFO吗?定义DMAILRXY1YBYTEXPARYSPREST(2U)定义DMALRXY1LIQUESTEP PARYSPARE(1U)定义DMALRXY11SRCYBASE(CyDeVelEnguriBaseBASE)定义DMALRXY11DSTHYBASE(CyDeVeSrAMBASE BASE)未签名CHAR RXCHANNELNUR1;未签名CHAR RXTDD1[1U];无符号短数据[256 ];无符号chMADRX1ION;空隙IDMA(空隙){/*阿尔法它的DMA,2字节突发,每个突发需要一个请求*/RxChhanely1= DMAYRX11dMinti化(DMALRXY1YBYTESH PARYBY突发,DMAYRXX11ReQuestPi PyrBurd,Hi16(DMAIRXX11SRCXBASE),Hi16(DMAIRXX11DSTSTBASE));RXTDD1(0)= CydMatDLaLATE();} StaseStista SPIs(空隙){DMAY1LRX1Y配置(512,数据);SPISY1 inin_clearrxbuffer();spis_1_start()虚空(void);} stop_dma { static unsigned char * stat_rx1;做{ cydmachstatus(rxchannel_1,null,stat_rx1);}而((* stat_rx1 &;(status_td_active | status_chain_active))!= 0);CyDmaChDisable(rxchannel_1);spis_1_stop();}无效dma_1_rx1_configuration(无符号短整型数,无符号短整数p){ cydmatdsetconfiguration(rxtd_1 [ 0 ],计数,cy_dma_disable_td,td_inc_dst_adr | dma_rx1__td_termout_en);cydmatdsetaddress(rxtd_1 [ 0 ],lo16((uint32)spis_1_rxdata_ptr),lo16((个32)P));CyDmaChSetInitialTd(rxchannel_1,rxtd_1 [ 0 ]);CyDmaChEnable(rxchannel_1,0u);} cy_isr(isr_dma_rx1_interrupt){ dma_rx1_done = 1;} void main(void){ for(;;){ if(dma_rx1_done){ stop_dma();}如果(/ * * /事件){ start_spis();} } }
以上来自于百度翻译 以下为原文 I could receive 10bits data correctly with SPIS component by using SPIS_ReadRxData() API. Incoming SPI signal is as follows. 1. SS goes low. 2. Ten times SCLK and MOSI comes. 3. SS goes high. 4. Repeat 256 times.(step 1 ... 3) When I use DMA to transfer SPIS received data to SRAM, all stored data seems to be lower bytes. Can DMA access SPI 10bits FIFO? #define DMA_RX_1_BYTES_PER_BURST (2u) #define DMA_RX_1_REQUEST_PER_BURST (1u) #define DMA_RX_1_SRC_BASE (CYDEV_PERIPH_BASE) #define DMA_RX_1_DST_BASE (CYDEV_SRAM_BASE) unsigned char RxChannel_1; unsigned char RxTD_1[1u]; unsigned short data[256]; unsigned char DMA_RX1_Done; void init_dma(void) { /* Init DMA, 2 byte bursts, each burst requires a request */ RxChannel_1 = DMA_RX1_DmaInitialize(DMA_RX_1_BYTES_PER_BURST, DMA_RX_1_REQUEST_PER_BURST, HI16(DMA_RX_1_SRC_BASE), HI16(DMA_RX_1_DST_BASE)); RxTD_1[0] = CyDmaTdAllocate(); } void start_SPIS(void) { Dma_1_Rx1_Configuration(512, data); SPIS_1_ClearRxBuffer(); SPIS_1_Start(); } void stop_dma(void) { static unsigned char *STAT_RX1; do { CyDmaChStatus(RxChannel_1,NULL,STAT_RX1); } while((*STAT_RX1 & (STATUS_TD_ACTIVE | STATUS_CHAIN_ACTIVE)) != 0); CyDmaChDisable(RxChannel_1); SPIS_1_Stop(); } void Dma_1_Rx1_Configuration(unsigned short count, unsigned short *p) { CyDmaTdSetConfiguration(RxTD_1[0], count, CY_DMA_DISABLE_TD, TD_INC_DST_ADR | DMA_RX1__TD_TERMOUT_EN); CyDmaTdSetAddress(RxTD_1[0], LO16((uint32)SPIS_1_RXDATA_PTR), LO16((uint32)p)); CyDmaChSetInitialTd(RxChannel_1, RxTD_1[0]); CyDmaChEnable(RxChannel_1, 0u); } CY_ISR(ISR_DMA_RX1_Interrupt) { DMA_RX1_Done = 1; } void main(void) { for(;;){ if (DMA_RX1_Done){ stop_dma(); } if (/* event comes */){ start_SPIS(); } } } |
|
相关推荐
1个回答
|
|
你好,
请您附上您使用DMA读取数据的项目。 谢谢, 希马 以上来自于百度翻译 以下为原文 Hello, Can you please attach your project in which you have done the data read using DMA. Thanks, Hima |
|
|
|
只有小组成员才能发言,加入小组>>
747个成员聚集在这个小组
加入小组2046 浏览 1 评论
1794 浏览 1 评论
3604 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1729 浏览 6 评论
1489 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
450浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
316浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
387浏览 2评论
332浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
546浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-22 02:45 , Processed in 1.018411 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号