Làm thế nào để chuyển đổi từ Vi điều khiển cơ bản giữa các dòng cơ bản sang ARM Cortex?


22

Tôi có nhiều năm kinh nghiệm với lõi 8 bit từ các nhà sản xuất khác nhau - cụ thể là 8051, PIC và AVR - và bây giờ tôi có Cortex M0 để tìm ra. Cụ thể là cái này , nhưng tôi hy vọng chúng ta có thể nói chung hơn thế.

Hóa ra là nhiều hơn một chút so với tôi mặc cả, với nhiều tài liệu mô tả các phần khác nhau của hệ thống ở các mức độ chi tiết khác nhau và thực sự không có gì tôi thấy để kết nối tất cả lại với nhau. Điều này so với việc có một biểu dữ liệu giải thích mọi thứ. Tôi hiểu rằng có nhiều thứ hơn để làm tài liệu ở nơi đầu tiên, nhưng sự thay đổi trong định dạng đang ném tôi cho một vòng lặp.

Trang web ở trên có một tài liệu tổng quan tốt về từng hệ thống con và thiết bị ngoại vi, và một tài liệu khác mô tả chi tiết từng đăng ký và tôi có tất cả mã nguồn cho SDK của chúng bao gồm các tệp tiêu đề và một số ví dụ phức tạp, nhưng tôi vẫn thấy không có gì mô tả làm thế nào tất cả kết nối với nhau.

Có một hướng dẫn ngắn gọn về kiến ​​trúc Cortex giải thích chức năng của những thứ mà các bộ điều khiển nhỏ hơn không có - như nhiều lớp bus từ CPU đến các thiết bị ngoại vi, mỗi lớp có bộ đếm thời gian theo dõi riêng - và cách tất cả chúng kết nối với nhau?


Tôi không thể nói từ những gì bạn mô tả nếu bạn có bảng dữ liệu / hướng dẫn sử dụng thực tế cho bộ xử lý từ nhà sản xuất. Điều đó sẽ cung cấp cho bạn một hình ảnh tổng thể tốt và chi tiết. Từ một trong những hình ảnh trên trang web mà bạn đã liên kết, nó trông giống như một bộ xử lý NXP. Nhìn vào số phần của nhà sản xuất và tìm kiếm tài liệu của bộ xử lý trên trang web của họ. Ngoài ra còn có trang web của ARM arm.com/products/ Processors / corex-m / Cortex-m0.php .
DigitalNinja

Xin lỗi vì sự chậm trễ trong việc lấy lại điều này; Tôi đã bận rộn với các dự án khác. Cảm ơn @Adam vì tiếng nói của kinh nghiệm.
AaronD

Và cảm ơn @Richard về tổng quan về cách nghĩ về nó và lưu ý về việc in cấu hình pin. Tôi ủng hộ cả hai bạn.
AaronD

Bạn sẽ không bao giờ quay trở lại, trừ khi bạn tìm thấy một số yêu cầu giá cực đoan . Và thậm chí sau đó bạn sẽ bị cám dỗ, vì có khá nhiều Cortex-M giá rẻ.
Ronan Paixão

Câu trả lời:


40

Tôi đã làm việc trên các máy AVR cũng như MCU dựa trên ARM Cortex-M3 / M4 / R4. Tôi nghĩ rằng tôi có thể cung cấp một số lời khuyên chung. Điều này sẽ cho rằng bạn đang lập trình trong C, không phải lắp ráp.

CPU thực sự là phần dễ dàng. Các loại dữ liệu C cơ bản sẽ có kích thước khác nhau, nhưng dù sao bạn cũng đang sử dụng uint8 / 16 / 32_t phải không? :-) Và bây giờ tất cả các loại số nguyên phải nhanh chóng hợp lý, với 32-bit (int) là nhanh nhất. Bạn có thể không có FPU, vì vậy hãy tiếp tục tránh phao và đánh đôi.

