Điều gì xảy ra với các thanh ghi AVR trong các hướng dẫn đa chu kỳ?


7

Đây là một câu hỏi lý thuyết nhiều hơn ... (Cũng là câu hỏi đầu tiên của tôi về Stack Overflow)

Tôi đang tự hỏi điều gì xảy ra với các thanh ghi vi điều khiển Atmel AVR (tức là ATTINY85) trong một lệnh đa chu kỳ.

tức là ADIWmất hai chu kỳ để thêm ngay lập tức vào thanh ghi hai byte (word).

Tôi tưởng tượng rằng trong chu kỳ đầu tiên, một trong các byte được vận hành và sau đó trong chu kỳ tiếp theo, byte khác được vận hành. Nhưng quá trình này được xác định bất cứ nơi nào tôi có thể đọc? Và những gì về các hướng dẫn đa chu kỳ khác?

Về cơ bản, tôi quan tâm đến trạng thái của vi điều khiển sau mỗi chu kỳ riêng lẻ, ngay cả trong các hướng dẫn đa chu kỳ.


5
Tôi nghĩ rằng bạn sẽ rất khó khăn để có thể nhận được thông tin này từ bất kỳ ai khác ngoài Atmel. Ở mức tồi tệ nhất, đó sẽ là một bí mật thương mại, tốt nhất là nó sẽ hoàn toàn không liên quan trừ khi bạn muốn sao chép MCU.
Ignacio Vazquez-Abrams

Tôi hiểu rồi. Cảm ơn, Ignacio. Tôi chỉ nhận ra rằng tôi có thể tự bấm đồng hồ bên ngoài MCU và sau đó đặt lại nó trong một hướng dẫn. Tôi không chắc chắn nếu các thanh ghi (SRAM) khởi tạo, nhưng điều này có thể đáng để thử.

1
Mặc dù thú vị để biết, trừ khi nó ảnh hưởng đến hành vi có thể đo lường được, bạn thậm chí sẽ không cần phải sao chép điều này nếu bạn đang cố gắng tạo một bộ xử lý giống như công việc (giả lập, lõi mềm fpga, v.v.). Có lẽ các ngắt không thể tự chèn vào giữa - hoặc nếu có, thao tác đầu tiên không được cam kết và cuối cùng được lặp lại sau khi chúng ISR.
Chris Stratton

@ChrisStratton, đồng ý. Đó là một câu hỏi lý thuyết về sự tò mò của chúng tôi (đối với một cuốn sách nghệ thuật khái niệm tôi đang làm việc bao gồm một mô phỏng mã chạy trên MCU). Tôi sẽ thử một bài kiểm tra trong đó tôi theo cách thủ công bên ngoài đồng hồ MCU và đặt lại nó ở giữa một hướng dẫn đa chu kỳ. Tôi tin rằng các thanh ghi máy vẫn còn nguyên vẹn và tôi có thể có MCU xuất giá trị của chúng.
Tristan

7
Tôi vừa thực hiện một bài kiểm tra phần cứng trong phòng thu và có thể xác nhận rằng ADIWcập nhật thanh ghi kết quả thấp hơn sau chu kỳ đầu tiên và thanh ghi kết quả trên sau chu kỳ thứ hai. Để thực hiện điều này, tôi theo dõi thủ công MCU bên ngoài thông qua đầu ra của chip khác và đặt lại MCU ban đầu ở giữa ADIWhướng dẫn. Khi thiết lập lại, MCU sau đó đã kiểm tra các thanh ghi kết quả thấp hơn và cao hơn, và điều thú vị là chỉ có thanh ghi kết quả thấp hơn mới được cập nhật. Thay vào đó, nếu tôi đặt lại MCU sau khi hoàn thành ADIWhướng dẫn, cả hai thanh ghi kết quả thấp hơn và cao hơn đã được cập nhật.
Tristan

Câu trả lời:


1

Đây là cách giải thích của tôi:

Để uC 8 bit thực hiện phép toán 16 bit, trước tiên, nó phải tính toán các bit có ý nghĩa thấp nhất sau đó di chuyển đến các bit có ý nghĩa cao nhất, do đó, chu kỳ đầu tiên thêm 8 bit với một lần mang sau đó thêm vào 8 bit cao hơn -chút ít.

Theo nghĩa trừu tượng 8 bit không thể thực hiện phép tính 16 bit trong một lệnh đơn vì các kết quả ảnh hưởng lẫn nhau.


Điều này không nhất thiết đúng. Mặc dù nó là một thiết kế khác thường, nhưng một bộ vi điều khiển có bus bộ nhớ 8 bit hoàn toàn có thể có bộ cộng 16 bit bên trong, cho phép nó thực hiện bổ sung này trong một chu kỳ xung nhịp đơn. Vẫn cần nhiều chu kỳ xung nhịp để đọc / ghi giá trị 16 bit, nhưng nó có thể thực hiện chúng theo bất kỳ thứ tự nào nó muốn.
duskwuff -inactive-

Ý tôi là CPU 8 bit không chỉ bộ nhớ. Bạn có thể sửa lỗi cho tôi nếu tôi sai, nhưng CPU và bộ nhớ không khớp với tôi là lạ, bạn có biết MCU nào làm điều này không?
I.Omar

@duskwuff: Không chỉ CPU có thể có ALU bên trong rộng hơn bus bộ nhớ, mà còn thực sự được triển khai và thành công về mặt thương mại - Motorola 68008 và Intel 8088 được sử dụng trong PC IBM gốc đều có ALU 16 bit và 8- Bus dữ liệu bit, và tôi khá chắc chắn rằng Motorola 6809 cũng vậy
davidcary
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.