当UART接收的数据为不定长度时,那么该如何判断一帧数据的结束呢?我们可以使用IDLE LINE功能来判断。
同事Ji Cheng在其博客http://blog.chinaaet.com/detail/40378介绍了如何在KL26上使用这个功能,本博客在Freescale Cortex-M4核芯片K22上实现IDLE LINE功能。我这里完成的功能是:串口1使用中断方式接收数据,在接收中断服务函数中将接收到的数据再发送出去,当接收完一帧数据后,进入IDLE 中断并打印信息,以表示一帧数据的结束。
测试平台: FRDM_K22F + MQX4.2
BSP中改动的地方有:
1). user_config.h中,

打开UART1的中断功能

#define BSPCFG_ENABLE_ITTYB                       0        改为:         #define BSPCFG_ENABLE_ITTYB                       1 

2). serial.h中,添加

#define IO_IOCTL_SERIAL_ENABLE_IDLE       _IO(IO_TYPE_SERIAL,0x1F)

3). serl_pol_kuart.c中,_kuart_polled_ioctl()函数中添加:

  case IO_IOCTL_SERIAL_ENABLE_IDLE:if( *(bool *)param_ptr == TRUE ){/* enable idleline */sci_ptr->C2 |= UART_C2_ILIE_MASK;                                                                              sci_ptr->C1 |= UART_C1_ILT_MASK;}else{/* disable idleline */sci_ptr->C2 &= ~UART_C2_ILIE_MASK;}break;

本例程直接在hello.c文件中修改:

#include <mqx.h>
#include <bsp.h>
#include <fio.h>#if ! BSPCFG_ENABLE_IO_SUBSYSTEM
#error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined non-zero in user_config.h. Please recompile BSP with this option.
#endif#ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED
#error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h and recompile BSP with this option.
#endif/* Task IDs */
#define HELLO_TASK 5extern void hello_task(uint32_t);const TASK_TEMPLATE_STRUCT  MQX_template_list[] =
{ /* Task Index,   Function,   Stack,  Priority, Name,     Attributes,          Param, Time Slice */{ HELLO_TASK,   hello_task, 1500,   8,        "hello",  MQX_AUTO_START_TASK, 0,     0 },{ 0 }
};void UART1_RX_ISR(void);
/*TASK*-----------------------------------------------------
*
* Task Name    : hello_task
* Comments     :
*    This task prints " Hello World "
*
*END*-----------------------------------------------------*/
void hello_task(uint32_t initial_data)
{(void)initial_data; /* disable 'unused variable' warning */uint32_t result;MQX_FILE_PTR uart1_dev = NULL;bool enable_idleline = TRUE;printf("Hello World\n"); uart1_dev=fopen( "ittyb:", NULL);if( uart1_dev == NULL ){/* device could not be opened */_task_block();}/* wait for transfer complete flag */result = ioctl( uart1_dev, IO_IOCTL_SERIAL_ENABLE_IDLE, &enable_idleline );if( result == IO_ERROR_INVALID_IOCTL_CMD ){/* ioctl not supported, use newer MQX version */_task_block();}_int_install_isr(INT_UART1_RX_TX, UART1_RX_ISR,NULL); _task_block();
}void UART1_RX_ISR(void)
{uint8_t Receive_data;/* Rx */if((UART1_BASE_PTR->S1 & UART_S1_RDRF_MASK)){Receive_data = UART1_BASE_PTR->D;while(!(UART1_BASE_PTR->S1 & UART_S1_TDRE_MASK));UART1_BASE_PTR->D = Receive_data;}/*  IDLE interrupt */if(UART1_S1&UART_S1_IDLE_MASK)// if IDLE Line interrupt occured{// clear interrupt flag; To clear IDLE, read UART status S1 with IDLE set and then read DUART1_S1 |= UART_S1_IDLE_MASK;Receive_data=(uint8_t)(UART1_BASE_PTR->D); printf("\r\nGo to Idle line\r\n");}}/* EOF */

最终实验现象为:

K22中使用UART的IDLE Line功能相关推荐

  1. linux文件删除指定内容,Linux bash删除文件中含“指定内容”的行功能示例

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...

  2. linux删除具有指定内容的文件,Linux bash删除文件中含“指定内容”的行功能示例...

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...

  3. Java中System.getProperty()方法具有什么功能呢?

    转自: Java中System.getProperty()方法具有什么功能呢? 下文笔者讲述Java中System.getProperty()方法的功能简介说明,如下所示: System.getPro ...

  4. mysql2008 limit,在SQL Server中实现 Limit m, n 的功能

    在SQL Server中实现 Limit m, n 的功能 (2012-03-14 18:17:43) 标签: 杂谈 在MySQL中,可以用 Limit 来查询第 m 列到第 n列的记录,例如: se ...

  5. Nature :全球表层土壤中微生物组的结构和功能

    文章目录 Structure and function of the global topsoil microbiome 全球表层土微生物组群落结构和功能 热心肠日报导读 摘要 正文 **图1. 真菌 ...

  6. R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line)

    R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line) 目录 R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line)

  7. python使用matplotlib可视化、查看matplotlib中常用的线条形式(line style)和数据点标记形状(marker)

    python使用matplotlib可视化.查看matplotlib中常用的线条形式(line style)和数据点标记形状(marker) 目录

  8. Matplotlib可视化散点图、配置X轴为对数坐标、并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib)

    Matplotlib可视化散点图.配置X轴为对数坐标.并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib) 目录

  9. 在FCKeditor 2.6中添加插入视频和音频功能

    2019独角兽企业重金招聘Python工程师标准>>> 本文转载 在FCKeditor 2.6中添加插入视频和音频功能 这里有两种方式,一是自己修改,二是使用插件 1.自己修改 FC ...

