打印

LPC2131的一个小问题!请指教?

[复制链接]
1325|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
李敬宁|  楼主 | 2009-4-10 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的周立功的学习板,在做URAT0串口中断例程是出现了一些如下的问题:
compiling main.c...
MAIN.C(46): error C25: syntax error near '__irq'
MAIN.C(47): warning C35: 'IRQ_UART0': uses old-style declarator
MAIN.C(154): warning C140: 'IRQEnable' undefined; assuming 'extern int IRQEnable()'
Target not created
程序是这样的:

/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:            main.c
** Last modified Date:  2004-09-16
** Last Version:        1.0
** Descriptions:        The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:            Chenmingji
** Created date:        2004-09-16
** Version:                1.0
** Descriptions:        The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:            Chenxibing
** Modified date:        2005-01-17
** Version:
** Descriptions:        UART0通讯实验,中断方式,使用FIFO。
**
********************************************************************************************************/
#include "config.h"

/* 定义串口模式设置数据结构 */
typedef struct UartMode
{
    uint8 datab;        // 字长度,5/6/7/8可选
    uint8 stopb;        // 停止位,1/2可选
    uint8 parity;        // 奇偶校验位,0-无校验,1-奇校验,2-偶校验
}UARTMODE;

uint8 rcv_buf[8];        // UART0数据接收缓冲区
volatile uint8 rcv_new;    // 接收新数据标志

/*
*********************************************************************************************************
** 函数名称 :IRQ_UART0()
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_UART0 (void)
{
    uint8 i;
    
    if ((U0IIR & 0x0F) == 0x04)    
        rcv_new = 1;            // 设置接收到新的数据标志
    for (i=0; i<8; i++)
    {
        rcv_buf = U0RBR;        // 读取FIFO的数据,并清除中断    
    }
    VICVectAddr = 0x00;            // 中断处理结束
}

/*
*********************************************************************************************************
** 函数名称 :UART0_SendByte()
** 函数功能 :向串口0发送1字节数据
** 入口参数 :dat    要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendByte (uint8 dat)
{
    U0THR = dat;    // 要发送的数据
}

/*
*********************************************************************************************************
** 函数名称 :UART0_SendBuf()
** 函数功能 :向串口发送8字节数据
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendBuf (void)
{
    uint8 i;
    
    for (i=0; i<8; i++)
        UART0_SendByte(rcv_buf);
    while ((U0LSR & 0x20) == 0);    // 等待数据发送完毕
}

/*
*********************************************************************************************************
** 函数名称 :UART0_Init()
** 函数功能 :串口初始化,设置工作模式和波特率。
** 入口参数 :baud    波特率
**              set    模式设置(UARTMODE数据结构)
** 出口参数 :1-初始化成功,  0-初始化失败
*********************************************************************************************************
*/
int8 UART0_Init (uint32 baud, UARTMODE set)
{
    uint32 bak;
    
    /* 参数过滤 */
    if ((baud ==0 ) || (baud > 115200))    return (0);
    if ((set.datab <5) || (set.datab > 8))    return (0);
    if ((set.stopb == 0) || (set.stopb > 2))     return (0);
    if (set.parity > 4)    return (0);
    
    /* 设置串口波特率 */
    U0LCR = 0x80;                        // DLAB = 1    
    bak   = (Fpclk >> 4) / baud;
    U0DLM = bak >> 8;
    U0DLL = bak & 0xFF;
    
    /* 设置串口模式 */
    bak   = set.datab - 5;                // 设置字长
    if (set.stopb == 2)    bak |= 0x04;    // 判断是否为2位停止位
    
    if (set.parity != 0)
    {
        set.parity = set.parity - 1;
        bak |= 0x08;
    }
    bak |= set.parity << 4;                // 设置奇偶校验
    
    U0LCR = bak;
    
    return (1);
}


/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :从串口UART0接收字符串"ABCDEFGH",并发送回上位机显示。
** 调试说明 :需要PC串口显示终端软件如EasyARM.exe。
*********************************************************************************************************
*/
int main (void)
{
    UARTMODE set;

    set.datab  = 8;
    set.stopb  = 1;
    set.parity = 0;
    
    rcv_new = 0;
    
    PINSEL0 = 0x00000005;                // 设置I/O连接到UART0
    
    UART0_Init(115200, set);            // 串口初始化
    U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8字节
    U0IER = 0x01;                        // 允许RBR中断,即接收中断
    
    IRQEnable();                        // 使能IRQ中断
    /* 使能UART0中断 */
    VICIntSelect = 0x00000000;            // 设置所有的通道为IRQ中断
    VICVectCntl0 = 0x20 | 0x06;            // UART0分配到IRQ slot0,即最高优先级
    VICVectAddr0 = (uint32)IRQ_UART0;    // 设置UART0向量地址
    VICIntEnable = 1 << 0x06;            // 使能UART0中断

    while (1)
    {
        if (rcv_new == 1)
        {    
            rcv_new =0;
            UART0_SendBuf();
        }
    }
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

相关帖子

沙发
李敬宁|  楼主 | 2009-4-14 11:10 | 只看该作者

为什么没有人指都呀!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

32

帖子

0

粉丝