Đầu tiên, làm việc theo sự hiểu biết của bạn về kiến ​​trúc cấp hệ thống. Điều này có nghĩa là IO, xung nhịp, bộ nhớ, đặt lại và ngắt. Ngoài ra, bạn cần làm quen với ý tưởng về các thiết bị ngoại vi được ánh xạ bộ nhớ. Trên AVR, bạn có thể tránh suy nghĩ về điều đó bởi vì các thanh ghi có tên duy nhất với các biến toàn cục duy nhất được xác định cho chúng. Trên các hệ thống phức tạp hơn, thông thường đề cập đến các thanh ghi theo địa chỉ cơ sở và phần bù. Tất cả sôi sục xuống số học con trỏ. Nếu bạn không thoải mái với con trỏ, hãy bắt đầu học ngay bây giờ.

Đối với IO, hãy tìm hiểu cách xử lý muxing ngoại vi. Có một điều khiển mux trung tâm để chọn chân nào là tín hiệu ngoại vi và GPIO nào không? Hay bạn đặt chân cho chế độ ngoại vi bằng các thanh ghi ngoại vi? Và tất nhiên, bạn sẽ cần biết cách định cấu hình GPIO làm đầu vào và đầu ra, đồng thời bật chế độ thoát mở và kéo / xuống. Ngắt bên ngoài thường rơi vào loại này là tốt. GPIO khá chung chung, vì vậy kinh nghiệm của bạn sẽ phục vụ bạn tốt ở đây.

Đồng hồ sôi sục xuống một vài điều. Bạn bắt đầu với một nguồn đồng hồ, thường là một bộ dao động RC tinh thể hoặc bên trong. Điều này được sử dụng để tạo một hoặc nhiều miền đồng hồ cấp hệ thống. Các chip tốc độ cao hơn sẽ sử dụng PLL mà bạn có thể nghĩ là số nhân tần số. Cũng sẽ có bộ chia đồng hồ tại các điểm khác nhau. Những điều quan trọng cần xem xét là tần số xung nhịp CPU của bạn là bao nhiêu và tốc độ bit bạn cần cho các thiết bị ngoại vi giao tiếp của bạn. Thông thường điều này là khá linh hoạt. Khi bạn tiến bộ hơn, bạn có thể tìm hiểu về những thứ như chế độ năng lượng thấp, thường dựa trên chế độ đồng hồ.

Bộ nhớ có nghĩa là flash và RAM. Nếu bạn có đủ RAM, thường sẽ nhanh hơn để giữ chương trình của bạn ở đó trong quá trình phát triển sớm để bạn không phải lập trình flash nhiều lần. Vấn đề lớn ở đây là quản lý bộ nhớ. Nhà cung cấp của bạn nên cung cấp các tập lệnh liên kết mẫu, nhưng bạn có thể cần phân bổ thêm bộ nhớ cho mã, hằng, biến toàn cục hoặc ngăn xếp tùy thuộc vào bản chất của chương trình. Các chủ đề nâng cao hơn bao gồm bảo mật mã và lập trình flash thời gian chạy.

Đặt lại là khá đơn giản. Thông thường, bạn chỉ phải xem ra đồng hồ bấm giờ, có thể được bật theo mặc định. Đặt lại là quan trọng hơn trong quá trình gỡ lỗi khi bạn chạy cùng một mã nhiều lần. Thật dễ dàng để bỏ lỡ một lỗi do các vấn đề theo trình tự theo cách đó.

Có hai điều bạn cần biết về các ngắt - cách bạn bật và tắt chúng và cách bạn định cấu hình các vectơ ngắt. AVR-GCC thực hiện công việc sau cho bạn với các macro ISR (), nhưng trên các kiến ​​trúc khác, bạn có thể phải ghi địa chỉ hàm vào một thanh ghi theo cách thủ công.

Các thiết bị ngoại vi vi điều khiển thường độc lập với nhau, vì vậy bạn có thể tìm hiểu chúng cùng một lúc. Nó có thể giúp chọn một thiết bị ngoại vi và sử dụng nó để tìm hiểu một phần của công cụ cấp hệ thống. Các thiết bị ngoại vi Comm và PWM rất tốt cho xung nhịp và IO, và bộ hẹn giờ rất tốt cho các ngắt.

Đừng bị đe dọa bởi mức độ phức tạp. Những bộ vi điều khiển "cơ bản" đó đã dạy cho bạn nhiều điều bạn cần biết. Xin vui lòng cho tôi biết nếu bạn cần tôi để làm rõ bất cứ điều gì.


