This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6743 中断问题

C6743 串口接收中断、定时中断都有问题,中断相关的寄存器已经设置了,出口不采用中断时能正常收发,就是中断进不去???一直找不到原因,还望大神指教

  • 请问单独串口中断和定时器中断是否有问题?还是两个中断一起开才会出现这样的问题?

  • 您好,是单独串口中断以及单独定时器中断都有问题,各种中断相关寄存器均已设置好,但是就是不响应中断

  • 那先从简单的入手,先查一下定时器中断的问题,能否把定时器的配置代码贴出来看看?

  • 恩,好的

    void initTIMER0(void)
    {

    // 设置中断控制寄存器
    CSR&=0xfffffffe; // 关中断 GIE=0
    ISTP=0x00820000; // 重置中断向量表到0C00h
    INTmux1=0x0400;
    ICR=0xfff0; // 清除等待的中断
    ISR=0x00;
    IER=0x23; // 使能int4中断

    TIMER0_TGCR=0x00000015; //采用32位独立定时器12
    TIMER0_TIM12=0;
    TIMER0_PRD12=11999999; //周期值,改变其值的大小可以改变灯的亮灭频率
    TIMER0_INTCLSTAT=0x1; //开定时器中断
    TIMER0_TRC=0x00000080; //开定时器


    CSR=CSR|1; // 开中断
    }

  • 定时器中断之前一直进不去,最后在CCS3.3环境下的watch window里尝试性地手动改了IFR的值,稀里糊涂地就进中断服务程序里啦,重新下载程序运行,中断好使啦,具体什么原因也不清楚。。。。。现在碰到串口中断,想采用相同方法,但是一直进不去中断服务程序,,,

      总之中断这感觉一直有问题,没整明白,还望指教,谢谢!!!还想问下你们的中断是把相关寄存器设置好就顺利运行的吗?为什么我的那么波折???

  • 手动置IFR可以进中断,说明中断配置没问题。

    IFR不置1,标识timer定时器没有产生中断,我看到TIMER0_PRD12=11999999;周期设得挺大的,你可以试试多等一会儿看会不会进中断或者把周期值改小。

    串口配置代码贴出来看看,如果手动设置IFR还是进不了中断,可能中断配置方面有问题。

  • 跟周期指好像没有关系的,我定时器中断程序运行了好长时间都没进中断,周期值也改小过,依旧进不了中断。。。。。

    串口配置代码:

     

    void Wuart_test()
    {
     
     //设置中断控制寄存器
        CSR&=0xfffffffe; // 关中断 GIE=0 
     asm(" NOP 2 ");

        /* 打开UART1,并设置波特率 */
            /*
             *  UART clk / baudrate
             *  = 150,000,000 / (900 * 16)
             */
            divisor = 150000000 / ( 9600 * 16);

            switch ( 2 )
            {
                case 0:
                    uart0 = ( UART_Handle )&UART_MODULE_0;
                    break;
                case 1:
                   uart0= ( UART_Handle )&UART_MODULE_1;
                    break;
                case 2:
                   uart0 = ( UART_Handle )&UART_MODULE_2;
                    break;
                default:
                    uart0 = ( UART_Handle )-1;
            }

             uart0->regs->PWREMU_MGMT = 0;         // Reset UART TX & RX components

            C6747_wait( 100 );

            uart0->regs->DLL = (divisor & 0xff);  // Set baud rate
             uart0->regs->DLH = (divisor >> 8);
           
             uart0->regs->FCR = 0x0007;            // Clear UART TX & RX FIFOs
             uart0->regs->FCR = 0x0000;            // Non-FIFO mode
             uart0->regs->IER = 0x0001;            // Enable interrupts
             uart0->regs->LCR = 0x0003;            // 8-bit words,
                                                        // 1 STOP bit generated,
                                                        // No Parity, No Stick paritiy,
                                                        // No Break control
            uart0->regs->MCR = 0x0000;            // RTS & CTS disabled,
                                                        // Loopback mode disabled,
                                                        // Autoflow disabled

             uart0->regs->PWREMU_MGMT = 0xE001;    // Enable TX & RX componenets

      // Clear any pre-existing characters
            dummy =  uart0->regs->THR;
           
            ISTP=0x00820000; // 重置中断向量表到0C00h
             INTmux1=0x4500;
             ICR=0xfff0;   // 清除等待的中断
        //ISR=0x20;
            IER=0x23;   // 使能int4中断
      
             CSR=CSR|1;    // 开中断
          
    }

  • 查看一下INTCTLSTAT.PRDINTSTAT12位,看timer中断是否产生?

  • 我是不能进入中断,这个问题解决了没,能不能提供指导。