Copyright (c) 2014 苏州大学飞思卡尔实验室(版权声明)
All rights reserved.

《AMQXFW_Example》工程说明
时          间：2014-08-12  
版          本：V3.0
作          者：白聪

1. 工程概述
(1)本工程为K60微控制器MQX系统应用工程，提供实现基于MQX中断框架的串口中断服务例程
(2)初始化串口4作为默认通信设备与外界通信，波特率为115200，1位停止位，无校验;
(3)用串口4接收中断指定格式数据(以0xAA开头和0x55结尾的字符串)，接收指定帧格式的数据帧。
(4)7个任务，分别为主任务、解帧任务、LED任务、ADC任务、RTC任务、FLASH任务和UART任务。
    task_main:开总中断，系统自启动任务，完成全局变量初始化（如轻量级信号量）、外设初始化、创建其他任务、安装用户ISR。
    task_decode:将由串口4接收到的完整帧数据分别拷贝到LED模块、ADC模块、RTC模块和FLASH模块各自的缓冲区，并设置各个模块任务的事件位。
    task_run_LED:主要功能是用以控制K60-C板上的四盏LED灯。首先解析发给LED模块的帧命令，控制K60-C板上的四盏LED灯的某一盏。本任务中运用了轻量级日志，先将这6个32位的数据逐一写入一则日志条目中，再从该日志中将数据读取出来放入一个局部变量的数组中，最后将数据放入到轻量级发送消息队列中。
    task_run_UART:将处理过后的数据帧发送至PC机。为了防止帧数据包含帧头帧尾类型的数据，要对帧数据增加转义字符。本任务从轻量级发送消息队列中取出数据，然后调用转义函数对其增加转义字符。把各个任务的存放数据的全局数组元素定义为32位的，是因为MQX提供的轻量级消息队列操作（_lwmsgq_send、_lwmsgq_receive）的数据单位为32位。加转义字符过程中之所以把32位的数据强制类型转化为8位的数据，是因为UART4与PC方测试程序实际操纵的数据是以字节为单位，而不是以字为单位，每个字的高24位并未使用。FLASH任务中对FLASH的写读操作（write、read）以字节为单位，其中也涉及到8位数据与32位数据的相互转换。
    task_run_ADC：主要功能是通道初始化和AD数据采集。根据帧数据中与ADC模块相关的命令字段来区分是通道初始化操作还是AD数据采集操作。通道初始化操作的模块号与通道号来自PC方界面的选项，默认情况下，采样位数定为16位，采样次数为10次。此操作不反馈初始化成功与否的信息，可通过把相应通道所对应的硬件引脚接地或接VCC来判断初始化成功与否。AD数据采集操作将从最新初始化过的AD通道中采样数据，并在该操作的最后，将采样数据放入到轻量级发送消息队列中。
    task_run_RTC:主要功能是时间对表和回发当前RTC时间。PC方与MCU方共同以2014年5月1日0时0分0秒0毫秒作为公共参考时间，这两种操作实际上操纵的都是相对于公共参考时间的相对秒数，只是PC方把相对秒数转换过后显示绝对时间，如PC方时间为2014年5月1日0时0分10秒0毫秒，减去公共参考时间，为10（相对秒数）。通过帧数据发给MCU，假如MCU在获取RTC时间为2014年5月1日0时0分12秒0毫秒，减去公共参考时间，为12，把该数据发给PC，PC把12转换过后显示出来。实际上延时很短，低于0.5秒，延时2秒仅为举例使用。时间对表也不回发数据，对表正确性与否可通过回发当前RTC时间操作在PC方的显示的时间信息来判断。该任务最后，将实时时钟的相关帧数据放入到轻量级发送消息队列中。
    task_run_FLASH：主要功能是向FLASH写入数据和从FLASH读取数据。在该例子中FLASH功能较为简单，不提供FLASH随机读写。读写操作的FLASH区域是在FLASH的块0的最后若干个字节，长度取决于FLASH模块的帧数据内容。块0的范围是0x00000000~0x0003FFFF。基于FLASH特性，写入到FLASH中的数据，可在MCU断电之后读取FLASH中的数据，该数据为断电之后最后写入到FLASH区域中的数据。该任务最后，将FLASH的帧数据放入到轻量级发送消息队列中。

(6)系统使用外部扩展50M有源晶振，工作时钟总线频率为100M。(jjw)

2. 软件环境
(1)Freescale Kinetis Design Studio v1.1.0
(2)Freescale MQX 4.1.0

3. 硬件环境
(1)K60-C型板
(2)串口4发送引脚为PTE24,接收引脚为PTE25
(3)串口5发送引脚为PTD9,接收引脚为PTD8
(4)串口转USB接线：白色：发送线(Tx,Transmitter);绿色：接收线(Rx,Receive);黑色：地线

4. 实验现象
本程序另提供了C#控制界面，将本程序烧录到MCU，给MCU供电、连接完串口线之后，复位MCU，在C#控制界面“打开串口”，即可实现对MCU的部分硬件， 模块的测试。点击相应的按钮，发送与接收的数据帧就会显示在串口的“显示框”。