4
Câu trả lời tốt. Một điều khác cần chú ý là các thiết bị ngoại vi DMA, có xu hướng có các giao diện phức tạp và thiếu tài liệu theo kinh nghiệm của tôi.
Doug McClean

3
"Và bây giờ tất cả các loại số nguyên phải nhanh như nhau." Trên thực tế, do các quy tắc quảng cáo số nguyên trong C, sử dụng các loại 8/16-bit có thể dẫn đến rất nhiều phần mở rộng dấu / không và có thể là một vấn đề khi bộ nhớ Flash thấp. Vì vậy, nếu có RAM dự phòng, có thể trả hết để sử dụng nhiều loại 32 bit hơn hoặc ít nhất là thích int/ int_leastN_Tloại cho các biến ngăn xếp.
dùng694733

Đã làm sai về nhận xét của tôi. Ý tôi nói là; sử dụng int_fastN_tcác loại, không phải int_leastN_tcác loại.
dùng694733

@ user694733: Tôi muốn Tiêu chuẩn C sẽ cho phép mã yêu cầu một số nguyên chiếm một kích thước nhất định trong bộ nhớ và có thể hoạt động trên các giá trị trong một phạm vi cụ thể, nhưng với ngữ nghĩa được chỉ định một cách lỏng lẻo khi vượt ra ngoài phạm vi đó. Trên một cái gì đó giống như ARM, int16_tthông thường sẽ nhanh như int32_tcác giá trị được lưu trong bộ nhớ, nhưng Tiêu chuẩn yêu cầu rằng trên các nền tảng có int17 bit trở lên, int16_t x=32767; x+=2;phải được đặt xthành -32767, thường yêu cầu các lệnh mở rộng ký hiệu ngay cả khi mã sẽ không bao giờ sử dụng các hành vi gói.
supercat

@supercat C tiêu chuẩn yêu cầu hành vi gói chỉ cho các loại không dấu. Đối với các loại đã ký, bất kỳ gói nào là UB, vì các cách biểu diễn có thể khác nhau. Vì vậy, với x+=2việc sử dụng hướng dẫn cho các loại 16 bit là hợp pháp, bởi vì trình biên dịch có thể cho rằng giá trị sẽ không bao bọc, và do đó sử dụng nó sẽ không thay đổi hành vi có thể quan sát được. Nhưng tôi nghĩ rằng ARM không có lệnh ADD 16 bit để thực hiện điều này. (Tôi có thể sai, kiến ​​thức của tôi về bộ hướng dẫn ARM không tốt lắm.)
user694733

8

Thật hữu ích khi nhớ rằng ARM sở hữu tài sản trí tuệ cho bộ vi xử lý, nhưng thực tế không tạo ra các bộ phận. Thay vào đó, các nhà sản xuất cấp phép cho các phiên bản bộ xử lý ARM khác nhau và sản xuất các bộ phận độc đáo của riêng họ với các hỗn hợp riêng biệt của các tính năng và thiết bị ngoại vi.

Như đã nói, nếu bạn chưa quen với kiến ​​trúc, có lẽ sẽ hợp lý khi bắt đầu với tài liệu của ARM, về cơ bản, là tài liệu cơ bản cho tất cả các bộ vi xử lý như vậy.

Ví dụ, Cortex-M0 được mô tả trên trang web của ARM .

Ngoài ra còn có một danh sách các cuốn sách liên quan đến ARM phục vụ nhiều nhu cầu và sở thích khác nhau.

Cuối cùng, có datasheets của nhà sản xuất cụ thể. Đối với M0, Cypress, NXP và STMicroelectronics chỉ là ba trong số nhiều nhà sản xuất phụ tùng thật dựa trên Cortex-M0.

(Và không, tôi không làm việc cho ARM và không bao giờ có.)


1
Đây là một câu trả lời khá chung chung không liên quan nhiều đến một số tài liệu Cortex-M0, mà tôi chắc chắn OP có thể tự mình tìm thấy.
Jay Carlson

1
Nó giải quyết câu hỏi trực tiếp yêu cầu trợ giúp tìm tài liệu tổng thể. Câu trả lời này trực tiếp trả lời cần và giải thích lý do tại sao mọi thứ là như vậy.
Edward

8

