刚接触2440,初步裸奔的,试着写,现在T0中断能响应,UART0中断不能响应,发送数据也不正常,请问应该检查哪里?弄好几天了,郁闷中。相关代码如下:
/*-----------------------------------------------------------------------------------------------------*/
void pll_init(void) //时钟初始化
{
rLOCKTIME=0xffff;
rCLKDIVN=(0<<3)|(2<<1)|1;
rUPLLCON=(56<<12)|(2<<4)|2;
rMPLLCON=(92<<12)|(1<<4)|1;
rCAMDIVN=0;
rCLKSLOW=(0<<7)|(0<<5)|(0<<4)|0x00;
rCLKCON=0xfffff0;
MMU_DisableICache();
MMU_DisableDCache();
}
/*-----------------------------------------------------------------------------------------------------*/
void port_init(void) //端口初始化
{
rGPACON = 0x7fffff;
rGPBCON = 0x155555;
rGPBUP = 0x7ff;
rGPCCON = 0xaaaaaaaa;
rGPCUP = 0xffff;
rGPDCON = 0xaaaaaaaa;
rGPDUP = 0xffff;
rGPECON = 0xaaaaaaaa;
rGPEUP = 0xffff;
rGPFCON = 0x55aa;
rGPFUP = 0x00;//0xff;
rGPGCON = 0xff95ffba;
rGPGUP = 0xffff;
rGPHCON = 0x2afaaa;
rGPHUP = 0x7ff;
rGPJDAT = (1<<12)|(0<<11);
rGPJCON = 0x016aaaa;
rGPJUP = ~((0<<12)|(1<<11));
rGPJDAT = (0<<12)|(0<<11);
rGPJCON = 0x016aaaa;
rGPJUP = 0x1fff;//~((1<<12)|(1<<11));
//External interrupt will be falling edge triggered.
rEXTINT0 = 0x22222222; // EINT[7:0]
rEXTINT1 = 0x22222222; // EINT[15:8]
rEXTINT2 = 0x22222222; // EINT[23:16]
}
/*-----------------------------------------------------------------------------------------------------*/
void uart_init(void) //串口初始化
{//uart0
//线性控制寄存器
rULCON0=(0<<7) | //保留
(0<<6) | //0=正常模式,1=红外收/发模式
(0x000<<3)| //0xx=无效验,100=奇效验,101=偶效验,110=强制为1,111=强制为0
(0<<2) | //0=1位停止位,1=2位停止位
0x11; //数据长度,00=5位,01=6位,10=7位,11=8位
//UART 控制寄存器
rUCON0=(0x00<<12) | //FCLK divider
(0x00<<10) | //波特率选择,00,10 = PCLK,01 = UEXTCLK,11 = FCLK/n UBRDIVn=(int)(UCLK/(bps*16))-1 //
(1<<9) | //发送中断类型:0=脉冲,1=电平
(0<<8) | //接收中断类型:0=脉冲,1=电平
(0<<7) | //是否使能接收超时中断:0=不允许,1=允许
(0<<6) | //是否允许接收错误状态时中断:0=不允许,1=允许
(0<<5) | //0=正常模式,1=回送模式
(0<<4) | //0=正常发送,1=发送打断信号
(0x01<<2) | //是否发送数据到发送缓冲器:00=不发送,01=中断请求,10=DMA0请求,11=DMA1请求
0x01; //是否从接收缓冲器中接收数据:00=不接收,01=中断请求,10=DMA0请求,11=DMA1请求
//UART FIFO 控制寄存器
rUFCON0=(0x00<<6) | //决定发送FIFO的触发等级:00=Empty,01=16-byte,10=32-byte,11=48-byte
(0x00<<4) | //决定接收FIFO的触发等级:00=1-byte,01=8-byte,10=16-byte,11=32-byte
(0<<3) | //Reserved
(0<<2) | //在重置FIFO后自动清除,0=Normal,1=Tx FIFO reset
(0<<1) | //在重置FIFO后自动清除,0 Normal,1=Rx FIFO reset
0; //FIFO Enable,0=Disable,1=Enable
//UART MODEM 控制寄存器
rUMCON0=(0x00<<5) | //这些位必须为0
(0<<4) | //Auto Flow Control (AFC): 0=无效,1=有效
(0x00<<1) | //这些位必须为0
0; //如果AFC位有效,则该值被忽略。在这种情况下S3C2440A将自动控制nRTS。如果AFC位无效,
//nRTS必须由软件控制。0 = 'H' level (去激活nRTS) 1 = 'L' level (激活nRTS)
//UART 波特率除数寄存器
rUBRDIV0=0x144;//波特率因子,UBRDIVn=(int)(PCLK/(baud*16))-1
pISR_TIMER0=(int)timer0_irq;
pISR_UART0=(int)uart0_irq;
//开IRQ,FIQ
CLR_IF();