Research Institute
  • bxCAN 주요기능 소개 - interrupts
    2024년 10월 08일 07시 44분 51초에 업로드 된 글입니다.
    작성자: IIIIIIIIIIIIIIIIIIIIl

    bxCAN에는 4개의 인터럽트 벡터가 있으며 각 인터럽트 소스는 CAN Interrupt Enable 레지스터(CAN_IER)를 통해 독립적으로 활성화하거나 비활성화할 수 있습니다. 전송 인터럽트는 전송 메일박스가 비었을 때 각각 CAN_TSR 레지스터의 RQCP0, RQCP1, RQCP2 비트가 설정되면서 발생합니다. FIFO 0 인터럽트는 새로운 메시지를 수신할 때 FMP0 비트가 '00'이 아닐 경우 발생하며 FIFO0가 가득 차면 FULL0 비트가 오버런 상태가 되면 FOVR0 비트가 설정됩니다. FIFO 1 인터럽트는 새로운 메시지를 수신할 때 FMP1 비트가 '00'이 아닐 경우 발생하고 FIFO1가 가득 차면 FULL1 비트가 오버런 상태가 되면 FOVR1 비트가 설정됩니다. 마지막으로 오류 및 상태 변경 인터럽트는 오류 조건이 발생할 때 CAN Error Status 레지스터(CAN_ESR)를 참조하여 발생합니다.

    Event flags and interrupt generation


    Transmit Interrupt

    Transmit Interrupt는 송신과 관련된 특정 이벤트가 발생했을 때 활성화되는 인터럽트입니다. 이 인터럽트는 송신 메일박스가 비어 있을 때 발생하며 CAN_TSR 레지스터의 RQCP[0-2] bit를 설정하여 인터럽트를 발생시킬 수 있습니다. 

     

     

    Transmit Interrupt

    FIFO0, FIFO1 Interrupt

    FIFO0 및 FIFO1 Interrupt는 메시지 수신과 관련된 이벤트가 발생할 때 활성화되는 인터럽트입니다. 각각의 FIFO는 메시지를 수신하는 버퍼로 사용되며  CAN_RFxR 레지스터의 FMP bit를 설정하여 인터럽트를 발생시킵니다.

    Status Change Error Interrupt

    Status Change Error Interrupt는 오류 상태나 CAN 버스의 상태 변화와 관련된 이벤트가 발생할 때 활성화되는 인터럽트입니다. 

     

     

    참고자료

    STM32F105/107 - PDF Documentation

    댓글