*** Lưu ý: Những câu hỏi trên chỉ mang tính chất tham khảo. NGÀNH TIN HỌC ỨNG DỤNG TRUNG TÂM TIN HỌC ĐH KHTN
Bus địa chỉ là các đường dẫn tín hiệu logic một chiều để truyền địa chỉ tham chiếu tới các khu vực bộ nhớ và chỉ ra dữ liệu được lưu giữ ở đâu trong không gian bộ nhớ. Trong qúa trình hoạt động CPU sẽ điều khiển bus địa chỉ để truyền dữ liệu giữa các khu vực bộ nhớ và CPU. Các địa chỉ thông thường tham chiếu tới các khu vực bộ nhớ hoặc các khu vực vào ra, hoặc ngoại vi. Dữ liệu được lưu ở các khu vực đó thường là 8bit (1 byte), 16bit, hoặc 32bit tùy thuộc vào cấu trúc từng loại vi xử lý/vi điều khiển. Hầu hết các vi điều khiển thường đánh địa chỉ dữ liệu theo khối 8bit. Các loại vi xử lý 8bit, 16bit và 32bit nói chung cũng đều có thể làm việc trao đổi với kiểu dữ liệu 8bit và 16bit. Chúng ta vẫn thường được biết tới khái niệm địa chỉ truy nhập trực tiếp, đó là khả năng CPU có thể tham chiếu và truy nhập tới trong một chu kỳ bus. Nếu vi xử lý có N bit địa chỉ tức là nó có thể đánh địa chỉ được 2N khu vực mà CPU có thể tham chiếu trực tiếp tới. Qui ước các khu vực được đánh địa chỉ bắt đầu từ địa chỉ 0 và tăng dần đến 2N-1. Hiện nay các vi xử lý và vi điều khiển nói chung chủ yếu vẫn sử dụng phổ biến các bus dữ liệu có độ rộng là 16, 20, 24, hoặc 32bit. Nếu đánh địa chỉ theo byte thì một vi xử lý 16bit có thể đánh địa chỉ được 216 khu vực bộ nhớ tức là 65,536 byte = 64Kbyte. Tuy nhiên có một số khu vực bộ nhớ mà CPU không thể truy nhập trực tiếp tới tức là phải sử dụng nhiều nhịp bus để truy nhập, thông thường phải kết hợp với việc điều khiển phần mềm. Kỹ thuật này chủ yếu được sử dụng để mở rộng bộ nhớ và thường được biết tới với khái niệm đánh địa chỉ trang nhớ khi nhu cầu đánh địa chỉ khu vực nhớ vượt quá phạm vi có thể đánh địa chỉ truy nhập trực tiếp. Ví dụ: CPU 80286 có 24bit địa chỉ sẽ cho phép đánh địa chỉ trực tiếp cho 224 byte nhớ. CPU 80386 và các loại vi xử lý mạnh hơn có không gian địa chỉ 32bit sẽ có thể đánh được tới 232 byte địa chỉ trực tiếp. Bus dữ liệu là các kênh truyền tải thông tin theo hai chiều giữa CPU và bộ nhớ hoặc các thiết bị ngoại vi vào ra. Bus dữ liệu được điều khiển bởi CPU để đọc hoặc viết các dữ liệu hoặc mã lệnh thực thi trong quá trình hoạt động của CPU. Độ rộng của bus dữ liệu nói chung sẽ xác định được lượng dữ liệu có thể truyền và trao đổi trên bus. Tốc độ truyền hay trao đổi dữ liệu thường được tính theo đơn vị là [byte/s]. Số lượng đường bit dữ liệu sẽ cho phép xác định được số lượng bit có thể lưu trữ trong mỗi khu vực tham chiếu trực tiếp. Nếu một bus dữ liệu có khả năng thực hiện một lần truyền trong 1 μs, thì bus dữ liệu 8bit sẽ có băng thông là 1Mbyte/s, bus 16bit sẽ có băng thông là 2Mbyte/s và bus 32bit sẽ có băng thông là 4Mbyte/s. Trong trường hợp bus dữ liệu 8bit với chu kỳ bus là T=1μs (tức là sẽ truyền được 1byte/1chu kỳ) thì sẽ truyền được 1 Mbyte trong 1s hay 2Mbyte trong 2s.
Kiến trúc bộ nhớ được chia ra làm hai loại chính và được áp dụng rộng rãi trong hầu hết các Chip xử lý nhúng hiện nay là kiến trúc bộ nhớ von Neumann và Havard. Trong kiến trúc von Neumann không phân biệt vùng chứa dữ liệu và mã chương trình. Cả chương trình và dữ liệu đều được truy nhập theo cùng một đường. Điều này cho phép đưa dữ liệu vào vùng mã chương trình ROM, và cũng có thể lưu mã chương trình vào vùng dữ liệu RAM và thực hiện từ đó. Hình 2.11: Kiến trúc bộ nhớ von Neumann và Havard Kiến trúc Havard tách/phân biệt vùng lưu mã chương trình và dữ liệu. Mã chương trình chỉ có thể được lưu và thực hiện trong vùng chứa ROM và dữ liệu cũng chỉ có thể lưu và trao đổi trong vùng RAM. Hầu hết các vi xử lý nhúng ngày nay sử dụng kiến trúc bộ nhớ Havard hoặc kiến trúc Havard mở rộng (tức là bộ nhớ chương trình và dữ liệu tách biệt nhưng vẫn cho phép khả năng hạn chế để lấy dữ liệu ra từ vùng mã chương trình). Trong kiến trúc bộ nhớ Havard mở rộng thường sử dụng một số lượng nhỏ các con trỏ để lấy dữ liệu từ vùng mã chương trình theo cách nhúng vào trong các lệnh tức thời. Một số Chip vi điều khiển nhúng tiêu biểu hiện nay sử dụng cấu trúc Havard là 8031, PIC, Atmel AVR90S. Nếu sử dụng Chip 8031 chúng ta sẽ nhận thấy điều này thông qua việc truy nhập lấy dữ liệu ra từ vùng dữ liệu RAM hoặc từ vùng mã chương trình. Chúng ta có một vài con trỏ được sử dụng để lấy dữ liệu ra từ bộ nhớ dữ liệu RAM, nhưng chỉ có duy nhất một con trỏ DPTR có thể được sử dụng để lấy dữ liệu ra từ vùng mã chương trình. Hình 3.11 mô tả nguyên lý kiến trúc của bộ nhớ von Neumann và Harvard. Ưu điểm nổi bật của cấu trúc bộ nhớ Harvard so với kiến trúc von Neumann là có hai kênh tách biệt để truy nhập vào vùng bộ nhớ mã chương trình và dữ liệu nhờ vậy mà mã chương trình và dữ liệu có thể được truy nhập đồng thời và làm tăng tốc độ luồng trao đổi với bộ xử lý.
Vùng để lưu mã chương trình. Có ba loại bộ nhớ PROM thông dụng được sử dụng cho hệ nhúng và sẽ được giới thiệu lần lượt sau đây:
Hình 2.12: Nguyên lý cấu tạo và hoạt động xoá của EPROM
Hình 2.13: Sơ đồ nguyên lý ghép nối EPROM với VXL
Hình 2.14: Cấu trúc nguyên lý bộ nhớ RAM Có hai loại SRAM và DRAM. Hình 2.15: Cấu trúc một phần tử nhớ DRAM Hình 2.16: Nguyên lý ghép nối (mở rộng) RAM với VXL
Hầu hết các chip vi điều khiển ngày nay đều có ít nhất một bộ định thời gian/bộ đếm có thể cấu hình hoạt động linh hoạt theo các mode phục vụ nhiều mục đích trong các ứng dụng xử lý, điều khiển. Các bộ định thời gian cho phép tạo ra các chuỗi xung và ngắt thời gian hoặc đếm theo các khoảng thời gian có thể lập trình. Chúng thường được ứng dụng phổ biến trong các nhiệm vụ đếm xung, đo khoảng thời gian các sự kiện, hoặc định chu kỳ thời gian thực thi các tác vụ. Một trong những ứng dụng quan trọng của bộ định thời gian là tạo nhịp từ bộ tạo xung thạch anh cho bộ truyền thông dị bộ đa năng hoạt động. Thực chất đó là ứng dụng để thực hiện phép chia tần số. Để đạt được độ chính xác, tần số thạch anh thường được chọn sao cho các phép chia số nguyên được thực hiện chính xác đảm bảo cho tốc độ truyền thông dữ liệu được tạo ra chính xác. Chính vì vậy họ vi điều khiển 80C51 thường hay sử dụng thạch anh có tần số dao động là 11.059 thay vì 12MHz để tạo ra nhịp hoạt động truyền thông tốc độ chuẩn 9600. Hình 2.17: Bộ định thời/bộ đếm 8bit của AVR Ngắt là một sự kiện xảy ra làm dừng hoạt động chương trình hiện tại để phục vụ thực thi một tác vụ hay một chương trình khác. Cơ chế ngắt giúp CPU làm tăng tốc độ đáp ứng phục vụ các sự kiện trong chương trình hoạt động của VXL/VĐK. Các VĐK khác nhau sẽ định nghĩa các nguồn tạo ngắt khác nhau nhưng đều có chung một cơ chế hoạt động ví dụ như ngắt truyền thông nối tiếp, ngắt bộ định thời gian, ngắt cứng, ngắt ngoài...Khi một sự kiện yêu cầu ngắt xuất hiện, nếu được chấp nhận CPU sẽ lưu cất trạng thái hoạt động cho chương trình hiện tại đang thực hiện ví dụ như nội dung bộ đếm chương trình (con trỏ lệnh) các nội dung thanh ghi lưu dữ liệu điều khiển chương trình nói chung để thực thi chương trình phục vụ tác vụ cho sự kiện ngắt. Thực chất quá trình ngắt là CPU nhận dạng tín hiệu ngắt, nếu chấp nhận sẽ đưa con trỏ lệnh chương trình trỏ tới vùng mã chứa chương trình phục vụ tác vụ ngắt. Vì vậy mỗi một ngắt đều gắn với một vector ngắt như một con trỏ lưu thông tin địa chỉ của vùng bộ nhớ chứa mã chương trình phục vụ tác vụ của ngắt. CPU sẽ thực hiện chương trình phục vụ tác vụ ngắt đến khi nào gặp lệnh quay trở về chương trình trước thời điểm sự kiện ngắt xảy ra. Có thể phân ra 2 loại nguồn ngắt: Ngắt cứng và Ngắt mềm.
Trong các cơ chế ngắt khoảng thời gian từ khi xuất hiện sự kiện ngắt (có yêu cầu phục vụ ngắt) tới khi dịch vụ ngắt được thực thi là xác định và tuỳ thuộc vào công nghệ phần cứng xử lý của Chip.
Thông thường khi có một sự cố xảy ra làm hệ thống bị treo hoặc chạy quẩn, CPU sẽ không thể tiếp tục thực hiện đúng chức năng. Đặc biệt khi hệ thống phải làm việc ở chế độ vận hành tự động và không có sự can thiệp trực tiếp thường xuyên bởi người vận hành. Để thực hiện cơ chế tự giám sát và phát hiện sự cố phần mềm, một số VXL/VĐK có thêm một bộ định thời chó canh. Bản chất đó là một bộ định thời đặc biệt để định nghĩa một khung thời gian hoạt động bình thường của hệ thống. Nếu có sự cố phần mềm xảy ra sẽ làm hệ thống bị treo khi đó bộ định thời chó canh sẽ phát hiện và giúp hệ thống thoát khỏi trạng thái đó bằng cách thực hiện khởi tạo lại chương trình. Chương trình hoạt động khi có bộ định thời phải đảm bảo reset nó trước khi khung thời gian bị vi phạm. Khung thời gian này được định nghĩa phụ thuộc vào sự đánh giá của người thực hiện phần mềm, thiết lập khoảng thời gian đảm bảo chắc chắn hệ thống thực hiện bình thường không có sự cố phần mềm. Có một số cơ chế thực hiện cài đặt bộ định thời cho canh để giám sát hoạt động của hệ thống như sau: Hình 2.18: Sơ đồ nguyên lý của bộ định thời chó canh Hình 2.19: Nguyên lý hoạt động của bộ định thời chó canh
DMA (Direct Memory Access) là cơ chế hoạt động cho phép hai hay nhiều vi xử lý hoặc ngoại vi chia sẻ bus chung. Thiết bị nào đang có quyền điều khiển bus sẽ có thể toàn quyền truy nhập và trao đổi dữ liệu trực tiếp với các bộ nhớ như hệ thống có một vi xử lý. Ứng dụng phổ biến nhất của DMA là chia sẻ bộ nhớ chung giữa hai bộ vi xử lý hoặc các ngoại vi để truyền dữ liệu trực tiếp giữa thiết bị ngoại vi vào/ra và bộ nhớ dữ liệu của VXL. Truy nhập bộ nhớ trực tiếp được sử dụng để đáp ứng nhu cầu trao đổi dữ liệu vào ra tốc độ cao giữa ngoại vi với bộ nhớ. Thông thường các ngoại vi kết nối với hệ thống phải chia sẻ bus dữ liệu và được điều khiển bởi CPU trong quá trình trao đổi dữ liệu. Điều này làm hạn chế tốc độ trao đổi, để tăng cường tốc độ và loại bỏ sự can thiệp của CPU, đặc biệt trong trường hợp cần truyền một lượng dữ liệu lớn. Cơ chế hoạt động DMA được mô tả như trong Hình 2.20. Thủ tục được bắt đầu bằng việc yêu cầu thực hiện DMA với CPU. Sau khi xử lý, nếu được chấp nhận CPU sẽ trao quyền điều khiển bus cho ngoại vi và thực hiện quá trình trao đổi dữ liệu. Sau khi thực hiện xong CPU sẽ nhận được thông báo và nhận lại quyền điều khiển bus. Trong cơ chế DMA, có hai cách để truyền dữ liệu: kiểu DMA chu kỳ đơn, và kiểu DMA chu kỳ nhóm (burst). Hình 2.20: Nhịp hoạt động DMA
Nguồn: http://voer.edu.vn/m/bus-dia-chi-du-lieu-va-dieu-khien/28924b83
|