一、实验目的
熟悉 LPC2000 系列 ARM7 微控制器的UART0基本设置及应用,AD的基本功能设置及应用。
二、实验设备
硬件:PC 机 一台、EasyARM2013 开发板 一套
软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境,EasyARM串口软件
三、实验内容
使用UART0通讯,通过上位机发出启动AD的指令,当核心处理器接收到指令后,启动AD,并将AD到的数据通过串口UART0,发送到上位机进行显示。
四、实验预习要求
仔细阅读教材关于UART的设置使用说明。AD的设置与应用。
UART接口接收流程图如下
五、实验步骤
1. 启动 ADS 1.2,使用 ARM Executable Image for lpc2103 工程模板建立一个工程AD_UART。
2. 在工程的 user 中的main文件中编写实验程序。
3. 选用 DebugInRAM生成目标,然后编译连接工程。
4. 将 EasyARM2103 开发板上的P0.0、P0.1短接,即实现处理器与UART模块的连接。
5. 将 EasyARM2103 开发板上的P0.22与1.8V的电源短接。
6. 选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。
7. 可以全速运行程序,输入指令,查看结果。
8. 更改程序,改变上位机中的输出内容。
六、实验参考程序
程序清单 AD采样实验程序清单
#include "config.h"
# include <stdio.h>
# define UART_BPS 115200 /* 串口通信波特率 */
/******************************************************************************
** 函数功能:延时函数
** 输出参数:无
******************************************************************************/
void DelayNS (uint32 uiDly)
{
uint32 i;
for (; uiDly > 0; uiDly--){
for(i = 0; i < 50000; i++);
}
}
/******************************************************************************
** 函数名称:UARTInit
** 函数功能:串口初始化,设置为8 位数据位,1 位停止位,无奇偶校验,波特率为 9600
** 输入参数:uiDly 值越大,延时时间越长
** 输出参数:无
******************************************************************************/
void UARTInit (void)
{
uint16 uiFdiv;
U0LCR = 0x83; /* 允许设置波特率 */
uiFdiv = (Fpclk / 16) / UART_BPS; /* 设置波特率 */
U0DLM = uiFdiv / 256;
U0DLL = uiFdiv % 256;
U0LCR = 0x03; /* 锁定波特率 */
}
/******************************************************************************
** 函数名称:UART0GetByte
** 函数功能:从串口接收 1 字节数据,使用查询方式接收
** 输入参数:无
** 输出参数:无
** 返回参数:uiRcvData 接收到的数据
******************************************************************************/
uint8 UART0GetByte (void)
{
uint8 uiRcvData;
while ((U0LSR & 0x01) == 0); /* 等待接收标志置位 */
uiRcvData = U0RBR; /* 读取数据 */
return (uiRcvData);
}
/******************************************************************************
** 函数名称:UART0GetStr
** 函数功能:串口接收字符串
** 输入参数:uiStr 指向接收数据数组的指针
** uiNum 接收数据的个数
** 输出参数:无
******************************************************************************/
void UART0GetStr(uint8 *uiStr, uint32 uiNum)
{
for (; uiNum > 0; uiNum--){
*uiStr++ = UART0GetByte ();
}
}
/******************************************************************************
** 函数名称:UART0SendByte
** 函数功能:向串口发送子节数据,并等待数据发送完成,使用查询方式
** 输入参数:uiDat 要发送的数据
** 输出参数:无
******************************************************************************/
void UART0SendByte (uint8 uiDat)
{
U0THR = uiDat; /* 写入数据 */
while ((U0LSR & 0x40) == 0); /* 等待数据发送完毕 */
}
/******************************************************************************
** 函数名称:UART0SendStr
** 函数功能:向串口发送字符串
** 输入参数:uiStr 要发送的字符串指针
** 输出参数:无
******************************************************************************/
void UART0SendStr(char const *uiStr)
{
while (1){
if (*uiStr == '\0')break; /* 遇到结束符,退出 */
UART0SendByte (*uiStr++);
}
}
/******************************************************************************
** 函数名称 :ADC_Init()
** 函数功能 :ADC模块初始化
** 入口参数 :无
** 出口参数 :无
******************************************************************************/
void ADC_Init(void)
{
AD0CR = (1 << 0) | /* 选择通道0 */
(((Fpclk / 1000000) - 1) << 8) | /* 转换时钟为 1MHz */
(0 << 16) | /* BURST = 0,软件控制转换操作 */
(0 << 17) | /* CLKS = 0,使用 11clock 转 */
(1 << 21) | /* PDN = 1,正常工作模式 */
(0 << 22) | /* TEST = 0,正常工作模式 */