-
GD32F470,SPI DMA 读,DMA_INT_FLAG_FTF中断提前发生?
外部中断EXTI_IRQHandler间隔启动读数据,中断后CS低电平使能读;读取指定数量数据后产生DMA1_Channel0_IRQHandler中断,CS高电平结束读;异常:一般开始是正常读取,如正常波形,运行一段时间后,可能几分钟、几小时后DMA1_Channel0_IRQHandler提前产生中断,即实际并没有读取完毕,图波形图,CS已经高电平了,但是SPI_CLK仍然持续中。黄色:CS电平蓝色:SPICLK相关代码:voidEXTI_IRQHandler(void)//定时产生SPI读请求{if(RESET!=exti_interrupt_flag_get(EXTI_Busy)){exti_interrupt_flag_clear(EXTI_Busy);CS=CSReadEnable;//启使能,如图低电平//启动的SPIDMA中断读dma_flag_clear(DMA,DMA_CH_RECV,DMA_FLAG_FTF);dma_flag_clear(DMA,DMA_CH_SEND,DMA_FLAG_FTF);DMA_CHCNT(DMA,DMA_CH_RECV)=AD7606CHCount;//voiddma_transfer_number_configDMA_CHCNT(DMA,DMA_CH_SEND)=AD7606CHCount;DMA_CHCTL(DMA,DMA_CH_RECV)|=DMA_CHXCTL_CHEN;//dma_channel_enable,启动DMA读。DMA_CHCTL(DMA,DMA_CH_SEND)|=DMA_CHXCTL_CHEN;}}voidDMA1_Channel0_IRQHandler(void)//读取指定数量数据后产生中断。{if(RESET!=dma_interrupt_flag_get(DMA,DMA_CH_RECV,DMA_INT_FLAG_FTF)){dma_interrupt_flag_clear(DMA,DMA_CH_RECV,DMA_INT_FLAG_FTF);CS=CSHighZ;//读取完成后,CS至高电平,DMA_CHCTL(DMA,DMA_CH_RECV)&=~DMA_CHXCTL_CHEN;//dma_channel_disable,下一次外部中断将再次开启。DMA_CHCTL(DMA,DMA_CH_SEND)&=~DMA_CHXCTL_CHEN;//接收数据处理}}
2024-11-29 2 -
请教CH376写U盘,文档中总是有少量异常编码?
本帖最后由ActiveAndy于2023-4-2922:21编辑文本文件局部对应二进制编码50,2940.0,435302C09323934302E302C092020340A20*****002A2A2A2A2A0000000000000000000A2052,3060.0,535322C09333036302E302C092020350A20我是通过UART和CH376通信,硬件INT管脚,采取读管脚方式查询中断。使用CH376ByteWrite写字节方式写U盘,一次CH376ByteWrite大概一般不超过40个字节编码。一个总计12K文本文件总是能遇到大概2-3次CH376ByteWrite写入错误,基本上都是如上错误写成了2A2A0000,而字节数量基本还是对的。CH376ByteWrite有时候能捕捉到写失败返回值(Query376Interrupt循环超时不产生中断)有时CH376ByteWrite完全返回正常(Query376Interrupt正常),但是文档中仍然有误码。我调整通信速率在9600-1000000之间,错误率并没有明显变化。非常感谢!
2023-04-29 1