toilet

hỏi đáp thư viện STM32

Thảo luận trong 'Họ ARM'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. Đăng 24/10/16 #1

    ino Học sinh phổ thông

    Số bài viết: 3
    Đã được thích: 0
    ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)
    {
    ITStatus bitstatus = RESET;
    uint16_t itstatus = 0x0, itenable = 0x0;
    /* Check the parameters */
    assert_param(IS_TIM_ALL_PERIPH(TIMx));
    assert_param(IS_TIM_GET_IT(TIM_IT));

    itstatus = TIMx->SR & TIM_IT;
    itenable = TIMx->DIER & TIM_IT;
    if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET))
    {
    bitstatus = SET;
    }
    else
    {
    bitstatus = RESET;
    }
    return bitstatus;
    }
    Các bác cho em hỏi ở hàm trên trong thư viện STM32F10xx, dòng lệnh sau đây được hiểu như thế nào? Mong bác nào biết chỉ rõ cho em hiểu, vì thuật toán như thế này gặp rất nhiều trong thư viện
    itstatus = TIMx->SR & TIM_IT;
    itenable = TIMx->DIER & TIM_IT;
    #1
  2. Đăng 24/10/16 #2

    dungvt VIP

    Số bài viết: 572
    Đã được thích: 893
    Đây là cách viết khi ta cần kiểm tra bit của thanh ghi đang lên 1 hay xuống 0, sử dụng toán tử AND
    Mã:
    itstatus = TIMx->SR & TIM_IT;
    
    Dòng code này có nghĩa là 'kiểm tra bit TIM_IT của thanh ghi Status Register đang là 1 (SET) hay 0 (RESET)

    u1.
    ino thích bài này.
    #2
  3. Đăng 24/10/16 #3

    huunho Thạc sỹ

    Số bài viết: 3,058
    Đã được thích: 1,376
    Chuẩn rồi bạn, viết thế này TIMx->SR là thanh ghi SR của TIMx
    giả sử bạn muốn kiểm tra bít 2 của thanh ghi SR bằng 0 hay 1 thì viết như sau: if(TIMx->SR & 0x2 == reset)
    {
    nếu bit 2 = 0 thi làm việc tại đây
    }
    ino thích bài này.
    #3
  4. Đăng 25/10/16 #4

    ino Học sinh phổ thông

    Số bài viết: 3
    Đã được thích: 0
    Xin cảm ơn các bác đã giải đáp câu hỏi của em.
    #4
Tags: họ ARM

Chia sẻ trang này