ARM Cortex–M3

Một phần của tài liệu Ứng dụng công nghệ RFID xây dựng hệ thống quản lý nhân sự (Trang 55)

1. READER VÀ TAG RFID

2.1ARM Cortex–M3

Giải pháp Soc (System-on-chip) dựa trên bộ vi xử lý nhúng ARM được ứng dụng vào rất nhiều thị trường khác nhau bao gồm các ứng dụng doanh nghiệp, các hệ thống ô tô, mạng gia đình và công nghệ mạng không dây... Dòng vi xử lý ARM Cortex dựa trên một kiến trúc chuẩn đủ để đáp ứng hầu hết các yêu cầu về hiệu năng làm việc trong tất cả các lĩnh vực trên.

ARM Cortex là dòng vi xử lý thế hệ mới 32 bit, được phát triển dựa trên kiến trúc của dòng trước đó là ARMv7 và được thiết kế đặc biệt để đạt được hiệu suất cao trong các ứng dụng nhúng cần tiết kiệm năng lượng và chi phí. Dòng Cortex có 3 phân nhánh chính: dòng A dùng cho các ứng dụng cao cấp, dòng R dùng cho các ứng dụng thời gian thực, dòng M dùng trong các vi điều khiển. Bộ vi xử lý Cortex-M3 là bộ vi xử lý ARM đầu tiên dựa trên kiến trúc ARMv7-M. Được thiết kế hỗ trợ tập lệnh Thumb-2, tập lệnh này là pha trộn giữa tập lệnh 16 bit và 32 bit và hỗ trợ ngôn ngữ C để lập trình.

Những đặc điểm nổi bật của ARM Cortex-M3:

 Được thiêt kế dựa theo kiến trúc Harvard ( bộ nhớ chương trình và bộ nhớ dữ liệu tách biệt với nhau) và có nhiều bus để thực hiện các thao tác song song.

 Truy cập dữ liệu ko xếp hàng giúp tăng hiệu quả sử dụng RAM nội, hỗ trợ việc đặt và xóa bên trong 2 vùng 1M của bộ nhớ bằng phương pháp bit banding. Đặc điểm này giúp truy cập hiệu quả đến các thanh ghi ngoại vi.

 Đơn vị xử lý ngắt hỗ trợ ngắt lồng nhau ( nested interrupt unit ), hệ thống kiểm tra lỗi ( debug system ) và NVIC ( nested vector interrup controller ) cung cấp vector ngắt chuyên dụng lên tới 240 nguồn ngắt từ ngoại vi, mỗi nguồn có thể được ưu tiên với các mức riêng biệt.

 Cortex hỗ trợ một timer 24 bit tự nạp lại giá trị, nó sẽ cung cấp một ngắt đều đặn.

 Cortex M3 hỗ trợ cả 2 tập lệnh thumb 16 bit và thumb 32 bit. Lệnh 32 bit để tăng tốc độ xử lý lệnh 16 bit để nén mã chương trình. Tập lệnh thumb-2 cải tiến 26% mật độ mã so với tập lệnh ARM 32bit và 25% hiệu suất so với tập lệnh 16 bit, có thể thực hiện trong 1 chu kỳ đơn và khả năng thực hiện phép chia phần cứng chỉ mất 2-7 chu kỳ.

Page 43

Hình III. 8.Sơ đồ khối tổng quan Cortex-M3 2.2 Dòng vi điều khiển STM32.

Những đặc điểm nổi trội của dòng ARM Cortex đã thu hút các nhà sản xuất IC, hơn 240 dòng vi điều khiển dựa vào nhân Cortex đã được giới thiệu. Không nằm ngoài xu hướng đó, hãng sản xuất chip ST Microelectronic đã nhanh chóng đưa ra dòng STM32. STM32 là vi điều khiển dựa trên nền tảng lõi ARM Cortex-M3 thế hệ mới do hãng ARM thiết kế. Lõi ARM Cortex-M3 là sự cải tiến từ lõi ARM7 truyền thống từng mang lại thành công vang dội cho công ty ARM.

