This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/F28M36H53C2:F28M36H53C2:UART RX FIFO

Guru**** 2556980 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/631261/compiler-f28m36h53c2-f28m36h53c2-uart-rx-fifo

部件号:F28M36H53C2

工具/软件:TI C/C++编译器

您好,

我遇到了UART FIFO的配置问题。

我的UART配置为fallow:

void BSL_UartInit()
{//Initialize
	the UART
	//设置波特率=11.52万
	//数据位数=8
	//关闭奇偶校验
	//停止位数=1
	UARTConfigSetExpClk(UART0_Base,CparliRegisters ClockSet(system_Clock_speed),11.52万,(FIFT_CONFIG_WLEN_OT_STOP_UART0_ST_UART0),
			
	启用UART0_REGIT_UARTNO_UART0
	
	
	
	//启用UART中断
	UARTIntEnable (UART0_BAS, UART_INT_RX |/*UART_INT_RT |*/ UART_INT_BE);
	//启用UART
	UARTEnable(UART0_BASE);

	UartTxFS.status = UART_TX_FSM_IDLE;
}

所以我编写以下代码从UART接收数据:

#define UART_RX_BUF_LENGTH (32)
#define UART_ADDRESS	(0x10)
#define end_byte 0x7E

struct {
	
		UART_TX_FSM_IDE,
		UART_TX_FSM_TX_BREAK,
		UART_TX_FSM_TX_DATA
	}状态;
	unsigned buf[UART_TX_CH_LENG_F_FIC_LENG_F_F_FICH_FICH_
	
	//unsigned char len;
	unsigned int len;
} UartTxfsm;

struct {
	int idx;
	int timeout;
	int error;
	unsigned char buf[UART_RX_BUF_length];
	int len
;} UartRx;

void UartIntHandler(void)
{
	unsigned long status;
	char数据;
	unsigned char ck = 0xff;

	//收到中断
	IF (STATUS和UART_INT_be)
	{
		UARTCLEAR(UART0_BASE,UART_INT_BE);
		数据= UARTCharGetNonBlocking (UART0_BASE );//丢弃空数据
		UartRx.idx = 0;
		UARTRX.UART.UART.Error = 0;
		UARTR_INT_BASE / UART0
	

	
	
		
		
	

	
	
		
		
		IF (UartRx.idx == UART_RX_BUF_length || data & 0x0万f00)
			UartRx.error = 1;
		else
		{
			UartRx.idx++;
			UartRx.buf[UartRx.idx]= data & 0x0万ff;
			ck += data;
		}

} 

最后,UartRx.buff仅包含0x7E值,即从其它设备发送的最后一个值。

我错过了什么吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Daniel:

    感谢您提供详细信息。 此线程已分配给C2000专家,应很快得到解答。

    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel,

    如果您只发送一半的数据,那么您的缓冲区中是否仅显示最后一个字,会发生什么情况?

    它降落在缓冲区中的哪个位置,它是在第一个点还是在正确的idx位置?  

    UartRx结构是否为本地结构,并且每次您离开ISR时都要重置?

    可能UartRX或它的某些变量正被代码的其他部分重置?

    尝试逐步执行代码,希望它能帮助您进行调试。


    此致,
    科迪  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Cody,谢谢。

    即使我只发送三个数据,并且“0x7E”在缓冲区中的位置始终是第一个,也存在问题。
    UartRx结构仅在UART.C.中定义

    如果我在调试模式下从另一台设备发送数据阵列,我将收到所有数据。 波特率与11.52万相同。

    此致,
    丹尼尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Daniel,
    什么是"调试模式"?

    请使用示波器在传输时查看Rx和Tx线路,并验证数据是否正确发送。

    此致,
    科迪