查看: 1995|回复: 1

[已解决] 我的KL25怎么进不了串口中断?(已解决)

[复制链接]
  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
    发表于 2015-3-16 09:36:03 | 显示全部楼层 |阅读模式
    本帖最后由 zico1998 于 2015-3-20 16:23 编辑

    我使用了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);                                   
        }
    }
    我知道答案 目前已有1人回答
    我今天最想说
    回复

    使用道具 举报

  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
     楼主| 发表于 2015-3-16 11:33:11 | 显示全部楼层
    找到原因了,RIE没使能
    我今天最想说
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 20:57 , Processed in 0.086942 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表