ST đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9, nhưng STM32 là một bước tiến quan trọng trên đường cong chi phí và hiệu suất (price/performance), giá chỉ gần 1 Euro với số lượng lớn, STM32 là sự thách thức thật sự với các vi điều khiển 8 và 16-bit truyền thống. STM32 đầu tiên gồm 14 biến thể khác nhau, được phân thành hai dòng: dòng Performance có tần số hoạt động của CPU lên tới 72Mhz và dòng Access có tần số hoạt động lên tới 36Mhz. Các biến thể STM32 trong hai nhóm này tương thích hoàn toàn về cách bố trí chân (pin) và phần mềm, đồng thời kích thước bộ nhớ FLASH ROM có thể lên tới 512K và 64K SRAM. (Nhánh Performance hoạt động với xung nhịp lên đến 72Mhz và có đầy đủ các ngoại vi, nhánh Access hoạt động với xung nhịp tối đa 36Mhz và có ít ngoại vi hơn so với nhánh Performance).

Page 44

Hình III. 9.Kiến trúc của STM32 nhánh Performance và Access Một vài đặc điểm nổi bật của dòng STM32:

STM32 là một vi điều khiển tiêu thụ năng lượng thấp và đạt hiệu suất cao: Nó có

thể hoạt động ở điện áp 2V, chạy ở tần số 72MHz và dòng tiêu thụ chỉ có 36mA với tất cả các khối bên trong vi điều khiển đều được hoạt động. Kết hợp với các chế độ tiết kiệm năng lượng của Cortex, STM32 chỉ tiêu thụ 2μA khi ở chế độ Standby. Một bộ dao động nội RC 8MHz cho phép chip nhanh chóng thoát khỏi chế độ tiết kiệm năng lượng trong khi bộ dao động ngoài đang khởi động. Khả năng nhanh đi vào và thoát khỏi các chế độ tiết kiệm năng lượng làm giảm nhiều sự tiêu thụ năng lượng tổng thể.

Sự an toàn: Ngày nay các ứng dụng hiện đại thường phải hoạt động trong môi trường

khắc khe, đòi hỏi tính an toàn cao, cũng như đòi hỏi sức mạnh xử lý và càng nhiều thiết bị ngoại vi tinh vi. Để đáp ứng các yêu cầu khắc khe đó, STM32 cung cấp một số tính năng phần cứng hỗ trợ các ứng dụng một cách tốt nhất. Chúng bao gồm một bộ phát hiện điện áp thấp, một hệ thống bảo vệ xung Clock và hai bộ Watchdogs. Bộ đầu tiên là một Watchdog cửa sổ (windowed watchdog). Watchdog này phải được làm tươi trong một khung thời gian xác định. Nếu nhấn nó quá sớm, hoặc quá muộn, thì Watchdog sẽ kích hoạt. Bộ thứ hai là một Watchdog độc lập (independent watchdog), có bộ dao động bên ngoài tách biệt với xung nhịp hệ thống chính. Hệ thống bảo vệ xung nhịp có thể phát hiện lỗi của bộ dao động chính bên ngoài (thường là thạch anh) và tự động chuyển sang dùng bộ dao động nội RC 8MHz.

Tính bảo mật: Bộ nhớ Flash của STM32 có thể được khóa để chống truy cập đọc Flash thông qua cổng Debug. Khi tính năng bảo vệ đọc được kích hoạt, bộ nhớ Flash cũng được bảo vệ chống ghi để ngăn chặn mã không tin cậy được chèn vào bảng vector ngắt. Hơn nữa bảo vệ ghi có thể được cho phép trong phần còn lại của bộ nhớ Flash. STM32 cũng có một đồng hồ thời gian thực và một khu vực nhỏ dữ liệu trên SRAM được nuôi nhờ nguồn pin.

Page 45

Khu vực này có một đầu vào chống giả mạo (anti-tamper input), có thể kích hoạt một sự kiện ngắt khi có sự thay đổi trạng thái ở đầu vào này. Ngoài ra một sự kiện chống giả mạo sẽ tự động xóa dữ liệu được lưu trữ trên SRAM được nuôi bằng nguồn pin.

Phát triển phần mềm: Nếu bạn đã sử dụng một vi điều khiển dựa trên lõi ARM, thì

