完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我从资料中看到有FIFO触发级别的,分别是1Byte,2,4,8,16...但是NUC029LAN的库函数好像没有关于这个的函数啊,是不是不支持FIFO级别触发?
寄存器的代码定义如下,但是没找到相关的函数: /*---------------------------------------------------------------------------------------------------------*/ /* UA_FCR constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_FCR_RFITL_1BYTE (0x0 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 1 byte */ #define UART_FCR_RFITL_4BYTES (0x1 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 4 bytes */ #define UART_FCR_RFITL_8BYTES (0x2 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 8 bytes */ #define UART_FCR_RFITL_14BYTES (0x3 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 14 bytes */ |
|
相关推荐
1个回答
|
|
NUC029LAN的串口模块确实支持FIFO接受触发级别,具体的触发级别可以参考数据手册中的相关章节。在使用库函数时,可以使用UART_EnableInt()函数来启用串口中断,然后在串口中断处理函数中进行数据的接收和处理。
下面是一个简单的示例代码,演示了如何使用UART_EnableInt()函数和串口中断处理函数来实现FIFO接受触发级别的功能: ``` #include "NUC029LAN.h" #define UART_BUFFER_SIZE 64 volatile uint8_t g_u8RxBuffer[UART_BUFFER_SIZE]; volatile uint32_t g_u32RxIndex = 0; void UART_IRQHandler(void) { uint8_t u8InChar = 0xFF; // Check RX interrupt flag if (UART_GET_INT_FLAG(UART1, UART_ISR_RDA_INT_Msk)) { // Read character from RX FIFO u8InChar = UART_READ(UART1); // Check for buffer overflow if (g_u32RxIndex < UART_BUFFER_SIZE) { g_u8RxBuffer[g_u32RxIndex++] = u8InChar; } } } int main(void) { // Enable UART module clock CLK_EnableModuleClock(UART1_MODULE); // Select UART module clock source CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART1SEL_HXT, CLK_CLKDIV_UART1(1)); // Configure UART pins SYS->PC_L_MFP &= ~(SYS_PC_L_MFP_PC14_MFP_Msk | SYS_PC_L_MFP_PC15_MFP_Msk); SYS->PC_L_MFP |= (SYS_PC_L_MFP_PC14_MFP_UART1_RX | SYS_PC_L_MFP_PC15_MFP_UART1_TX); // Configure UART UART_Open(UART1, 115200); // Enable RX FIFO trigger level UART_SetFIFO(UART1, UART_FIFO_RFITL_4BYTES); // Enable UART interrupt UART_EnableInt(UART1, UART_IER_RDA_IE_Msk); // Enable NVIC UART IRQ NVIC_EnableIRQ(UART_IRQn); // ... Main program ... return 0; } ``` 在主程序中,可以使用while循环来读取串口接收缓存区中的数据: ``` while (g_u32RxIndex > 0) { uint8_t u8Data = g_u8RxBuffer[0]; // Process received data // Remove data from RX buffer g_u32RxIndex--; for (int i = 0; i < g_u32RxIndex; i++) { g_u8RxBuffer[i] = g_u8RxBuffer[i+1]; } } ``` 需要注意的是,在实际使用中需要根据串口的波特率、数据位、停止位、校验位等参数来配置UART_Open()函数,以确保正确的数据传输。此外,还需要根据实际情况设置UART_SetFIFO()函数中的FIFO trigger level参数,以达到最优的接收性能。 |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1178浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 04:43 , Processed in 1.356084 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号