Networks Business Online Việt Nam & International VH2

Sự khác biệt của ngôn ngữ lập trình ARM

Đăng ngày 06 November, 2022 bởi admin
Dưới đây là sự độc lạ trong ngôn từ lập trình ARM so với những loại ngôn từ lập trình khác về cách xử lí tài liệu và truyền tài liệu nội bộ .

Sự khác biệt của ngôn ngữ lập trình ARM

Lập trình MCU ARM – Sự khác biệt so với các ngôn ngữ lập trình khác

Có rất ít kỹ sư hay những người đam mê điện tử bắt đầu lập trình với vi điều khiển ARM. Hầu hết họ đến với ARM để tìm kiếm khả năng xử lý cao hơn, với nền tảng đơn giản là MCU 8 bit.

Trong bài viết trước về cách thiết lập và setup thiên nhiên và môi trường tăng trưởng cho ARM, đã chỉ ra cách thiết lập những công cụ ARM của Keil để hoàn toàn có thể biên dịch chương trình và tạo tệp đầu ra. Tuy nhiên, trước khi bạn thực thi viết chương trình cho vi điều khiển và tinh chỉnh ARM, điều quan trọng là phải biết một số ít độc lạ giữa ARM và AVR, 8051 hoặc PIC mà bạn đã lập trình trước kia .
Có 1 số ít sự độc lạ cơ bản trong cách giải quyết và xử lý tài liệu và truyền tài liệu nội bộ. Biết những độc lạ này sẽ giúp đơn giản hóa sự hiểu biết về phần cứng ARM cho những người đã lập trình vi điều khiển và tinh chỉnh 8 bit trong quá khứ .

Kích thước thanh ghi dịch

Sự độc lạ lớn tiên phong bạn sẽ nhận thấy là kích cỡ của những thanh ghi. Đối với AVR hoặc những bộ vi điều khiển và tinh chỉnh 8 bit khác, size thanh ghi người dùng hoàn toàn có thể truy vấn gần như luôn là 8 bit. Các thanh ghi phải chứa tài liệu 16 bit thường được truy vấn dưới dạng một byte cao và một byte thấp. Nó nhu yếu hai lần truy vấn để đọc tài liệu 16 bit .
Điều này khác ở ARM. Lõi ARM có 32 bit và hiệu suất cao nhất khi được sử dụng ở chính sách 32 bit. Do đó, hầu hết tổng thể những địa chỉ thanh ghi đều có chiều rộng 4 byte ( 32 bit ). Ví dụ : để bật toàn bộ những chân của cổng D là đầu ra, bạn sẽ viết
DDRD = 0 xFF ; / / Đặt toàn bộ 8 chân làm đầu ra
Nhưng trên ARM, để tổng thể những chân của cổng 0 thành đầu ra, bạn sẽ viết
IO0DIR = 0 xFFFFFF ; / / Đặt toàn bộ 32 chân làm đầu ra
Lưu ý rằng số chân cổng hoàn toàn có thể nằm trong khoảng chừng từ Pn. 0 đến Pn. 31, vì những cổng I / O rộng 32 bit. Tất nhiên, không phải toàn bộ những chân đều hoàn toàn có thể có sẵn bên ngoài – giống như với những bộ vi điều khiển và tinh chỉnh 8 bit .
Quá trình chuyển một chân lên mức cao mà không tác động ảnh hưởng đến những chân còn lại trên AVR là :
· Lấy nội dung của thanh ghi đầu ra
· OR với tài liệu nhị phân của chân bạn muốn SET ( đặt thành ‘ 1 ‘ )
· AND với tổng hợp tài liệu nhị phân của chân bạn muốn RESET ( xóa hoặc đặt thành ‘ 0 ‘ )
· Viết tác dụng trở lại thanh ghi đầu ra .

Quá trình này được gọi là trình tự đọc-sửa đổi-ghi và nó rất tốn thời hạn vì quá nhiều bước. ARM xử lý yếu tố này bằng cách làm cho nó có sẵn trong phần cứng. Thay vì thanh ghi PORTn để ghi giá trị bit của toàn bộ những chân, vi tinh chỉnh và điều khiển ARM phân phối những thanh ghi bit che như IOnSET và IOnCLR. Viết ‘ 1 ‘ cho bất kể bit nào của thanh ghi sẽ xóa hoặc đặt bit và để những bit khác không bị tác động ảnh hưởng. Điều này được cho phép bật và tinh chỉnh và điều khiển I / O rất nhanh ( trên 15 MHz ) .

Cấu trúc hệ thống

 

Dưới đây tất cả chúng ta sẽ xem xét LPC214x ( Bán dẫn NXP ) để minh họa cách những phần được tổ chức triển khai trong vi điều khiển và tinh chỉnh ARM7 .

Mạng đường trục TT hoàn toàn có thể được quan tâm ngay lập tức là VPB ( BUS ngoại vi VLSI ). Nếu bạn quan sát đường BUS trong sơ đồ khối, bạn sẽ nhận thấy rằng nó bắt nguồn từ AHB ( Bus hiệu suất cao nâng cao ). AHB chạy ở cùng vận tốc xung nhịp với lõi ARM7TDMI-S chính. VPB có xung clock từ AHB và vận tốc xung hoàn toàn có thể được giảm xuống bằng cách sử dụng bộ chia. VPB liên kết toàn bộ những thiết bị ngoại vi với lõi. Do đó, những thiết bị ngoại vi chạy ở vận tốc thấp hơn hoặc bằng vận tốc của lõi ARM .
Tuy nhiên, bộ tinh chỉnh và điều khiển ngắt và USB DMA ( truy vấn bộ nhớ trực tiếp ) chạy cùng vận tốc với lõi. Điều này được cho phép giải quyết và xử lý nhanh những ngắt và truyền tài liệu USB.
Biết cấu trúc này làm cho vi điều khiển và tinh chỉnh ARM có vẻ như đơn thuần hơn để lập trình, vì mỗi khối này rất dễ quản lý và vận hành. Ngoài ra, việc biết cấu trúc này rất quan trọng so với những ứng dụng lập trình mà không gặp phải những trường hợp ngoại lệ hoặc lỗi thời hạn .

