我使用了UART1、PIT中断,PIT正常,可是UART1的,能发送数据,但不进中断,请教是怎么回事?我示波器测试,管脚有数据的波形。
/*****************************kinetis_sysinit.c*****************************/
void UART1_ISR(void)
{
uint32 tmp;
tmp=0; //这里设断点,发现没有进入
uart1_isr();
}
......
void UART1_IRQHandler() __attribute__ ((weak, alias("UART1_ISR"))); //UART1
/*****************************main.c*****************************/
int main(void)
{
sys_init(); //初始化系统时
sys_pin_enable_port(); //使能端口时钟
......
uart_init(UART_1,BUSCLK,115200);
irq_enable(13); //允许UART1中断
......
asm("CPSIE i"); //开总中断
......
}
uchar uart1_data;
void uart1_isr(void)
{
asm("CPSID i"); //关总中断
if(UART1_S1 & UART_S1_RDRF_MASK)
{
uart1_data=UART1_D;
}
asm("CPSIE i"); //开总中断
}
//这里是移植苏州大学书本里的代码
void uart_init(uint8 uartNo,uint32 sel_clk,uint32 baud_rate)
{
......
else
{
switch (uartNo)
{
case UART_1:
PORTE_PCR0 = PORT_PCR_MUX(0x3); //使能UART1_TXD PE0
PORTE_PCR1 = PORT_PCR_MUX(0x3); //使能UART1_RXD PE1
SIM_SCGC4 |= SIM_SCGC4_UART1_MASK; //启动串口1时钟
break;
case UART_2:
PORTE_PCR22 = PORT_PCR_MUX(0x4); //使能UART2_TXD PE2
PORTE_PCR23 = PORT_PCR_MUX(0x4); //使能UART2_RXD PE3
SIM_SCGC4 |= SIM_SCGC4_UART2_MASK;//启动串口2时钟
break;
default:
break; //传参错误,返回
}
//暂时关闭串口1、2发送与接收功能
uartch2->C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK);
//配置波特率,KL25串口1、2时钟频率只能使用 Bus clock = 24MHz 总线时钟
//配置串口工作模式,8位无校验模式
uartch2->C1 = 0;
sbr = (uint_16)((BUS_CLK_KHZ*1000)/(baud_rate * 16));
temp = UART_BDH_REG(uartch2) & ~(UART_BDH_SBR(0x1F));
UART_BDH_REG(uartch2) = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8));
UART_BDL_REG(uartch2) = (uint_8)(sbr & UART_BDL_SBR_MASK);
//初始化控制寄存器、清标志位
uartch2->C1 = 0x00;
uartch2->C3 = 0x00;
uartch2->S1 = 0x1F;
uartch2->S2 = 0x00;
//启动发送接收
uartch2->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);
}
} |