1
完善资料让更多小伙伴认识你,还能领取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个回答
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
521 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2902 浏览 2 评论
2398 浏览 1 评论
867浏览 2评论
687浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
417浏览 1评论
522浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
812浏览 1评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:08 , Processed in 1.060697 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号