完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CH579的SPI0 Slave模式使用DMA和中断,只要一开始传输数据就一直进中断,哪怕把spi的引脚断开也不能使它停止。
麻烦大家看看,以下代码问题在哪? void SPI_SlaveDMARecv( PUINT8 pbuf, UINT16 len) { R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR; //fifo用于输入 R16_SPI0_DMA_BEG = (UINT32)pbuf; //DMA首地址 R16_SPI0_DMA_END = (UINT32)(pbuf + len); //DMA尾地址 R16_SPI0_TOTAL_CNT=len; //DMA缓冲区地址 R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END|RB_SPI_IF_DMA_END; //清除中断标志 传输全部完成 DMA完成 R8_SPI0_INTER_EN = RB_SPI_IE_DMA_END | RB_SPI_IE_CNT_END; //设置中断源 传输全部完成 DMA完成 R8_SPI0_CTRL_CFG |= RB_SPI_DMA_ENABLE; //DMA使能 NVIC_EnableIRQ(SPI0_IRQn); //SPI0中断使能 } void SPI0_IRQHandler (void) { if (R8_SPI0_INT_FLAG & RB_SPI_IF_CNT_END) { R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END; //清除传输全部完成中断标志 PRINT("SPI:RB_SPI_IF_CNT_ENDrn"); } if (R8_SPI0_INT_FLAG & RB_SPI_IF_DMA_END) { R8_SPI0_INT_FLAG = RB_SPI_IF_DMA_END; //清除DMA完成中断标志 PRINT("SPI:RB_SPI_IF_DMA_ENDrn"); } } void SPI0_Init(void) { GPIOA_ModeCfg(GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15, GPIO_ModeIN_PU); SPI0_SlaveInit(); SPI_SlaveDMARecv(spi_buffer,SPI_BUFFER_SIZE); } |
|
相关推荐
1个回答
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
283 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2762 浏览 2 评论
2270 浏览 1 评论
请问CH573怎么接到linux系统?能通过CH343串口模块接入吗?
358浏览 3评论
292浏览 2评论
240浏览 2评论
196浏览 2评论
293浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-2 09:22 , Processed in 1.070999 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191