Trong hướng dẫn này, chúng tôi sẽ khám phá các bộ định thời sử dụng trong Bộ vi điều khiển ARM7 LPC2148. Nói chung, bộ đếm thời gian có nghĩa chính xác như thế nào. Bộ đếm thời gian và bộ đếm là tính năng rất quan trọng cho phép chúng tôi cung cấp biến thời gian cho dự án dựa trên vi điều khiển của chúng tôi. Hầu hết các vi điều khiển đi kèm với bộ đếm thời gian ngoại vi tích hợp. LPC2148 có hai bộ hẹn giờ đa năng giống nhau: Timer0 và Timer1. Cả hai bộ đếm thời gian này đều là 32 bit cùng với bộ đếm trước 32 bit. Bộ hẹn giờ cho phép chúng tôi tạo thời gian trễ chính xác. Ví dụ: Trong dự án ví dụ về đèn LED nhấp nháy của chúng tôi, chúng tôi đã tạo ra độ trễ ngẫu nhiên xấp xỉ 1 Sec. nhưng sử dụng Timers, chúng tôi có thể tạo thời gian trễ chính xác. Chúng ta sẽ đi vào đó trong khi thảo luận về dự án ví dụ về Timer. Ngoài ra, chúng tôi có thể sử dụng bộ đếm thời gian như bộ điều biến độ rộng xung và cũng như bộ hẹn giờ chạy miễn phí.
Bộ định thời trong LPC2148 vi điều khiển ARM7 cho phép chúng tôi làm các chất liệu thực sự thú vị. Đồng hồ hẹn giờ cũng tăng cường việc sử dụng vi điều khiển theo nhiều cách khác nhau. Chúng tôi có thể cần phải dành thêm một bài đăng để hiểu về đăng ký Trận đấu và Ghi lại và việc sử dụng nó trong ứng dụng thế giới thực. Trước hết hãy hiểu bộ đếm tự do và các nguyên tắc cơ bản liên quan.
Làm thế nào Timers trong LPC2148 ARM7 vi điều khiển hoạt động?
Trái tim của bộ đếm thời gian của vi điều khiển LPC2148 là bộ đếm 32 bit tự do, được thiết kế để đếm chu kỳ của đồng hồ ngoại vi (PCLK) hoặc đồng hồ bên ngoài, bộ đếm này có thể lập trình với bộ đếm 32 bit.
Tỷ lệ đánh dấu của Bộ đếm thời gian (TC) được điều khiển bằng số 32 bit được ghi trong thanh ghi Prescaler (PR) theo cách sau. Có một Prescale Counter (PC) tăng lên trên mỗi tick của PCLK. Khi nó đạt đến giá trị trong thanh ghi prescaler, số đếm thời gian được tăng lên và Bộ đếm Prescaler (PC) được đặt lại, trên PCLK tiếp theo. Điều này làm cho bộ hẹn giờ tăng lên trên mỗi PCLK khi PR = 0, mỗi 2 PCLK khi PR = 1, v.v.
ĐĂNG KÝ TIMER trong LPC2147 ARM7
Đây là phần giới thiệu nhanh. Bạn sẽ sử dụng bảng dữ liệu để tham khảo [Trang số: 247-248]
PC | Prescale Counter: Máy tính 32 bit là bộ đếm được tăng lên đến giá trị được lưu trữ trong PR (Prescale Register) khi giá trị trong PR đạt được, TC (Timer Counter) được tăng lên và PC bị xóa. PC có thể quan sát và điều khiển thông qua giao diện bus |
PR | Prescale Register: Thanh ghi 32 bit giữ giá trị tối đa của bộ đếm prescale sau khi reset |
TC | Bộ đếm thời gian: Đây là Bộ đếm thời gian 32 bit được tăng lên bất cứ khi nào giá trị bộ đếm Prescale PC đạt đến giá trị tối đa của nó như được chỉ định trong PR |
TCR | Timer Control Register: Timer Control đăng ký được sử dụng để điều khiển các chức năng điều khiển hẹn giờ. Chúng tôi sẽ bật, tắt và đặt lại Bộ đếm bộ đếm thời gian (TC) thông qua thanh ghi này |
CTCR | Count Control Register: Thanh ghi này chọn Chế độ đếm hẹn giờ. Trong ví dụ của chúng tôi, chúng tôi đã sử dụng Chế độ hẹn giờ. Điều này có thể được thực hiện bằng cách đặt CTCR thành 0x0. [Trong chế độ hẹn giờ mỗi cạnh PCLK tăng có thể tăng Bộ đếm Prescale của Timer (PC) hoặc PC rõ ràng và Bộ đếm bộ đếm thời gian tăng (TC)] |
DỰ ÁN VÍ DỤ: Trong dự án ví dụ này, chúng tôi sẽ tạo ra chính xác 1 Sec. độ trễ bằng Timer0. Bộ hẹn giờ sử dụng PCLK (Đồng hồ ngoại vi) làm nguồn đồng hồ. Từ bài trước, chúng tôi đã thấy làm thế nào để thiết lập PLL trong LPC2148 ARM7 . Đồng hồ ngoại vi (PCLK) phải được khởi tạo trước khi sử dụng Timer. Ở đây trong ví dụ này: chúng tôi đã sử dụng đồng hồ ngoài 12 MHz để được đánh dấu ở 60 MHz.
Trước khi chúng ta bắt đầu viết chương trình. Chúng ta phải hiểu việc thiết lập các thanh ghi hẹn giờ hoặc bạn có thể nói chuỗi các hoạt động. Chúng tôi sẽ theo dõi cùng:
- Thiết lập bộ hẹn giờ T0 vào chế độ hẹn giờ (T0CTCR = 0x0)
- Thiết lập giá trị Prescale trong T0PR (trong trường hợp của chúng tôi là 59999 )
- Đặt lại hẹn giờ bằng cách đặt (T0TCR = 0x02)
- Thiết lập T0TCR thành 0x01 để Bật hẹn giờ khi cần
- Đặt lại T0TCR thành 0x00 để Tắt hẹn giờ khi cần
Bạn có thể tự hỏi, tại sao chúng tôi đã đặt Giá trị Prescale thành 59,999 . Hãy tính toán giá trị đếm prescale:
Thời gian yêu cầu 1 giây = 1/1000 mili giây = 0,001 giây (Độ phân giải = 1 ms) |
PRESCALE COUNT = (60 MHz x Thời gian trễ yêu cầu) - 1 = (60000000 x 0,001) - 1 = 59999 Do đó, độ trễ yêu cầu cho TC tăng thêm 1 sẽ là 1 ms. |
Tải xuống dự án: Bộ hẹn giờ trong LPC2148 vi điều khiển ARM7
GIẢI THÍCH MÃ:
Chúng tôi tin rằng bạn đang theo dõi chuỗi hướng dẫn này theo trình tự. Ở đây chúng ta sẽ chỉ thảo luận về một số chức năng liên quan đến việc thiết lập và cấu hình Timer0. Một vài dòng đầu tiên tự giải thích và cũng được nhận xét trong chính mã.
Trong hàm này, chúng ta sẽ thiết lập và khởi tạo Timer0. Ngoài ra chúng ta phải chọn chế độ hẹn giờ sau đó thiết lập giá trị prescale trong Prescale Register (T0PR) đến 59999 . Giá trị prescale xác định độ phân giải của Timer0. Trong trường hợp này, ở 6000 chu kỳ xung nhịp ở 60 MHz . Chúng ta sẽ có độ phân giải 1 ms. Sau đó, chỉ cần đặt lại Timer0 .
Ở đây trong hàm này, chúng ta sẽ sử dụng Timer0 để tạo ra độ trễ chính xác là 1 giây. Chúng ta phải kiểm tra giá trị trong thanh ghi bộ đếm thời gian (T0TCR) và đợi cho đến khi T0TC đạt tới 1000 lần đếm . Mà sau đó sẽ tạo ra 1000 ms tức là 1 giây. thời gian trễ. Chúng tôi hy vọng bài đăng này sẽ giúp bạn hiểu Bộ đếm thời gian trong Bộ vi điều khiển LPC2148 ARM7.
Không có nhận xét nào:
Đăng nhận xét