Một sự khác biệt lớn là việc sử dụng các thư viện do nhà cung cấp cung cấp. Đối với PIC, Atmels, v.v., các thư viện cơ bản (cho gpio, bộ hẹn giờ, adc, v.v.) không được sử dụng nhiều bởi hầu hết các nhà phát triển. Theo kinh nghiệm của tôi, mọi người sẽ (nhiều nhất) sử dụng chúng làm hướng dẫn khi viết mã của riêng họ.

Tuy nhiên, với ARM, các thư viện hầu như luôn được sử dụng. Có một tiêu chuẩn, "CMSIS", mà các nhà sản xuất được khuyến nghị tuân theo. Hầu hết làm. Nó hỗ trợ tính di động của mã (giữa các ARM khác nhau và giữa các nhà sản xuất) và đưa ra phương pháp "chuẩn hóa" để cấu trúc mã của bạn. Mọi người đã quen với việc nhìn và hiểu các chức năng của thư viện.

Chắc chắn có một số nhà phát triển truy cập vào các thanh ghi trực tiếp, nhưng họ là những người ngoài cuộc :)

Để trả lời câu hỏi của bạn, tôi thấy rất hữu ích khi đọc qua tài liệu của Thư viện. ST có mã được phát triển tốt, với tệp trợ giúp do Doxygen tạo. Bạn có thể thấy tất cả các tùy chọn cho mỗi mô-đun phần cứng.

Để sử dụng GPIO làm ví dụ, hàm khởi tạo xử lý:

  • Hướng (Vào hoặc ra)
  • pullups / pulldowns
  • mở collector / đẩy-kéo
  • tốc độ quay
  • v.v.

Bằng cách nhìn vào các tùy chọn, bạn có thể thấy những gì có thể. Và, tất nhiên, bạn sẽ học cách chuyển các tùy chọn này vào chức năng init!

OK, bây giờ tôi đã nói điều đó, tôi thấy rằng ARM cụ thể của bạn không có thư viện tuân thủ CMSIS. Thay vào đó, họ có sẵn SDK độc quyền để tải xuống. Tôi sẽ bắt đầu tìm kiếm mặc dù tài liệu SDK của họ.

Nếu bạn chưa kết hôn với sản phẩm cụ thể này, tôi có thể khuyên bạn nên tìm một nhà cung cấp khác với các thư viện phù hợp hơn. Dù sao bạn cũng sẽ leo lên một đường cong học tập, vì vậy bạn cũng có thể làm cho khoản đầu tư của mình trở nên linh hoạt hơn ...

ARM rất vui! Tôi không nhìn lại.


"Đối với PIC, Atmels, v.v., các thư viện không được sử dụng nhiều bởi hầu hết các nhà phát triển." Không chắc chắn nơi đó đến từ. Tôi chỉ sử dụng PIC, không phải AVR, nhưng chắc chắn sẽ không muốn viết thư viện của riêng tôi, ví dụ, cho giao diện máy chủ USB hoặc ngăn xếp TCP hoặc hệ thống tệp thẻ SD. Các thư viện của Microchip cho tất cả những thứ này có vẻ khá đầy đủ.
tcrosley

À, @tcrosley, bạn chắc chắn đúng. Tôi chỉ cố gắng tham khảo các chức năng được bao phủ bởi các thiết bị ngoại vi cơ bản: gpio, bộ hẹn giờ, adc, v.v.
bitsmack

Tôi đồng ý, tôi thường truy cập GPIO, bộ hẹn giờ, đồng hồ và UART R / W trực tiếp. Đôi khi tôi sử dụng các cuộc gọi thư viện của họ để thiết lập I2C, SPI, ADC và UART nhưng không phải lúc nào cũng vậy. Rất nhiều thanh ghi, cho dù bạn đang nói PIC (và cụ thể là PIC32) hay ARM.
tcrosley

Tôi nghĩ rằng câu trả lời này là câu trả lời thực dụng nhất được liệt kê cho câu hỏi này, mặc dù nó không áp dụng cho bộ điều khiển cụ thể của OP. Tôi nghĩ rằng bạn có thể thực hiện khá nhiều kỹ thuật nhúng tốt mà không cần hiểu AHB hoặc NVIC.
Jay Carlson

