打印
[ZLG-ARM]

可发送任意字节的UART0通信程序(Arm2131)

[复制链接]
1051|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
特洛一|  楼主 | 2007-8-3 19:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "config.h"

uint8 getnum;
uint8 rcv_buf[8];    
volatile uint8 rcv_new;                    // 接收新数据标志

void __irq IRQ_UART0 (void)
{
    if ((U0IIR & 0x0F) == 0x04)    
        rcv_new = 1;                     // 设置接收到新的数据标志
    
    getnum= U0RBR;
    VICVectAddr = 0x00;                    // 中断处理结束
}


void UART0_SendByte(void)
{
    
        U0THR=getnum;
    while ((U0LSR & 0x20) == 0);        // 等待数据发送完毕
}


int8 UART0_Init ()
{
    uint32 bak;                         /* 设置串口波特率 */
    U0LCR = 0x83;                        // DLAB = 1    
    bak=(Fpclk/16) / 9600;
    U0DLM = bak /256;
    U0DLL = bak %256;
    
    U0LCR = 0x03;    
}



int main (void)
{
    rcv_new = 0;
    
    PINSEL0 = 0x00000005;                // 设置I/O连接到UART0
     UART0_Init ();                     // 串口初始化
    U0FCR = 0x01;                        // 使能FIFO,并设置触发点为8字节
    U0IER = 0x01;                        // 允许RBR中断,即接收中断
    
    IRQEnable();                        // 使能IRQ中断
    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_SendByte();
        }
    }
    return 0;
}

相关帖子

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

本版积分规则

2

主题

2

帖子

1

粉丝