Đại học Cambridge Raspberry Pi Hướng dẫn phát triển hệ điều hành Câu hỏi


9

Tôi là nhà phát triển ứng dụng cấp cao (C #, python) và tôi muốn làm bẩn tay mình với phát triển ứng dụng nhúng cấp thấp. Đại học Cambridge đã đăng một loạt các hướng dẫn dạy bạn cách tạo ra một hệ điều hành cho Raspberry Pi có tên Baking Pi. Tôi dự định đăng câu hỏi của mình về hướng dẫn này tại đây và cập nhật câu trả lời khi tôi thực hiện. Thậm chí có thể đăng một số điểm mà tôi tự tìm ra.

Vì vậy, tôi đã theo dõi bài học 1 và tôi đã bối rối. Đây là liên kết trang .

Phần đầu tiên của hướng dẫn nói rằng chúng ta cần (tôi giả sử) bật bộ điều khiển GPIO bằng cách viết giá trị 0x20200000 để đăng ký r0. Tôi không thể tìm thấy thông tin liên quan như vậy ở bất cứ đâu trong bảng dữ liệu. ( liên kết ). Tôi đã xem phần GPIO nhưng tôi không thấy bất kỳ dấu hiệu nào của 16 thanh ghi hoặc r0. Thông tin này ở đâu?

CẬP NHẬT

Trước hết, hướng dẫn nói về việc bật đèn LED OK, đó là đèn LED trạng thái. Bạn có thể tự hỏi vị trí trong Hướng dẫn sử dụng cho biết GPIO 16 được kết nối với đèn LED OK. Nó sẽ không. Bạn cần xem sơ đồ Raspberry và tìm GPIO nào là status_led được kết nối với. Đây là liên kết các sơ đồ. Trang 2, Khối BCM2835.

Vì vậy, mục tiêu là chọn pin GPIO16. (sẽ có thêm thông tin cập nhật ...)

Câu trả lời:


5

Dưới đây là thông tin liên quan trong hướng dẫn đó:

Địa chỉ trong máy tính chỉ là số và vì vậy số 0x20200000 là địa chỉ của bộ điều khiển GPIO. Đây chỉ là một quyết định thiết kế được đưa ra bởi các nhà sản xuất, họ có thể đã sử dụng bất kỳ địa chỉ nào khác (miễn là nó không xung đột với bất cứ điều gì khác). Tôi chỉ biết địa chỉ này vì tôi đã tra cứu nó trong sách hướng dẫn [3] , không có hệ thống cụ thể nào cho các địa chỉ (ngoài tất cả chúng đều là số tròn lớn theo hệ thập lục phân).

r0chỉ đơn giản là một phần bộ nhớ trên bộ xử lý nơi bạn có thể lưu trữ bất kỳ thông tin nào bạn thích; chúng được gọi là thanh ghi mục đích chung. Chúng tôi viết vị trí của bộ điều khiển GPIO đến vị trí này để chúng tôi có thể sử dụng lại nó sau này, như chúng tôi thường sử dụng một biến trong lập trình cấp cao.

Tôi nghĩ rằng giá trị 0x20200000 thực sự đề cập đến vị trí bộ nhớ đầu tiên trong bảng ở trang 90. Bạn sẽ nhận thấy rằng trước khi chúng ta ghi vào thanh ghi, chúng ta tăng nó lên 4, cho chúng ta Function Select 1(xem bảng), thanh ghi điều khiển một vài chân , bao gồm cả cái chúng tôi muốn viết.

Điều đó có giúp ích gì không?


Câu hỏi của tôi là thông tin này liên quan đến đâu?
ArmenB

@ArmenB.: Mục 6.1, Trang 90
Jivings

Tài liệu nói "GPIO có 41 thanh ghi." trong đó hướng dẫn nói 16. Không có dấu hiệu của thanh ghi r0 trong phần đó, cũng như số 0x20200000 để kích hoạt nó.
ArmenB

@ArmenB.: Xin lỗi Armen, tôi sẽ đi vào chi tiết hơn một chút.
Jivings

3

Cảm ơn Jivings và emcconville đã trả lời câu hỏi.

Trong bảng dữ liệu pdf, trang 6 phần địa chỉ vật lý ARM , có một phần ghi

Địa chỉ vật lý nằm trong khoảng từ 0x20000000 đến 0x20FFFFFF cho các thiết bị ngoại vi. Các địa chỉ bus cho các thiết bị ngoại vi được thiết lập để ánh xạ vào dải địa chỉ bus ngoại vi bắt đầu từ 0x7E000000. Do đó, một thiết bị ngoại vi được quảng cáo ở đây tại địa chỉ xe buýt 0x7Ennnnnn có sẵn tại địa chỉ vật lý 0x20nnnnnn.

Đến trang 90, hàng đầu tiên của bảng ghi:

Chức năng GPIO 0x7E200000 GPFSEL0 Chọn 0 32 R / W

vì vậy 0x7E200000 chuyển thành địa chỉ vật lý 0x20200000, đó là Hàm GPIO chọn 0 bit.

Đối với r0, có 16 thanh ghi mục đích chung trong ARM, chúng ta có thể sử dụng để lưu trữ số và đó là lý do tại sao trong hướng dẫn, anh ta chọn r0 vì đây là thanh ghi miễn phí đầu tiên.


Vui mừng để giúp đỡ, và tự trả lời tốt đẹp, điều này tổng hợp hai người kia tốt đẹp.
Jivings

Không cảm ơn bạn đã dành thời gian để trả lời. Tôi đã đăng bài này dưới dạng wiki cộng đồng để những người khác có thể chỉnh sửa / sửa chữa / hoàn thành bài đăng.
ArmenB

1

Việc đăng ký r0thông qua r12là mục đích chung. Đương nhiên, dễ nhất là bắt đầu với r0. Như Jivings đã chỉ ra, Hướng dẫn liệt kê từng địa chỉ và nêu:

Địa chỉ vật lý nằm trong khoảng từ 0x20000000 đến 0x20FFFFFF cho các thiết bị ngoại vi.


Tôi không thể chọn hai câu trả lời đúng! Cái này thật dở. Vui lòng sửa trang web này ... Cảm ơn bạn đã đóng góp. Cuối cùng tôi đã hiểu ý nghĩa của RTFM.
ArmenB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.