最新文章

  1. ggplot2笔记3:工具箱——误差线、加权数、展示数据分布
  2. 美国防承包商博思艾伦泄露五角大楼相关敏感文件
  3. 节点操作-创建并添加删除节点替换克隆节点
  4. LeetCode175 组合两个表
  5. python怎么读取石墨表格_Python用Pandas读写Excel
  6. html页面左右布局透明背景,HTML透明背景
  7. bfc是什么_清除浮动和 BFC
  8. 32.768KHz晶振DST310S成就时钟产业的无限可能
  9. FPGA、AD9371、AD9009、RF SOC介绍
  10. docker中启动Springboot时异常之Failed to instantiate [com.zaxxer.hikari.HikariDataSource]
  11. opencv python 灰度化,opencv-python 图像灰度化
  12. 聊聊pert图的那些事儿~
  13. iOS公司开发者账号申请 营业执照
  14. Fiddler+手机模拟器+java采集抖音评论数据
  15. 设置RecyclerView某Item背景色
  16. 实现一个脚本引擎(燕良译)- -
  17. 争做社会主义接班人!!!
  18. 使用Guardium和WebSphere Application Server监视应用程序用户的数据库活动
  19. 计算机会议在美国的英语文章,英文一篇计算机国际会议的开幕词
  20. JavaScript核心基础总结笔记

热门文章

  1. Rider去除警告波浪线设置
  2. java下载m3u8视频,解密并合并ts(二)
  3. 面试学习+刷题笔记分享-屌丝的逆袭之路,2年5个月13天,从外包到拿下阿里offer
  4. 怎样才能像专业人士一样在多个PDF文件中搜索
  5. 【设计模式】我对设计模式的C语言解读(上)
  6. python实现excel数据与mysql数据库互通有无
  7. 解决Win11或Win10版本配置IDEA的JDK1.8的版本以及java环境是否成功配置的问题
  8. 从零学习 InfiniBand-network架构(二) —— 属性与管理器
  9. 工业机器人 郝卫东_川崎焊接机器人控制系统设计开发
  10. Linux-linux系统函数