搜索
bottom↓
回复: 3

TL16C550与dsp的异步串口通信

[复制链接]

出0入0汤圆

发表于 2012-10-23 21:44:27 | 显示全部楼层 |阅读模式
用查询方式能够成功实现通信,但是用中断总是出不来!!

找高人指点一下!!谢谢
#define UART_BASE_ADDR                0x90120000
#define MCWA            *(int *)0x90100008//外扩寄存器地址MCWA,D3 到 D0 有效
#define OFFSET              2
#define RBR                                        *((short *)(UART_BASE_ADDR+0*OFFSET))//        接收缓冲寄存器 RBR
#define THR                                        *((short *)(UART_BASE_ADDR+0*OFFSET))//        发送缓冲寄存器 THR
#define IER                                        *((short *)(UART_BASE_ADDR+1*OFFSET))//中断始能寄存器IER
#define IIR                                        *((short *)(UART_BASE_ADDR+2*OFFSET))//        中断标志寄存器IIR
#define FCR                                        *((short *)(UART_BASE_ADDR+2*OFFSET))//        FIFO 控制寄存器 FCR
#define LCR                                        *((short *)(UART_BASE_ADDR+3*OFFSET))//线路控制寄存器  LCR
#define MCR                                        *((short *)(UART_BASE_ADDR+4*OFFSET))//MODEM 控制寄存器 MCR
#define LSR                                        *((short *)(UART_BASE_ADDR+5*OFFSET))//线路状态寄存器  LSR
#define MSR                                        *((short *)(UART_BASE_ADDR+6*OFFSET))//MODEM 状态寄存器 MSR
#define SCR                                        *((short *)(UART_BASE_ADDR+7*OFFSET))//暂存寄存器 SCR
#define DLL                                        *((short *)(UART_BASE_ADDR+0*OFFSET))//低位除数寄存器 DLL
#define DLM                                        *((short *)(UART_BASE_ADDR+1*OFFSET))// 高位除数寄存器 DLM   
#define CECTL1                    *((long *)0x01800004) // 定义EMIF CE1的地址
void wait();
       


//char cString[17]={ "Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"};
//int bReceive,nLen;

main()
{
   
        MCWA=0x00080008;
        LCR = 0x80; //使能波特率设置寄存器。DLAB=1.访问除数和功能切换寄存器,奇校验,奇偶校验无效,一个停止位,数据长度5位
        DLL = 0x18; // 波特率9600  
        DLM = 0x00;  
        LCR = 0x03;  // 设置数据格式:无校验,一个停止位,数据长度8位
        FCR = 0x01;//允许FIFO
        MCR = 0x08;//MODE控制
        IER = 0x01; // 使能接收就绪中断   
    InitInterrupt();
    while(1)
         {}
       
}
          
void interrupt XINT4()        //中断响应函数
{
    unsigned int uWork;
    while(LSR&0x01) //接收数据就绪
        {
           uWork=RBR&0xff;//接收数据
           THR=uWork;  //将接收到的数据发送出去
        }

        FCR=0x03;//清空FIFO
}

void InitInterrupt(void)
{
        // 设置中断控制寄存器
        CSR&=0xfffffffe;        // 关中断 GIE=0
        ISTP=0x00000c00;        // 重置中断向量表到0C00h
           IMH=0x0;                        // 指定xint4中断
           IML=0x04;
           ICR=0xff;                        // 清除等待的中断
        IER=0x13;                        // 使能xint4中断
        CSR=CSR|1;                         // 开中断
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-10-23 22:47:52 | 显示全部楼层
上示波器,看中断信号出来了吗?没出来,就是配置问题,出来了,就是程序问题

出0入0汤圆

 楼主| 发表于 2012-10-24 18:58:35 | 显示全部楼层
就是看相应的的中断信号位的信号跳转情况吧!

出0入0汤圆

 楼主| 发表于 2012-10-24 21:34:24 | 显示全部楼层
搞定了,定义有问题,把#define IER                                        *((short *)(UART_BASE_ADDR+1*OFFSET))//中断始能寄存器IER
改一下,不然就把系统自带的IER覆盖了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 16:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表