Khóa học Lập trình Vi điều khiển, lập trình nhúng ARM

Khóa học Lập trình Vi điều khiển, lập trình nhúng ARM

30/11/2020 4:38:06 PM | 17

Cấu trúc ARM (viết tắt từ tên gốc là Advanced RISC Machine) là một loại cấu trúc vi xử lý 32 bit và 64 bit kiểu RISC được sử dụng rộng rãi trong các thiết kế nhúng. Chúng có đặc điểm tiết kiệm năng lượng, vì vậy các bộ CPU ARM chiếm ưu thế trong các sản phẩm điện tử di động.

  • Các đặc tính của ARM bao gồm:
  • Cấu trúc nạp / lưu trữ.
  • Hỗ trợ tập lệnh trực giao.
  • Thanh ghi lớn.
  • Hầu hết các lệnh được thực hiện trong 1 chu kỳ CPU.
  • Chiều dài mã máy cố định, do đó dễ dàng thực hiện đường ống hóa (pipeline).

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à cài đặt môi trường phát triển cho ARM , đã chỉ ra cách thiết lập các công cụ ARM của Keil để 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 tiến hành viết chương trình cho vi điều khiển ARM, điều quan trọng là phải biết một số khác biệt giữa ARM và AVR, 8051 hoặc PIC mà bạn đã lập trình trước đây.

Có một số sự khác biệt cơ bản trong cách xử lý dữ liệu và truyền dữ liệu nội bộ. Biết những khác biệt 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 8 bit trong quá khứ.

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

Sự khác biệt lớn đầu tiên bạn sẽ nhận thấy là  kích thước của các thanh ghi. Đối với AVR hoặc các bộ vi điều khiển 8 bit khác, kích thước thanh ghi người dùng có thể truy cập gần như luôn là 8 bit. Các thanh ghi phải chứa dữ liệu 16 bit thường được truy cập dưới dạng một byte cao và một byte thấp. Nó yêu cầu hai lần truy cập để đọc dữ liệu 16 bit.

Điều này khác ở ARM. Lõi ARM có 32 bit và hiệu quả nhất khi được sử dụng ở chế độ 32 bit. Do đó, hầu hết tất cả các địa chỉ thanh ghi đều có chiều rộng 4 byte (32 bit). Ví dụ: để bật tất cả các chân của cổng D là đầu ra, bạn sẽ viết

DDRD = 0xFF; // Đặt tất cả 8 chân làm đầu ra

Nhưng trên ARM, để tất cả các chân của cổng 0 thành đầu ra, bạn sẽ viết

IO0DIR = 0xFFFFFF; // Đặt tất cả 32 chân làm đầu ra

Lưu ý rằng số chân cổng có thể nằm trong khoảng từ Pn.0 đến Pn.31, vì các cổng I/O rộng 32 bit. Tất nhiên, không phải tất cả các chân đều có thể có sẵn bên ngoài - giống như với các bộ vi điều khiển 8 bit.

Quá trình chuyển một chân lên mức cao mà không ảnh hưởng đến các chân còn lại trên AVR là:

  • Lấy nội dung của thanh ghi đầu ra
  • OR với dữ liệu nhị phân của chân bạn muốn SET (đặt thành '1')
  • AND với  tổ hợp dữ liệu nhị phân của chân bạn muốn RESET (xóa hoặc đặt thành '0')
  • Viết kết quả 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 gian vì quá nhiều bước. ARM giải quyết vấn đề 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 tất cả các chân, vi điều khiển ARM cung cấp các 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à để các bit khác không bị ảnh hưởng. Điều này cho phép bật và điều khiển I / O rất nhanh (trên 15 MHz).

Cấu trúc hệ thống

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

Lập trình Vi điều khiển, lập trình nhúng ARM

Mạng đường trục trung tâm có thể được chú ý 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 tốc độ xung nhịp với lõi ARM7TDMI-S chính. VPB có xung clock từ AHB và tốc độ xung có thể được giảm xuống bằng cách sử dụng bộ chia. VPB kết nối tất cả các thiết bị ngoại vi với lõi. Do đó, các thiết bị ngoại vi chạy ở tốc độ thấp hơn hoặc bằng tốc độ của lõi ARM.

