📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
**
** 工控事业部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: main.c
** 创 建 人: 甘达
** 最后日期: 2005年4月28日
** 描 述: UART0收发演示程序。
**
** 实验现象: 在SmartARM2200运行本程序,使用串口助手发送数据给SmartARM2200的UART0,波特率为115200Bps。
** SmartARM2200应当以512字节为单位,原包返回数据。
**
** 设置说明: Flash => Bank0; PSRAM => Bank1; LPC2210; Start address 0x80000000, Memory size 0x00200000;
** 由于本工程已经升级,用户无论在何种模式调试,以上跳线和AXD设置均不需要改变。
**
** 驱动特点: UART0驱动收发方式均使用FIFO,工作于中断方式。因此UART0收发均在后台自动完成,与用户程序无关。
**
** 交互模型: PC <=> UART0中断服务程序 <=> 缓冲池(消息队列) <=> 用户程序
**
** 技术支持: 本程序(代码)仅用于教学目的,对于客户的修改和商业化移植工作不提供任何技术支持。
**
** 声 明: 广州周立功单片机发展有限公司不提供任何类型的担保。不论是明确的,还是隐含的。
** 包括但不限于合适特定用途的保证。全部的风险,由使用者来承担。如果程序出现缺陷,
** 使用者承担所有必要的服务、修改和改正的费用。
**
** 注意事项: uCOS II 2.52源代码及"uCOS II"标识均属Micrium公司所有。
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创 建 人: 甘达
** 版 本: v1.0
** 日 期: 2005年4月28日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修 改 人: 甘达
** 版 本: v1.0
** 日 期: 2005年8月31日
** 描 述: 用于SmartARM2200的UART0中断工作方式的评估。BEEP报警指示缓存满载,LED指示接收缓存负载状况。
** 修改LED和BEEP相关代码即可用于MagicARM2200和EasyARM2200。
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
#define TASK_STK_SIZE 64
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK Task0Stk[TASK_STK_SIZE];
uint8 Buf_Global[1024];
void TaskStart(void *pdata);
void Task0(void *pdata);
/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: OSInit,OSTaskCreate,OSStart
**
** 作 者: 甘达
** 日 期: 2005年8月31日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main (void)
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart();
return 0;
}
/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任。
** 将接收到的数据原包发回给PC。
** 输 入: 无
** 输 出: 无
** 全局变量: Buf_Global
** 调用模块: UART0_ReceiveNByte,UART0_SendNByte
**
** 作 者: 甘达
** 日 期: 2005年8月31日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TaskStart(void *pdata)
{
pdata = pdata; // 避免编译警告
OSTaskCreate(Task0, (void *)0, &Task0Stk[TASK_STK_SIZE - 1], 1);
TargetInit(); // 目标板初始化
while(1)
{
if(TRUE == UART0_ReceiveNByte(Buf_Global, 512)) // 如果能够成功在接收缓冲池获取512字节数据
{
UART0_SendNByte(Buf_Global, 512); // 那么将此512字节数据压入发送缓冲池
}
OSTimeDly(OS_TICKS_PER_SEC/30);
}
}
/*********************************************************************************************************
** 函数名称: Task0
** 功能描述: 显示当前缓冲池状况,如果缓冲池满,则BEEP报警。
** 输 入: 无
** 输 出: 无
** 全局变量:
** 调用模块: QueueSize,QueueNData,OSTimeDly
**
** 作 者: 甘达
** 日 期: 2005年8月31日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Task0(void *pdata)
{ uint32 size, n;
pdata = pdata; // 避免编译警告
while(1)
{
size = QueueSize((void *)UART0_ReceiveBuf); // 获取接收缓冲池总容量
n = QueueNData((void *)UART0_ReceiveBuf); // 获取接收缓冲池当前数据量
// size = QueueSize((void *)UART0_SendBuf); // 获取发送缓冲池总容量
// n = QueueNData((void *)UART0_SendBuf); // 获取发送缓冲池当前数据量
if(n < size - 1)
{
IO2CLR = ( (n<<4)/size ) << 28;
OSTimeDly(OS_TICKS_PER_SEC/5);
IO2SET = 0xffffffff;
}
else
{
IO2CLR = 0xffffffff;
IO0CLR = BEEP;
OSTimeDly(OS_TICKS_PER_SEC/10);
IO0SET = BEEP;
OSTimeDly(OS_TICKS_PER_SEC/5);
}
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -