Thông báo

Collapse
No announcement yet.

Vấn đề xử lý các ngắt trong PIC32

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Vấn đề xử lý các ngắt trong PIC32

    Tình hình là em đang gặp vấn đề về việc xử lý các ngắt với PIC32MX150F128B. Cụ thể như thế này:
    1. Tại file main.c em thiết lập các ngắt cho timer2,3,4. Ví dụ timer 4.

    //////////////// Timer4 config
    T4CON = 0x0; // Stop the timer and clear the control register,
    // prescaler at 1:1,internal clock source
    TMR4 = 0x0; // Clear the timer register
    PR4 =setPR(0.05); // Load the period register..50ms
    IPC4bits.INT4IP=3;; // Set priority level = 3
    IPC4bits.INT4IS=3; // Set subpriority level = 3
    IFS0bits.INT4IF=0;// Clear the timer interrupt status flag
    IEC0bits.INT4IE=0; // Enable timer interrupts
    T4CONSET = 0x8000; // Start the timer

    2. Tiếp theo tại UART.c e cũng thiết lập ngắt UART1 và UART2. Giả sử cấu hình toàn bộ UART1:

    void u1a_open(void){
    U1MODEbits.BRGH = 0; // set to standard speed mode
    U1BRG = 31; // 115200 baud
    U1MODEbits.PDSEL = 0b00; // 8-bit no parity
    U1MODEbits.STSEL = 0; // 1 stop bit
    IEC1bits.U1RXIE = 1; // recieve interrupt enable
    IPC8bits.U1IP = 0; // priority 0
    IPC8bits.U1IS = 3; // sub priority 3
    U1STAbits.UTXISEL = 0; // interrupt when transmit complete
    U1STAbits.URXISEL = 0; // interrupt generated with every reception
    U1STAbits.URXEN = 1; // enable uart recieve
    U1STAbits.UTXEN = 1; // enable uart transmit
    U1MODEbits.ON = 1; // enable whole uart module

    3. Sau khi thiết lập các ngắt xong em tạo file thực thi ngắt tên các ngắt được cấu trúc như sau: ví dụ ngắt timer4, với vector ngắt và mức ưu tiên ngắt đã được định nghĩa (em còn để thêm ngắt uart1 trong này, cấu trúc tương tự):

    void __attribute((interrupt(ipl3), vector(_TIMER_4_VECTOR), nomips16)) timer4_int(void)
    {
    {
    nội dung
    }
    IFS0CLR = 0x00000010; // Be sure to clear the Timer1 interrupt status
    }


    4. Sau khi build nó báo warning như thế này:

    LIB\picmx150_it.c:30:1: warning: Interrupt priority IPL2 is deprecated. Specify as 'IPL2{AUTO|SOFT|SRS}' instead.
    LIB\picmx150_it.c:37:1: warning: Interrupt priority IPL0 is deprecated. Specify as 'IPL0{AUTO|SOFT|SRS}' instead.
    LIB\picmx150_it.c:46:1: warning: Interrupt priority IPL3 is deprecated. Specify as 'IPL3{AUTO|SOFT|SRS}' instead.

    Các mức ngắt sẽ không được thực thi. Ai biết chỉ giúp em với ạ để các ngắt được xử lý theo đúng mức ưu tiên của nó. Em cảm ơn ạ!

  • #2
    Thay từ khóa ipl3 (theo như cảnh báo là vẫn dùng được, nhưng đã lạc hậu) thành IPL3AUTO hoặc IPL3SOFT hoặc IPL3SRS. Cách tốt nhất là dùng macro __ISR thay cho chỉ thị __attribute, ví dụ như sau
    Code:
    void __ISR(_EXTERNAL_0_VECTOR, IPL7AUTO) INT0Interrupt()
    Phần mềm tự do hoặc không dùng máy tính nữa !.

    Comment


    • #3
      Thank bác đã fix được cảnh báo này.
      Giờ có phát sinh thêm lỗi nữa về khai báo cái thư viện plib.h
      Nó hiện rất nhiều cảnh báo tương tự kiểu như thế này, không biết bác có cách nào fix không ạ????:

      c:\program files\microchip\xc32\v1.34\bin\bin\../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/peripheral/reset.h:54:4: warning: #warning The PLIB functions and macros in this file will be removed from the MPLAB XC32 C/C++ Compiler in future releases
      In file included from c:\program files\microchip\xc32\v1.34\bin\bin\../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/plib.h:65:0,
      from LIB\/picmx150_it.h:4,

      Comment

      Về tác giả

      Collapse

      phungdong92 Tìm hiểu thêm về phungdong92

      Bài viết mới nhất

      Collapse

      Đang tải...
      X