Tuy nhiên, bộ điều khiển ngắt và USB DMA (truy cập bộ nhớ trực tiếp) chạy cùng tốc độ với lõi. Điều này cho phép xử lý nhanh các ngắt và truyền dữ liệu USB. 

Biết cấu trúc này làm cho vi điều khiển ARM có vẻ đơn giản hơn để lập trình, vì mỗi khối này rất dễ vận hành. Ngoài ra, việc biết cấu trúc này rất quan trọng đối với các ứng dụng lập trình mà không gặp phải các trường hợp ngoại lệ hoặc lỗi thời gian .

Thời gian

Bộ vi điều khiển ARM được tích hợp lõi ARM và các 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 thận với lõi. Nhưng các thiết bị ngoại vi cũng được phân tách rõ ràng về nguồn và tốc độ xung clock. Do đó, có thể dễ dàng gây ra vấn đề thời gian mà phần mềm 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 vấn đề này.

Để hiểu điều này, xét ví dụ phải phát hiện xung 0,3us (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 loại bỏ các xung có chiều rộng nhỏ hơn 8 chu kỳ xung nhịp khi mà trục trặc có thể xảy ra. Do đó, để phát hiện xung 0,3us, tốc độ xung nhịp tối thiểu là

8 / (0,3us) = ~ 27 MHz

Để có độ tin cậy cao hơn, hãy sư dụng xugn nhịp ở tần số 30 MHz.

Vì vậy, bạn có thể đặt CPU và tốc độ bộ điều khiển ngắt thành 30 MHz để 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 có thể KHÔNG hoạt động!

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ộ xử lý và tốc độ của VIC (bộ điều khiển 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 hệ thống.

Các vấn đề nhỏ như thế này trở nên rất khó để gỡ lỗi, đặc biệt là trong trường hợp giao tiếp nối tiếp tốc độ cao.

Các địa chỉ thanh ghi phải được truy cập với sự điều chỉnh Word. Truy cập nửa word hoặc byte không được phép. Ví dụ: bạ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 thể ghi vào địa chỉ 0x40000002.

Điều này là do logic giải mã địa chỉ trong hầu hết các chip không triển khai phần cứng làn đường byte cần thiết cho truy cập độc lập ranh giới. Điều tốt là, đây không phải là một vấn đề lớn và nó làm giảm chi phí sản xuất! Bộ công cụ dây chuyền sẽ hỗ trợ các quy tắc truy cập cho bạn khi bạn lập trình bằng C hoặc các ngôn ngữ cấp cao khác.

Ngoài ra, địa chỉ 32 bit có nghĩa là có không gian địa chỉ là 4GB! Rất ít trong số các địa chỉ này thực sự được sử dụng và cố gắng truy cập các địa chỉ không chứa thanh ghi hoặc bộ nhớ sẽ gây ra ngoại lệ hủy bỏ chu kỳ đường BUS và sẽ gây ra thiết lập lại nếu mã của bạn không xử lý ngoại lệ đúng cách. Vì lý do này, chúng tôi khuyên bạn không nên ghi '1' vào các bit dành riêng hoặc truy cập các đị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, các 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 an toàn nhất để xử lý một ngoại lệ. Điều này có thể được thay đổi 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.


Bài viết cùng chuyên mục

  • Khóa học Điều khiển và lập trình tự động hóa với PLC S7-200,300,1200

    MÔ HÌNH THỰC HÀNH PLC S7-200, 300, 1200, MITSU,... TÍCH HỢP NHIỀU THIẾT BỊ PHÙ HỢP CHO ĐÀO TẠO PLC TỪ CƠ BẢN ĐẾN NÂNG CAO VỚI CÁC BÀI TẬP TH VỀ BIT, TIMER, COUNTER, ĐỌC XUNG ENCODER (HSC), XUẤT PWM, ĐỌC ANALOG TỪ LOADCELL, XUẤT ANALOG CHO BIẾN TẦN.... - Mô hình thực hành đa dạng và phong phú. - HV thực hành trực tiếp trên PLC, mô hình, mô hình mở. - HV tự đấu nối dây, thiết kế bài tập theo ý mình! Sinh viên có thể thực hành đấu nối thiết bị công nghiệp, PLC, biến tần, servo, HMI trực tiếp trên các mô hình chuẩn công nghiệp của trung tâm. Mô hình thực hành là tổng hợp nhiều bài tóan từ đơn giản đến phức tạp. Các bài thực hành PLC S7-200/300/1200 cơ bản như sau: - Phân loại sản phẩm theo màu sắc ( biến tần,cảm biến màu Keyence). - Điều khiển vị trí: Hệ trục X, Y (motor bước, dc, cảm biến hành trình). - Cánh tay robot 4 bậc tự do xếp và ...
  • Khóa học Thiết kế giám sát SCADA

    KHÓA HỌC LẬP TRÌNH SCADA VỚI WINCC Kiến thức cần có: Hiểu biết cơ bản về Windows PC Hoàn thành khóa học WinCC cơ bản Nội dung: Hệ thông giám sát trong tự động hóa Cơ bản về kỹ thuật điều khiển quá trình Các lĩnh vực ứng dụng của lập trình điều khiển quá trình Điều khiển quá trình với SIMATIC WinCC Mô tả hệ thống Cấu trúc dự án Tạo một hệ thống điều khiển quá trình với bồn chứa trong SIMATIC WinCC Mở và tạo dự án với SIMATIC WinCC Khai báo và quản lý biến Tạo hình ảnh tiến trình Điều khiển biến quá trình và biểu diễn biến quá trình Cài đặt RT cho máy tính  Đồ thị trong SIMATIC WinCC Hiển thị giá trị đo được với Tag Logging Cấu hình cảnh báo với Alarm Logging  Tùy chọn : In ấn với Report Designer  Tùy chọn: cấu hình tự do với Global Script Đánh giá: Giấy chứng nhận hoàn thành khóa học. Thiết bị / Phần mềm được sử dụng: S7-300 CPU based trainer kit: CPU S7-300, I/O onboard + I/O simulator panel STEP7 Simatic Manager
  • Khóa học Giao diện HMI, WinCC

    Ngày nay PLC đã trờ thành một nhân tố quan trọng trong các hệ thống tự động hóa công nghiệp. Việc lập trình và xây dựng hệ thống tự động với PLC cũng trở nên đơn giản hơn với sự hỗ trợ tối đa từ phía phần mềm. Tuy nhiên việc khó khăn đối với người vận hành là hiểu được các hoạt động của PLC, các thông số hiện tại, điều khiển và giám sát được hệ thống. Chính vì vậy HMI đã ra đời và giải quyết vấn đề này. HMI (Human Machine Interface) tạm dịch là giao diện giữa người và máy - là một thiết bị trung gian giữa người và hệ thống điều khiển mà qua đó người vận hành có thể giám sát và điều khiển hệ thống một cách trực quan nhất. Hiện nay có rất nhiều hãng sản xuất các loại màn hình HMI, trong đó, SIEMENS là một trong những hãng đã đưa ra giải pháp tương đối hoàn hảo cho hệ thống điều khiển và giám sát. Mô tả khóa học Điều khiển – thu thập dữ liệu – giám sát đó là chức ...
  • Khóa học Thiết kế, bóc tách dự toán hệ thống cơ điện tòa nhà M&E

    Khóa học Thiết kế điện, Bóc tách, Dự toán điện trong hệ thống M&E trang bị kiến thức, kỹ năng một cách toàn diện và chuyên sâu về thiết kế điện dân dụng & công nghiệp, thiết kế điện trong tòa nhà, đo bóc tách khối lượng, lập dự toán và thanh quyết toán công trình theo các tiêu chuẩn trong và ngoài nước. Chúng  tôi tự hào là một trung tâm đào tạo thiết kế bóc tách dự toán điện ME uy tín - chất lượng hàng đầu cả nước. MỤC TIÊU & CAM KẾT KHOÁ HỌC Sau khi kết thúc khóa học Thiết kế bóc tách điện trong hệ thống ME học viên có thể: Tự tin đi phỏng vấn xin việc. Trang bị kiến thức và kỹ năng thiết kế, bóc tách, lập dự toán điện công trình một cách toàn diện và chuyên nghiệp theo các tiêu chuẩn trong và ngoài nước. Khóa học giúp bạn có được kiến thức, kỹ năng, kinh nghiệm làm việc của kỹ sư Điện ME nhiều năm trong nghề.​ ĐỐI TƯỢNG ĐÀO TẠO: Các Kỹ ...