Điều gì thực sự xảy ra khi chúng ta đặt hướng trên GPIO trong bộ điều khiển?


7

Nói chung, trong khi làm việc trên các chân GPIO của bất kỳ bộ điều khiển / thiết bị nào, chúng tôi đặt hướng cho các chân GPIO. Giả sử trong bộ điều khiển LPC2148 (lõi ARM7), chúng ta có IODIR để định cấu hình hướng của Pin. Chúng tôi đặt IODIR cho đầu ra và xóa cho đầu vào.

IODIR0 |= (1 << 26); //output
IODIR0&= ~(1 << 10); //input

Cách cài đặt / xóa mã pin làm cho nó là đầu ra / đầu vào. Tôi nghĩ rằng đó là do các bóng bán dẫn kéo lên và kéo xuống nhưng tôi không thể kết luận một lý do cụ thể.

Và một câu hỏi khác, cấu hình của hướng IO có thay đổi tùy thuộc vào kiến ​​trúc / CPU mà chúng ta sử dụng không?

Câu trả lời:


5

Tôi không thể tìm thấy sơ đồ nội bộ cụ thể cho phần của NXP trong Hướng dẫn sử dụng , vì vậy tôi sẽ giải thích bằng cách sử dụng sơ đồ được tìm thấy trong ATMEL ATMega328 , nhưng chúng sẽ trông giống nhau.

nhập mô tả hình ảnh ở đây

Hình ảnh cho thấy sơ đồ nội bộ cho một pin duy nhất. Phần nổi bật là phần pin hướng cổng. Khi Cổng được đặt thành đầu ra (thông qua cơ sở dữ liệu, trong đó người ta có thể đặt từng pin riêng lẻ thành Đầu vào hoặc Đầu ra và thông qua tín hiệu Điều khiển bên trong WDx, "ngăn chặn" dữ liệu trên bus dữ liệu sang flip-flop), bộ đệm được kích hoạt và bắt đầu đưa pin đến các mức logic (điện áp) trên chân đầu ra *.

Khi chân được đặt làm đầu vào, chân kích hoạt trên bộ đệm đó được định cấu hình để bộ đệm là đầu ra Trở kháng cao, do đó không đưa chân đến bất kỳ mức điện áp cụ thể nào. Điều đó trở thành một nhiệm vụ cho các mạch được kết nối với pin đó trong mạch bên ngoài vi điều khiển. Lưu ý, trong trường hợp của Atmel, việc đọc trạng thái logic của pin (phần dưới cùng của sơ đồ) luôn đọc trạng thái thực tế của pin đó, không quan trọng nếu đó là pin đầu vào hoặc đầu ra. Cấu hình một pin làm đầu vào cũng cho phép người dùng kích hoạt điện trở kéo lên bên trong vi điều khiển.

*: Tôi đang bỏ qua colector mở và các loại ghim khác vì tôi nghĩ nó không liên quan đến câu hỏi này. Các hoạt động nên được tương tự, mặc dù.

Cách cài đặt / xóa mã pin làm cho nó là đầu ra / đầu vào. Tôi nghĩ rằng đó là do các bóng bán dẫn kéo lên và kéo xuống nhưng tôi không thể kết luận một lý do cụ thể.

Lưu ý rằng bạn đặt thanh ghi hướng, không phải chính trạng thái pin. Chúng là những thứ khác nhau. Cài đặt / xóa chân cho phần cứng biết điện áp nào sẽ được đặt vào đầu ra của bộ đệm đầu ra (khi được bật bởi chân kích hoạt), trong khi cài đặt / xóa hướng của pin sẽ báo cho micro biết nếu bộ đệm đầu ra sẽ kích hoạt hoặc vô hiệu hóa tất cả.


5

NXP dường như không cung cấp điều này, nhưng hướng dẫn sử dụng STM32F4 (trang 270) hiển thị sơ đồ khối của pin GPIO điển hình.

Như bạn có thể thấy, các chân được kết nối với tất cả các khối: Đầu vào tương tự / kỹ thuật số cũng như các phần đầu ra. Các thanh ghi điều khiển kích hoạt / vô hiệu hóa và cấu hình các khối này để chúng không can thiệp lẫn nhau. Ngoài ra còn có các tín hiệu cho phép riêng biệt cho kéo / kéo xuống bên trong.

Các chi tiết chính xác về cách thức này được thực hiện trong silicon, rõ ràng, khác nhau giữa các nhà sản xuất, kiến ​​trúc và quy trình.

Khối GPIO


2

Để thêm vào các câu trả lời ở trên (tốt), hãy lưu ý rằng thanh ghi IODIR (hoặc bất cứ thứ gì nó được gọi trên bộ xử lý của bạn) chỉ kiểm soát xem trình điều khiển đầu ra có được bật / tắt hay không. Trình điều khiển đầu ra và trình điều khiển đầu vào là độc lập.

Điều này trở nên thú vị là khi bạn đọc lại trạng thái của pin. Thông thường bạn thấy rằng ghi vào thanh ghi I / O sẽ đặt trạng thái đầu ra, nhưng đọc từ thanh ghi I / O sẽ đọc trạng thái đầu vào. Không phải hai người giống nhau sao? Trên thực tế không phải lúc nào cũng vậy, nếu có thứ gì khác cũng được kết nối với pin đó có thể khiến pin mạnh hơn. Cụ thể, nếu đầu ra là collector mở / cống mở thì trình điều khiển đầu ra sẽ có trở kháng cao khi bạn đặt đầu ra thành 1, do đó trạng thái của pin không được điều khiển bởi bộ xử lý.

Trên hầu hết các bộ xử lý, điều này có nghĩa là nếu bạn muốn theo dõi trạng thái của trình điều khiển đầu ra thì bạn cần một biến lưu trữ giá trị đó, bởi vì bộ xử lý không cung cấp cho bạn cách đọc lại.

Cũng lưu ý rằng việc kéo lên / xuống hoàn toàn độc lập với việc đầu ra có được điều khiển hay không. Các điện trở kéo lên / xuống bên trong thường thuận tiện khi bạn không quan tâm chính xác điện trở là gì, bởi vì nó đảm bảo các chân này mặc định ở mức đã biết. Để các đầu vào không được kết nối hầu như luôn luôn là thông lệ xấu, bởi vì nó cho phép tích tụ điện tích tĩnh có thể làm hỏng thiết bị. Điện trở kéo lên / xuống đảm bảo điều này không xảy ra. Chúng cũng có thể được sử dụng cho các ứng dụng mà bạn thường có điện trở kéo lên trên đầu vào, chẳng hạn như nút nhấn điều khiển đầu vào về 0V; hoặc trên các ứng dụng mà bạn thường có điện trở kéo lên trên một đầu ra, chẳng hạn như đầu ra collector mở / cống mở. Điều này làm giảm số lượng thành phần trong sơ đồ của bạn.

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.