DMA接收USART数据(非中断)
来源:互联网 发布:2016零售业数据分析 编辑:程序博客网 时间:2024/05/19 22:28
void USART2_Receive_Message(void)
{
u16 remain;
u16 avail = RX_SIZE - RxLen_Buf2;
u16 count = RR_SIZE - DMA_GetCurrDataCounter(DMA1_Channel6);
if (count == RxPtr_Ring2 || avail == 0)
{
return;
}
if (count > RxPtr_Ring2)
{
remain = count - RxPtr_Ring2;
if (avail >= remain)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], remain);
RxPtr_Ring2 = count;
RxLen_Buf2 = RxLen_Buf2 + remain;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf2 + avail;
}
}
else /* round */
{
remain = RR_SIZE - RxPtr_Ring2;
if (avail >= remain)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], remain);
RxPtr_Ring2 = 0;
RxLen_Buf2 = RxLen_Buf2 + remain;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf2 + avail;
}
avail = RX_SIZE - RxLen_Buf2;
if (avail >= count)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], count);
RxPtr_Ring2 = count;
RxLen_Buf2 = RxLen_Buf2 + count;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf2 + avail;
}
}
}
{
u16 remain;
u16 avail = RX_SIZE - RxLen_Buf2;
u16 count = RR_SIZE - DMA_GetCurrDataCounter(DMA1_Channel6);
if (count == RxPtr_Ring2 || avail == 0)
{
return;
}
if (count > RxPtr_Ring2)
{
remain = count - RxPtr_Ring2;
if (avail >= remain)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], remain);
RxPtr_Ring2 = count;
RxLen_Buf2 = RxLen_Buf2 + remain;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf2 + avail;
}
}
else /* round */
{
remain = RR_SIZE - RxPtr_Ring2;
if (avail >= remain)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], remain);
RxPtr_Ring2 = 0;
RxLen_Buf2 = RxLen_Buf2 + remain;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf2 + avail;
}
avail = RX_SIZE - RxLen_Buf2;
if (avail >= count)
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], count);
RxPtr_Ring2 = count;
RxLen_Buf2 = RxLen_Buf2 + count;
}
else
{
memcpy(&Rx_Buf2[RxLen_Buf2], &Rx_Ring2[RxPtr_Ring2], avail);
RxPtr_Ring2 = RxPtr_Ring2 + avail;
RxLen_Buf2 = RxLen_Buf2 + avail;
}
}
}
- DMA接收USART数据(非中断)
- STM32 USART DMA发送 中断接收
- USART接收中断
- Stm32使用Usart代码例子(轮询、中断、DMA)
- MSP430F149小系统开发板实现USART数据接收中断
- STM32F207Cube库函数USART中断接收
- AVR USART接收中断程序
- USART 串口 DMA 发送和接收
- STM8L 在USART中使用DMA来发送与接收数据
- STM32实现USART+DMA接收未知长度的数据和发送
- STM32F207运用串口空闲中断+DMA接收不定长数据
- STM32使用DMA加串口空闲中断接收数据
- STM32F207运用串口空闲中断+DMA接收不定长数据
- STM32空闲中断+DMA解决接收不定长数据问题
- STM32F429串口IDLE中断+DMA接收串口数据
- STM32F207运用串口空闲中断+DMA接收不定长数据
- STM32空闲中断+DMA解决接收不定长数据问题
- STM32F103 USART DMA收发不定长数据
- 四极管 点阵屏控制 AVR 静态点阵
- 根据字段值 查询 字段名,表名
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- 实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC
- 四极管:颜色识别 之 AVR TCS230
- DMA接收USART数据(非中断)
- 四种很相似的设计模式(State,Strategy,Bridge,Visitor)的区别
- 四极管: 2009年全国电子设计大赛声音引导小车之 MMC驱动
- 详细解说 STL 排序(Sort)
- 四极管:3D图像 之 AVR 12864实现
- 构架、框架、设计模式之间的关系简述
- taobao淘宝api for pb12
- E1
- initwithcoder initwithframe initWithNibName awakeFromNib initWithCoder