các công cụ phát triển cho ARM hiện có đã được hỗ trợ tập lệnh Thumb-2 và dòng Cortex. Ngoài ra ST cũng cung cấp một thư viện điều khiển thiết bị ngoại vi, một bộ thư viện phát triển USB như là một thư viện ANSI C và mã nguồn đó là tương thích với các thư viện trước đó được công bố cho vi điều khiển STR7 và STR9. Có rất nhiều RTOS mã nguồn mở và thương mại và middleware (TCP/IP, hệ thống tập tin, v.v.) hỗ trợ cho họ Cortex. Dòng Cortex-M3 cũng đi kèm với một hệ thống gỡ lỗi hoàn toàn mới gọi là CoreSight. Truy cập vào hệ thống CoreSight thông qua cổng truy cập Debug (Debug Access Port), cổng này hỗ trợ kết nối chuẩn JTAG hoặc giao diện 2 dây (serial wire-2 Pin), cũng như cung cấp trình điều khiển chạy gỡ lỗi, hệ thống CoreSight trên STM32 cung cấp hệ thống điểm truy cập(data watchpoint) và một công cụ theo dõi (instrumentation trace). Công cụ này có thể gửi thông tin về ứng dụng được lựa chọn đến công cụ gỡ lỗi. Điều này có thể cung cấp thêm các thông tin gỡ lỗi và cũng có thể được sử dụng trong quá trình thử nghiệm phần mềm.

2.2.1 BOARD OPENCMX STM3210D 2.2.1.1 Giới thiệu 2.2.1.1 Giới thiệu

Bộ vi xử lý ARM Cortex-M3 là thế hệ mới nhất của bộ xử lý ARM cho các hệ thống nhúng. Nó được phát triển để cung cấp một nền tảng chi phí thấp, đáp ứng yêu cầu thực thi của MCU với việc giảm số bóng bán dẫn trong lõi ARM Cortex dẫn tới tiêu thụ năng lượng thấp và giảm giá thành vi xử lí, đồng thời cung cấp hiệu năng tính toán cao và một hệ thống tiên tiến để đáp ứng ngắt. Bộ vi xử lý ARM Cortex-M3 32-bit RISC đạt hiệu suất cao hơn so với ARM7TDMI-S.Dòng vi xử lý hiệu suất cao STM32F103 có một lõi ARM nhúng và do đó nó tương thích với tất cả các công cụ và phần mềm cho ARM hiện đang có trên thị trường. Nó là sự kết hợp của ARM Cortex-M3 CPU hiệu suất cao với rất nhiều thiết bị ngoại vi mở rộng và các I/O cải tiến.

OPENCMX-STM3210D là board mạch phát triển với chi phí thấp cho vi điều khiển STM32F103RCT6 dựa trên lõi ARM Cortex-M3 của STMicroelectronis. Board OPENCMX mang đến giải pháp hoàn hảo cho sự phát triển ngoại vi USB. Tất cả các cổng vi điều khiển có sẵn trên kết nối mở rộng.

Page 46

Một vài ứng dụng của board như : USB Mass Storage device, Audio class device, HID mouse device, CDC Vitural com port device , CAN,……..

Hình III. 10.Hình ảnh thực thế board CMX-STM3210D 2.2.1.2 Đặc điểm chính

 MCU: STM32F103RCT6 ARM 32 bit CORTEX M3™ có 256K Bytes Program Flash, 48K Bytes RAM.

o 1x USB Device 2.0,1x CAN, 2x I2C, 2x I2C, 3x SPI (18 Mbit/s). (adsbygoogle = window.adsbygoogle || []).push({});

o 3x ADC 12 bit, 2x DAC 12 bit, 5x UART, 8x TIMERS, 12x DMA, 2x WDT (Independent và Window).

o 1x SysTick Timer (24 bit downcounter), 1x RTC, tần số hoạt động tối đa 72Mhz.

o Điện áp hoạt động 2.0-5,6V.