@JayCarlson Cảm ơn! Chỉnh sửa của bạn cho câu trả lời này đã bị từ chối vì chúng tôi không có nghĩa vụ phải thay đổi đáng kể bài đăng của người khác. Nhưng đó là thông tin thực sự tốt! Tôi đề nghị bạn đăng nó dưới dạng câu trả lời của riêng bạn, vì vậy nó sẽ giúp mọi người và cũng được nâng cấp :)
bitsmack

5

Thời gian tốt để được di chuyển; 8 bit đang chết nhanh chóng; khi bạn có thể mua một bảng 5 đô la với (ví dụ) một STM32F103, một bộ vi điều khiển ARM 32 bit khá có khả năng (thậm chí có cả USB!), không có nghi ngờ gì đã thay đổi.

Bạn đã có một số câu trả lời xuất sắc nhưng chủ yếu tôi nói "quên lắp ráp" và gần như "quên quan tâm đến cách thức hoạt động của cpu ở mức độ thấp" - một ngày nào đó sẽ có một trường hợp góc mà bạn cần tìm hiểu sâu về nó (tối ưu hóa cụ thể hoặc để gỡ lỗi) nhưng lõi ARM chạy mã C đặc biệt tốt (theo thiết kế) và bạn khác nhau hiếm khi cần phải dấn sâu vào bên trong ruột.

Điều này không có nghĩa là bạn sẽ dành một khoảng thời gian nhất định để đập đầu vào các vấn đề với trình biên dịch (và đặc biệt là trình liên kết và tệp tạo tệp) che giấu các lỗi tối nghĩa với bạn nhưng tất cả đều có thể vượt qua.

