|
用查询方式能够成功实现通信,但是用中断总是出不来!!
找高人指点一下!!谢谢
#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周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|