o Cổng debug có JTAG, SWD (Serial wire debug) và Cortex-M3 ETM (Embedded Trace Macrocell).

 ADC(đọc từ biến trở, cảm biến nhiệt độ, ánh sáng, ghi âm qua microphone...

 DAC(Audio: chơi nhạc file.wav)

 GPIO (Led, Button...)

 Nút Reset

 I2C (giao tiếp với cảm biến nhiệt độ STLM75M2F...)

 Buzze (dùng PWM để phát nhạc...)

 USB (2.0 full speed)

 RTC (lập lịch điện tử...)

 LCD (kí tự 16x2)

Page 47

 CAN (2.0)

 Power (lấy từ nguồn Adapter 7.5VDC hoặc USB)

 JTAG chuẩn 20 chân, hoàn toàn tương thích với WIGGLER ARM JTAG, ULINK, và JLINK ARM JTAG.

 Đặc biệt hỗ trợ chơi nhạc, ghi âm thông qua jack cắm audio, microphone.

 Kích thước : 131.52 x 103.51mm (5.172 x 4.073").

2.2.1.3 Sơ đồ khối của board OPENCMX

Board OPENCMX-STM3210D được thiết kế dựa trên STM32F103RCT6 với 64 chân dạng đóng gói LQFP. Hình sau mô tả sơ đồ khối kết nối các vi điều khiển với các thiết bị ngoại vi bên ngoài.(Sơ đồ nguyên lý chi tiết của board sẽ được đính kèm trong phần phụ lục).

Hình III. 11.Sơ đồ khối board CMX-STM3210D

 Nguồn cung cấp cho mạch:

Board OPENCMX- STM3210D được cấp nguồn theo 2 cách:

 Sử dụng nguồn thông qua cổng usb.

 Hoặc qua adapter ngoài.

Page 48

Hình III. 12.Cách cung cấp nguồn cho board bằng Jumper 25 2.2.1.4Một số điều cần lưu ý trong quá trình lập trình.

Vì đặc thù của chương trình chỉ sử dụng một phần nhỏ trong rất nhiều các ứng dụng của board OPENCMX chủ yếu là USART1, USART2, lập trình Timer, ngắt và thứ tự của ngắt. Cách thiết lập và cài đăt như sau: trình bày đôi chút về cách thiết lập và cài đặt các phần trên.

Bộ thư viện chuẩn CMSIS. (adsbygoogle = window.adsbygoogle || []).push({});

CMSIS-Cortex Microcontroller Software Interface Standard là chuẩn được đặt ra bởi các nhà sản xuất phần cứng và phần mềm nhằm tạo nên một chuẩn phần mềm được chấp thuận rộng rãi trong công nghiệp.

Dễ dàng sử dụng và dễ dàng học, cung cấp các chuẩn giao tiếp cho các thiết bị ngoài vi, hê điều hành thời gian thực và phần mềm hỗ trợ là mục tiêu chính của CMSIS. Ngoài ra CMSIS cũng tương tích với các trình biên dịch phổ biến hiện nay như GCC, IAR, Keil…

CMSIS bao gồm những thành phần chính:

 Peripheral Register and Interrupt Definitions: một sự liên kết, giao diện ổn định cho thanh ghi ( registers) và ngắt ( interrupts)

 Core Peripheral Functions: những hàm truy cập chuẩn cho từng loại ứng dụng tính toán cụ thể của core cortex M3 và các thiết bị ngoại vi

 DSP Library: những thuật toán tối ưu cho việc xử lý số tín hiệu.

 System View Description(SVD): tập tin XML mô tả những thiết bị ngoại vi và việc sử lý ngắt.

Page 49

Hình III. 13.Sơ đồ các thành phần của thư viện CMSIS

Bộ điều khiển vector ngắt lồng nhau (NVIC)

NVIC (Nested Vectored Interrupt Controller) là thành phần tích hợp của bộ vi xử lý Cortex-M3 có khả năng xử lý ngắt rất linh hoạt và nhanh chóng. Trong cài đặt chuẩn, nó cung cấp một NMI (Non-Maskable Interrupt) và 32 ngắt vật lý đa dụng với 8 mức ưu tiên pre- emption. Nó có thể được cấu hình từ 1 đến 240 ngắt vật lý với tối đa 256 mức độ ưu tiên.

Bộ vi xử lý Cortex-M3 sử dụng một bảng vector có thể tái định vị được, dùng để chứa địa chỉ của hàm xử lý ngắt. Khi nhận một ngắt, bộ xử lý sẽ lấy địa chỉ từ bảng vector thông qua bus chương trình. Bảng vector ngắt được đặt ở địa chỉ 0 khi reset, nhưng có thể được di chyển đến vị trí khác bằng cách lập trình một thanh ghi điều khiển.

NVIC hỗ trợ ngắt lồng nhau, cho phép một ngắt được xử lý trước một ngắt khác dựa trên mức độ ưu tiên. Nó cũng hỗ trợ cấu hình mức ưu tiên động cho các ngắt. Độ ưu tiên có thể được thay đổi bằng phần mềm trong thời gian chạy (run time). Các ngắt đang được xử lý đều bị khóa cho đến khi hàm xử lý ngắt hoàn thành, do đó, độ ưu tiên của ngắt có thể thay đổi mà không cần lo đến chuyện trùng lặp.

Trong trường hợp các ngắt nối đuôi nhau, các hệ thống cũ sẽ lặp lại hai lần việc lưu trạng thái hoàn hành và khôi phục, dẫn đến độ trễ cao. Bộ vi xử lý Cortex-M3 đơn giản hóa việc chuyển đổi giữa các ngắt đang hoạt động và đang chờ bằng cách cài đặt công nghệ tail- chaining trong phần cứng NVIC. Tail-chaining đạt độ trễ thấp hơn nhiều bằng cách thay thế chuỗi các thao tác pop và push vốn mất hơn 30 chu kỳ xung nhịp bằng một thao tác nạp lệnh đơn giản chỉ mất 6 chu kỳ. Trạng thái bộ vi xử lý được tự động lưu khi ngắt bắt đầu được xử

Page 50

lý và phục hồi ngay khi kết thúc, ít chu kỳ hơn so với việc thực thi bằng phần mềm, nâng cao hiệu suất đáng kể ở hệ thống hoạt động dưới 100MHz.

Hình III. 14.Cách thức thực hiên tail-chaining khi có nhiều ngắt xảy ra đồng thời

Việc thiết lập NVIC trên STM32 đã được đơn giản hóa rất nhiều với bộ thư viện chuẩn CMIS.Ta sẽ qui định thứ tự ưu tiên của các loại ngắt cụ thể dựa vào việc thiết lập các giá trị

preemption priority và subpriority.

Hình III. 15.Cách thiết lập NVIC

Page 51

Bảng III. 2.Cách thiết lập các giá trị pre-emption và subpriority theo Priority Group

Timer

Đặc điểm chính :

 Bộ đếm auto-reload 16-bit up,dow,up/dow.

 Giá trị prescaler 16-bit có thể được thay đổi bằng phần mềm để chia xung clock cho counter.

 Có 4 kênh không phụ thuộc được thiết kế cho: o Ghi nhận giá trị đầu vào.

o So sánh giá trị đầu ra o Tạo xung PWM  Tạo ngắt / DMA theo sự kiện.

Việc thiết lập giá trị cho timer cũng được thực hiện khá dễ dàng với thư viện chuẩn CMSIS

Bảng III. 3.Thiết lập giá trị cho Timer 2-100ms (adsbygoogle = window.adsbygoogle || []).push({});

Có 3 giá trị cần quan tâm khi thiết lập cho Timer. Đó chính là TIM-Period, TIM_Prescaler, TIM_ClockDivision . Ngoài ra cũng phải config để biết chính xác giá trị xung clock cung cấp cho Timer.

Page 52

Hình III. 16.Sơ đồ cây CLOCK cho STM32RD

Ở đây các giá trị prescaler ( AHB Prescaler , APB1 Prescaler, APB2 Prescaler) sẽ được dùng để chia xung clock chính hệ thống ( SYSCLK=722Mhz) thành các clock cho AHB, APB1(low-speed), APB2(high-speed) nhằm phù hợp với từng loại ứng dụng cụ thể.Việc thiết lập trên sẽ có thể được lập trình dựa vào các hàm trong thư viện CMSIS.

TIM2,3,4,5,6,7,12,13,14 thuộc APB1(Low Speed) được cung cấp clock từ PCLK1 nên để thiết lập được xung clock cho Tim2 ta phải thiết lập PCLK1. Cụ thể ở đây dòng lệnh:

Hình III. 17.Thiết lập clock cho APB1 và TIM2

PCLK1=HCLK/16=72MHz/16=4,5MHz ( AHB1 Prescaler =16#1) Nên TIM2 CLK = PCLK1x2 = 9MHz

Vậy đã thiết lập xong TIM2 CLK. Xác đinh các giá trị TIM_Period, TIM_Prescaler, TIM_ClockDivision bởi công thức sau:

Bảng III. 4.Công thức tính thời gian đếm TIMER

Một phần của tài liệu Ứng dụng công nghệ RFID xây dựng hệ thống quản lý nhân sự (Trang 55)