Thời gian

Bộ vi điều khiển và tinh chỉnh ARM được tích hợp lõi ARM và những thiết bị ngoại vi như hình trên. Các thiết bị ngoại vi được tích hợp cẩn trọng với lõi. Nhưng những thiết bị ngoại vi cũng được phân tách rõ ràng về nguồn và vận tốc xung clock. Do đó, hoàn toàn có thể thuận tiện gây ra yếu tố thời hạn mà ứng dụng không nhận ra điều gì đang xảy ra. Do đó gỡ lỗi chương trình sẽ rất ít khi chỉ ra yếu tố này .
Để hiểu điều này, xét ví dụ phải phát hiện xung 0,3 us ( micro giây ) hoặc lâu hơn bằng cách sử dụng ngắt ngoài. Giả sử rằng bộ lọc ngắt bên ngoài vô hiệu những xung có chiều rộng nhỏ hơn 8 chu kỳ luân hồi xung nhịp khi mà trục trặc hoàn toàn có thể xảy ra. Do đó, để phát hiện xung 0,3 us, vận tốc xung nhịp tối thiểu là
8 / ( 0,3 us ) = ~ 27 MHz
Để có độ đáng tin cậy cao hơn, hãy sư dụng xugn nhịp ở tần số 30 MHz .
Vì vậy, bạn hoàn toàn có thể đặt CPU và vận tốc bộ điều khiển và tinh chỉnh ngắt thành 30 MHz để hoàn toàn có thể phát hiện xung này bằng cách sử dụng ngắt ngoài. Nhưng điều này hoàn toàn có thể KHÔNG hoạt động giải trí !
Nguyên nhân là vì phần cứng ngắt ngoài được đặt trên VPB. Bất kể tần số bộ giải quyết và xử lý và vận tốc của VIC ( bộ điều khiển và tinh chỉnh ngắt ), bạn cần bước xung nhịp VPB là 30 MHz để phát hiện xung này. Điều này là do phần cứng ngắt ngoài chứa bộ lọc trục trặc xuất phát từ xung của VPB, không phải xung mạng lưới hệ thống .
Các yếu tố nhỏ như thế này trở nên rất khó để gỡ lỗi, đặc biệt quan trọng là trong trường hợp tiếp xúc tiếp nối đuôi nhau vận tốc cao .

Các địa chỉ thanh ghi phải được truy vấn với sự kiểm soát và điều chỉnh Word. Truy cập nửa word hoặc byte không được phép. Ví dụ : bạn hoàn toàn có thể đọc một từ ( 32 bit ) từ một thanh ghi nằm ở 0x40000000 và 0x40000004. Nhưng bạn không hề ghi vào địa chỉ 0x40000002 .
Điều này là do logic giải thuật địa chỉ trong hầu hết những chip không tiến hành phần cứng làn đường byte thiết yếu cho truy vấn độc lập ranh giới. Điều tốt là, đây không phải là một yếu tố lớn và nó làm giảm chi phí sản xuất ! Bộ công cụ dây chuyền sản xuất sẽ tương hỗ những quy tắc truy vấn cho bạn khi bạn lập trình bằng C hoặc những ngôn từ cấp cao khác .
Ngoài ra, địa chỉ 32 bit có nghĩa là có khoảng trống địa chỉ là 4GB ! Rất ít trong số những địa chỉ này thực sự được sử dụng và cố gắng nỗ lực truy vấn những địa chỉ không chứa thanh ghi hoặc bộ nhớ sẽ gây ra ngoại lệ hủy bỏ chu kỳ luân hồi đường BUS và sẽ gây ra thiết lập lại nếu mã của bạn không giải quyết và xử lý ngoại lệ đúng cách. Vì nguyên do này, chúng tôi khuyên bạn không nên ghi ‘ 1 ‘ vào những bit dành riêng hoặc truy vấn những địa chỉ chưa được ánh xạ .

Thông thường, không có gì xảy ra trên hầu hết các MCU 8 bit khi truy cập bất hợp pháp được thực hiện. Trong trường hợp xấu nhất  một thanh ghi dịch không liên quan có thể bị ảnh hưởng hoặc ghi đè. Nhưng trên MCU ARM, mọi hành vi mã bất hợp pháp sẽ gây ra ngoại lệ. Chúng phải được xử lý bởi mã người dùng.

Trong công cụ Keil, những ngoại lệ chỉ gây ra một vòng lặp vô hạn hoặc đặt lại theo mặc định – đây là cách bảo đảm an toàn nhất để giải quyết và xử lý một ngoại lệ. Điều này hoàn toàn có thể được biến hóa bằng cách sửa đổi mã lắp ráp trong một tệp khởi động, sẽ được đề cập trong nhiều bài viết tiếp theo .

Source: https://vh2.com.vn
Category : Tin Học