m0_37635022 2017-06-14 03:09 采纳率: 0%
浏览 966

查询方式的UART和外部中断的初始化会有冲突吗??求大神指教!!!!

void main(void)
{
int ch;
Uart_Init();
ch=getchar();
Uart_SentByte(ch);
//dm9000IrqInit();
dm_init();
}

void Uart_Init(void)
{
rGPACON=(rGPACON&~(0xff<<0))|(0x22<<0);//A口设置为UART
rGPAPUD=(rGPAPUD&~(0xff<<0))|(0x1<<0);//A口允许下拉
rULCON0=0x03;//设置传输帧格式
rUCON0=(0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);//选择时钟源及操作模式
rUMCON0=0x00;//屏蔽Medom
rUFCON0=0x01;//启用FIFO
rUBRDIV0=35;//设置波特率为115200,ARMclk为532M、MPLLOUT为266M、HCLKx2=133M、PCLK=66.5
rUDIVSLOT0=0x80;//为什么和是否配置时钟无关 是否用程序化初始化时钟都可以串口输出。
}
//接收字符程序
char getchar(void)
{
while((rUFSTAT0&0x7f)==0);
return rURXH0;
}
//发送字符程序
void Uart_SentByte(char data)
{
while(rUFSTAT0&(1<<14))
;//等待发送缓冲器空
//Timer0_yms(1);
rUTXH0=data;//向发送缓冲器写入数据
}

void dm9000IrqInit(void)
{
//GPIO配置
rGPNCON|=(0x2<<14);//设置GPN7用于EINT7
//EINT配置
rEINT0CON0=(rEINT0CON0 & ~(0xff<<0))|(0x22<<0)|(0x0<<12);//中断子服务寄存器初始化,EINT7低电平触发
rEINT0MASK=(rEINT0MASK & ~(0xff<<0))|(0x00<<0);//禁止屏蔽
rEINT0PEND=(rEINT0PEND & ~(0xff<<0))|(0xff<<0);//清除原有中断,读0代表没有中断,读1代表有中断,写1代表清除中断(不确定,一个博客上说的)
//VIC
rVIC0INTENCLEAR=(rVIC0INTENCLEAR & ~(0xff<<0))|(0x03<<0);//终端使能清除,0没有影响;1,清除相应位置的使能,即禁止中断(不确定为什么要先关中断)
//rVIC1INTENCLEAR=(rVIC1INTENCLEAR & ~(0xff<<0))|(0x00<<0);
rVIC0INTSELECT=(rVIC0INTSELECT & ~(0xff<<0))|(0x00<<0);//选择中断模式IRQorFRQ,EINT7为IRQ中断模式
//rVIC1INTSELECT=(rVIC0INTSELECT & ~(0xff<<0))|(0x00<<0);
rVIC0ADDRESS &= ~(0x03<<0);//清除系统中断,对应位写0或者1都行
rVIC0VECTADDR2=(unsigned int)AnsEint7;//设置中断入口地址
rVIC0INTENABLE=(rVIC0INTENABLE & ~(0xff<<0))|(0x03<<0);//中断使能
}
dm9000IrqInit会导致UART不能用是为什么啊!!!
//main函数很简单,只是进行串口初始化,接收字符并发送;然后DM9000IrqInit是对外部中断7进行初始化,dm9000是对dm9000这个芯片进行初始化;
//如上,如果将dm9000IrqInit()外部中断7的初始化注释掉,串口就可以正常使用,一旦加入dm9000IrqInit()就没有任何反应了。外部中断和UART还有冲突吗,为什么外部中断的初始化会导致UART不能用呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 怎么把多于硬盘空间放到根目录下
    • ¥15 Matlab问题解答有两个问题
    • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
    • ¥15 LCD12864中文显示
    • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
    • ¥15 gsoap生成onvif框架
    • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
    • ¥15 stm32的can接口不能收发数据
    • ¥15 目标检测算法移植到arm开发板
    • ¥15 利用JD51设计温度报警系统