Ý tưởng về cách thức hoạt động của ARM (tức là sách cpu ARM) dày đặc và không thú vị cho đến ngày bạn thực sự cần tối ưu hóa (và bạn sẽ ngạc nhiên khi bạn có đăng ký 32 bit và PLL của bạn ' d Đồng hồ CPU nằm trong vùng 100 mhz).

Tập lệnh ARM "skool cũ" dễ đọc hơn so với "Thumb2" mới hơn nhiều - đó là những gì bạn tìm thấy trên hầu hết các ARM cấp vi điều khiển hiện đại (Cortex) - nhưng lại là phần bên trong của các hướng dẫn ngôn ngữ lắp ráp Chủ yếu là mờ dần vào nền; nếu bạn có bộ công cụ phù hợp (đặc biệt là trình gỡ lỗi cấp nguồn tốt với các điểm dừng / bước đơn, v.v.), bạn hoàn toàn không quan tâm đến việc nó có phải là ARM không.

Khi bạn ở trong thế giới của các thanh ghi 32 bit và độ rộng bus dữ liệu 32 bit và mọi thứ bạn muốn có sẵn trên chip, bạn sẽ không bao giờ muốn quay lại CPU 8 bit nữa; về cơ bản thường không có hình phạt nào cho việc "làm cho nó dễ dàng" và viết mã để dễ đọc hơn hiệu quả.

Tuy nhiên ... thiết bị ngoại vi ... aye và đó là chà.

Bạn chắc chắn nhận được rất nhiều thứ để chơi trên các MCU hiện đại, và rất nhiều trong số đó là những thứ khá lạ mắt; bạn thường tìm thấy một thế giới tinh tế vượt xa, vượt xa các thiết bị ngoại vi trên chip AVR, PIC và 8051.

Một bộ đếm thời gian lập trình? Không, có tám! DMA? Làm thế nào về 12 kênh với chế độ ưu tiên và chế độ bùng nổ và chế độ chuỗi và tự động tải lại và .. và ... và ... và ...

I2C? I2S? Hàng chục lựa chọn muxing pin? Mười lăm cách khác nhau để lập trình lại flash trên chip? Chắc chắn rồi!

Nó thường có cảm giác như bạn đã đi từ nạn đói đến bữa tiệc với các thiết bị ngoại vi và điều phổ biến là có toàn bộ khối chip mà bạn sẽ ngưỡng mộ nhưng hầu như không sử dụng (do đó, gating đồng hồ).

Số lượng phần cứng trên chip (và các biến thể trong đó chỉ trong một dòng chip của nhà cung cấp) hiện nay khá khó hiểu. Một nhà cung cấp chip tất nhiên sẽ có xu hướng sử dụng lại các khối IP, vì vậy một khi bạn đã quen thuộc với một thương hiệu nào đó thì mọi chuyện sẽ trở nên dễ dàng hơn nhưng "ngày nay shit đã có craaaazy."

Nếu bất cứ điều gì các thiết bị ngoại vi và tương tác của chúng (và DMA và ngắt và phân bổ bus và và ...) đều phức tạp SO (và, đôi khi, không chính xác như được mô tả trong bảng dữ liệu) mà các kỹ sư thường có một phạm vi MCU ARM yêu thích và có xu hướng muốn gắn bó với nó đơn giản vì họ quen thuộc với các thiết bị ngoại vi và công cụ phát triển.

Các thư viện và công cụ phát triển tốt (tức là biên dịch nhanh + chu trình gỡ lỗi với trình gỡ lỗi thích hợp) và một tập hợp lớn các dự án mã ví dụ hoạt động là cực kỳ quan trọng đối với lựa chọn ARM MCU của bạn hiện nay. Có vẻ như hầu hết các nhà cung cấp hiện nay có bảng đánh giá cực kỳ rẻ (

Như tôi chắc chắn rằng bạn đã nhận thấy, một khi bạn vượt qua cấp vi điều khiển với ARM và vào cấp SOC (ví dụ SOC kiểu Raspberry Pi / etc) thì các quy tắc sẽ thay đổi hoàn toàn và đó là tất cả về loại Linux bạn sẽ sử dụng để chạy, bởi vì - với một vài ngoại lệ đáng tiếc - bạn sẽ nổi điên khi cố gắng làm bất cứ điều gì khác.

Về cơ bản; bất kể CPU nào (có thể) đã được chọn trước cho bạn trong hợp đồng biểu diễn này, hãy mua cho mình một số bảng đánh giá dựa trên Cortex siêu rẻ từ một số nhà cung cấp khác nhau (TI, STM, Freescale và hơn thế nữa) và có một hack xung quanh với mã mẫu được cung cấp.

Lời khuyên cuối cùng; một khi bạn tìm thấy một hoặc ba trang trong biểu dữ liệu mô tả các tùy chọn ghim pin cho chip số phần chính xác mà bạn đang làm việc, bạn có thể muốn in nó ra và dán lên tường. Phát hiện muộn trong một dự án rằng một sự kết hợp các thiết bị ngoại vi nhất định là không thể vì việc ghép pin không có gì thú vị và đôi khi thông tin đó bị chôn vùi, bạn thề rằng họ đang cố gắng che giấu nó :-)


một phụ lục nhanh - nếu dự án của bạn không chỉ là bộ điều khiển đơn giản nhất, hãy nghĩ đến việc sử dụng RTOS - có một thứ gì đó phù hợp với bất cứ điều gì bạn chọn, nhưng ngay cả các ARM nhỏ nhất hiện nay đều có nhiều hệ điều hành để chạy HĐH đa luồng. Cá nhân tôi đã tìm thấy ChibiOS là một sự pha trộn tuyệt vời của khả năng tinh gọn (đặc biệt là chạy trên STM32, nơi nó đi kèm với một thư viện ngoại vi đẹp) nhưng có một số lựa chọn.
Richard Aplin

4

Tôi cũng đến từ AVR và bây giờ thường gắn bó với STM32 (Cortex-M). Đây là những gì tôi khuyên dùng cho người mới bắt đầu và phản ánh những khó khăn của riêng tôi khi tôi bắt đầu:

  1. Nhận một bảng với trình gỡ lỗi hoặc ít nhất là trình kết nối JTAG (và sau đó mua trình gỡ lỗi JTAG). Có nhiều cái giá rẻ xung quanh, và bạn sẽ tiết kiệm được nhiều thời gian bằng cách sử dụng nó.

  2. Nhận một IDE tốt với tất cả mọi thứ bao gồm. Tôi đã từng giới thiệu CooCox CoIDE từ lâu. Kể từ đó, nó đã dừng lại và khởi động lại sự phát triển, vì vậy tôi không chắc bây giờ nó như thế nào. "Một IDE tốt" cho phép bạn có được đèn LED Hello World cơ bản nhấp nháy ngay lập tức.

  3. "Một IDE tốt" sẽ thiết lập các tiêu đề CMSIS của nhà sản xuất. Về cơ bản, đây là bản đồ đăng ký cho phép viết chương trình C / C ++ dễ dàng hơn, với tên biến thay vì số và con trỏ đơn giản.

  4. Cố gắng sử dụng các thư viện ngoại vi của nhà sản xuất, nếu bạn không cần hiệu suất tốt nhất tuyệt đối. Bạn thực sự không cho bây giờ, vì bạn đang học. Nếu sau này bạn thấy bạn cần phải siết chặt hơn, hãy nhìn vào mã thư viện để xem nó làm gì. Điểm hay của các thư viện cũng là chúng thường cho phép bạn sử dụng nhiều chip khác nhau từ cùng một nhà sản xuất với cùng một mã.

  5. Khác với AVR, các chip ARM bắt đầu với các thiết bị ngoại vi bị vô hiệu hóa. Bạn cần kích hoạt chúng trước. Một thư viện ngoại vi tốt sẽ có các ví dụ về cách sử dụng các thiết bị ngoại vi đúng cách và bạn có thể nhận thêm một số thông tin từ biểu dữ liệu của thiết bị. Vì vậy, hãy nhớ bật đồng hồ và thiết bị ngoại vi trước khi bạn sử dụng chúng. Có, thậm chí các cổng I / O được coi là thiết bị ngoại vi.

  6. Mã khi bạn học. Đừng cố gắng mò mẫm mọi thứ cùng một lúc, vì nó thực sự khá phức tạp. Tôi sẽ bắt đầu bằng cách học cây đồng hồ (xe buýt APB, AHB, v.v.) và cách đồng hồ và bộ chia đồng hồ tương tác. Sau đó, tôi sẽ xem IDE lưu trữ các tập lệnh liên kếtmã khởi động cho thiết bị của bạn. Kịch bản trình liên kết có khá nhiều cách bạn sắp xếp bộ nhớ (đâu là RAM, flash, bảng vectơ ISR, v.v.). Tập lệnh khởi động thiết lập chương trình của bạn (những thứ như sao chép bộ khởi tạo biến toàn cục từ flash sang RAM). Một số IDE có tập lệnh khởi động trong ASM và một số có trong C. Đôi khi bạn có thể Google cho một tập lệnh khác, bằng ngôn ngữ bạn thích.

  7. Nhận trình gỡ lỗi đi càng sớm càng tốt. Việc bắt đầu mắc lỗi là khá phổ biến, bằng cách thực hiện một số nội dung (thường là khởi tạo phần cứng) theo một thứ tự khác so với bạn nên làm. Điều này đôi khi kích hoạt một ngoại lệ ISR đưa bạn vào while(1);vòng lặp vô hạn (triển khai mặc định cho ISR đó) tạm dừng chương trình của bạn và thật khó để theo dõi ngay cả với trình gỡ lỗi. Hãy tưởng tượng mà không có một trình sửa lỗi.

  8. Nói về trình gỡ lỗi, hãy cố gắng để UART hoạt động, sau đó sử dụng bộ chuyển đổi USB nối tiếp để đọc điều đó. printf()gỡ lỗi luôn hữu ích :-)


3

Tôi không làm việc nhiều trên 8051, AVR hoặc PIC. Nhưng gần đây tôi đã bắt đầu xem xét dòng vi xử lý ARM Cortex MX. Do đó tôi không thể nói cho bạn biết nhiều về quá trình chuyển đổi từ 8051, AVR hoặc PIC, nhưng chủ yếu là từ quan điểm của người mới bắt đầu.

Bộ xử lý ARM®Cortex ™ -M4 dựa trên kiến ​​trúc Harvard, do đó có các bus dữ liệu và hướng dẫn riêng biệt. Dưới đây là một hình ảnh cấp cao.

nhập mô tả hình ảnh ở đây

Tuần này các đại diện của NXP sẽ đến thăm cơ sở của chúng tôi. Tôi sẽ kiểm tra với họ xem có tài nguyên NXP ARM-Cortex Mx nào không và đăng chúng ở đây. Freescale có Bộ vi điều khiển 32 bit Kinetis Low Power (MCU) dựa trên ARM® Cortex®-M Cores , tôi hiểu rằng họ cũng có hướng dẫn tương tự để học bộ xử lý ARM. Thật không may, tôi đã không nghiên cứu chúng.


Tài liệu tham khảo:

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.