您尚未登录。

楼主 # 2022-01-24 22:41:29

stephone
会员
注册时间: 2019-10-09
已发帖子: 57
积分: 9

CH579M串口接收问题

在玩CH579M的时候,使用串口功能,发现

  case UART_II_RECV_RDY:
  for(i=0; i!=trigB; i++)
    {
	UINT8 data = UART1_RecvByte();
	if(RxCnt < 64)
	  {
          RxBuff[RxCnt ++] = data;
	  }
     }
  break;

改成如下:

  case UART_II_RECV_RDY:
  while(R8_UART1_LSR & RB_LSR_DATA_RDY)
    {
	UINT8 data = UART1_RecvByte();
	if(RxCnt < 64)
	  {
          RxBuff[RxCnt ++] = data;
	  }
     }
  break;

发现R8_UART1_LSR 的BIT0:RB_LSR_DATA_RDY一直置位,导致中断无法退出。但DATASHEET说明是可以读取所有FIFO数据后读取FIFO中所有数据后,该位自动清0的,但实际上无法实现。并尝试关闭FIFO结果仍然一样,不知各位大神是否有遇到或指点一下,谢谢!

// 串口配置程序,使用例程
void UART1_DefInit( void )
{	
    UART1_BaudRateCfg( 115200 );
    // R8_UART1_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN;		// FIFO´ò¿ª£¬´¥·¢µã4×Ö½Ú
    R8_UART1_FCR = (0<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR;		// FIFO´ò¿ª£¬´¥·¢µã4×Ö½Ú
    R8_UART1_LCR = RB_LCR_WORD_SZ;	
    R8_UART1_IER = RB_IER_TXD_EN;
    R8_UART1_DIV = 1;	
}

离线

楼主 #1 2022-01-24 22:52:40

stephone
会员
注册时间: 2019-10-09
已发帖子: 57
积分: 9

Re: CH579M串口接收问题

无语了,刚发贴就发现原因了,自己不知道怎么改成这样了 sad sad sad
#define    UART1_RecvByte()        ( UART_RBR )

离线

#2 2022-01-25 10:42:04

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 583
积分: 587
个人网站

Re: CH579M串口接收问题

stephone 说:

无语了,刚发贴就发现原因了,自己不知道怎么改成这样了 sad sad sad
#define    UART1_RecvByte()        ( UART_RBR )

哈哈,CH579M的FIFO功能挺好的。
接收超时+FIFO溢出,
用起来可以减少CPU开销。

离线

#3 2022-01-25 17:27:26

daicheng
会员
注册时间: 2022-01-24
已发帖子: 10
积分: 0

Re: CH579M串口接收问题

出现问题以后才会知道怎么避免

离线

楼主 #4 2022-01-26 12:28:31

stephone
会员
注册时间: 2019-10-09
已发帖子: 57
积分: 9

Re: CH579M串口接收问题

其实我不喜欢用FIFO,我做的是485从机,实时回复时序要求很高的

离线

#5 2022-02-17 17:05:47

shadowbubble
会员
注册时间: 2022-02-17
已发帖子: 0
积分: 0

Re: CH579M串口接收问题

该评论内容与本帖子无关,鼓励各位坑友积极发言讨论与帖子有关的内容!

离线

  • 不通过:其他

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn