本帖最后由 huzhiyang 于 2013-5-18 08:02 编辑
最近在用新塘的M054LBN的芯片,用的是3.3V的485芯片ADM3072E。不知道为什么,串口就是无法中断,还请各位用过的指教下:
#define UART0_Clock_EN APBCLK |= UART0_CLKEN // Enable UART0 clock
#define RX_POINTER_MAKS 0x3f<<8
unsigned char a[7] ={1,2,3,4,5,6,7};
//*********************************************************************************
void Send_byte_Data(unsigned char c)
{
UA0_THR =(unsigned char)c;
while ((UA0_FSR&TX_EMPTY) == 0);
}
//*********************************************************************************
void send_bytes_data(unsigned char* s)
{
do
{
Send_byte_Data(*s);
}while(*(s++) != '\0');
}
//*********************************************************************************
unsigned char Receive_Data(void)
{
while ((UA0_FSR&RX_EMPTY) != 0x00); //check Rx Empty
return ((unsigned char)UA0_RBR);
}
//*********************************************************************************
void UART0_IRQHandler(void)
{
led0_pwoer_on;
}
//*********************************************************************************
void UART_Init(void)
{
// Step 1. GPIO initial
P3_MFP &= ~(P31_TXD0 | P30_RXD0);
P3_MFP |= (TXD0 | RXD0);
IPRSTC2 |= UART0_RST; //Reset UART0
IPRSTC2 &= ~UART0_RST; //Reset end
// Step 2. Enable and Select UART clock source
UART0_Clock_EN;
CLKSEL1 |= (3<<24); //串口时钟源选用片内22M晶振
CLKDIV &= ~(15<<8);
// Step 3. Select Operation mode
UA0_FCR |= TX_RST; //Tx FIFO Reset
UA0_FCR |= RX_RST; //Rx FIFO Reset
UA0_FCR |= RFITL_1; //设置为1个字节触发中断
UA0_LCR &= (~SPE);
UA0_LCR &= (~EPE);
UA0_LCR &= (~PBE); //Parity Bit Disable 校验禁止
UA0_LCR &= ~WLS;
UA0_LCR |= WL_8BIT; ///8位长度
UA0_LCR &= NSB_ONE; ///1位停止位
UA0_BAUD |= DIV_X_EN; //Mode2:DIV_X_EN = 1
UA0_BAUD |= DIV_X_ONE; //Mode2:DIV_X_ONE =1
UA0_BAUD |= ((22118400 / 4800) -2);
send_bytes_data(a);
UA0_IER |= (RDA_IEN | THRE_IEN | RLS_IEN);//先开启串口接收,发送,RLS中断
NVIC_ISER = UART0_INT; //然后在IRQ0~IRQ31中允许12号中断,也就是UART0中断
}
不知道问题在哪里,就是不产生中断,点不亮LED灯
|