cuốn sách gpt4 ai đã làm

Pi Ziheng Embedded: Phân tích thư viện chương trình cơ sở dữ liệu FSP Line Renesas RA của trình điều khiển ngoại vi

In lại Tác giả: Sahara Thời gian cập nhật: 2024-10-20 10:18:59 59 4
mua khóa gpt4 Nike


  Xin chào mọi người, tôi là Pi Ziheng, một kẻ lưu manh nguy hiểm với công nghệ. in firmware FSP line Renesas RA.

  Trong bài viết trước “Trải nghiệm đầu tiên về quá trình phát triển MCU hiệu suất cao dòng Renesas RA8”, Pi Ziheng đã đưa ra cho mọi người kinh nghiệm nhanh ba thành phần chính trong quá trình phát triển MCU của Renesas (môi trường phát triển e2 studio, gói phần mềm FSP và bảng đánh giá EK). (Bài viết này chủ yếu phân tích phần driver ngoại vi).

1. So sánh kiến ​​trúc gói phần mềm

  Chúng tôi đã thử so sánh các chương trình cơ sở gói của STMicroelectronics, NXP và Renesas để tìm ra những điểm khác biệt về kiến ​​trúc của chúng.

1.1 Gói MCU ST STM32Cube

  Đầu tiên, hãy xem STMicroelectronics, công ty đã thiết lập hệ thống sinh thái phần sụn từ khá sớm. Miếng là Gói MCU STM32Cube. Liên quan đến Milddeware Nó cho thấy CMSIS là một mã cấp trung tương đối phổ biến.

  Trong số đó, chúng tôi chủ yếu tập trung vào quá trình điều khiển BSP và HAL. bo mạch cấp độ (chẳng hạn như Codec, các biến cảm khác nhau, vv) và HAL là trình điều khiển ngoại vi trên chip MCU. HAL.

  Về HAL điều khiển ở đây, cần phải mở rộng hơn nữa. Thư viện LL (Lớp vật tượng cứng) và Thư viện LL (Lớp thấp), HAL trong sơ đồ kiến ​​trúc thực chất đề cập đến thư viện HAL và thư viện LL Cách hiểu đơn giản về mối mọt. quan hệ giữa thư viện này là SPL = HAL + LL.

Cơ sở thư viện file: xxxMCU_ll_xxxPeripheral.c/h, API được cung cấp chủ yếu là một thao tác cài đặt duy nhất cho các thanh ghi ngoại vi trên chip, API có tên là LL_PERIPHERAL_xxxAction() ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct) Tệp lớp tượng tượng: xxxMCU_hal_xxxPeripheral.c/h. API này có tên là HAL_PERIPHERAL_xxxFunc(). Ví dụ nguyên mẫu: HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart) Tệp tiêu chuẩn: xxxMCU_xxxPeripheral. được cung cấp bao gồm cả LL và HAL ở trên Chức năng (nhưng mức độ phát triển khai thác thấp hơn một chút), API đã được đặt tên là PERIPHERAL_xxxFunc/Action() Ví dụ về nguyên mẫu: void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

1.2 NXP MCUXpresso-SDK

  Hãy xem chủ sở hữu NXP Semiconductors của Pi Ziheng. trên (phần cứng MCU, CMSIS, HAL điều khiển, Middleware & BSP, Ứng dụng được xuất ra khác với quan điểm của ST, CMSIS). Ở đây gần với phần cứng MCU. Rõ ràng NXP cho rằng CMSIS cũng là cơ sở mã hóa.

  Trong kiến ​​trúc NXP, BSP và HAL không nằm trên cùng một lớp, điều này xác định rằng BSP là mã dựa trên HAL. của NXP tương tự như tiêu chuẩn thư viện ban đầu SPL của STMicroelectronics, nhưng mức độ phong phú của API chức năng vượt xa SPL.

Tệp lớp vật thể: fsl_xxxPeripheral.c/h, API được cung cấp bao gồm cả thao tác cài đặt duy nhất của các thanh ghi ngoại vi trên chip API được đặt tên là PERIPHERAL_xxxFunc/Action(). Ví dụ: status_t LPUART_Init(. LPUART_Type. *cơ sở, const lpuart_config_t *config, uint32_t srcClock_Hz);

1.3 Renesas RA FSP

  Cuối cùng, nhìn vào Renesas FSP, nó không hiển thị cấu trúc phân cấp rõ ràng, nhưng có thể thấy rằng BSP và HAL không nằm trên cùng một lớp trong kiến trúc Renesas và BSP nằm dưới HAL. BSP ở đây cũng bao gồm CMSIS. Rõ ràng Renesas tin rằng BSP bao gồm cả phần cứng cơ bản liên quan đến lõi MCU và trình điều khiển phần cứng thiết bị cấp bo mạch.

  Thiết kế của trình điều khiển Renesas HAL khá thú vị. Không giống như STMicroelectronics và NXP, nó chú ý nhiều hơn đến tính trừu tượng của các chức năng ngoại vi (cũng có thể hiểu là hướng đối tượng hơn). được tạo để xác định nguyên mẫu API, nguyên mẫu tập trung vào hoạt động chức năng chung của các thiết bị ngoại vi, đồng thời bỏ qua các chi tiết hoạt động và sự khác biệt của các thiết bị ngoại vi cụ thể. Chúng tôi sẽ thảo luận chi tiết về vấn đề này trong phần tiếp theo.

Tệp lớp trừu tượng: r_xxxModule_api.h, xác định cấu trúc nguyên mẫu API trình điều khiển mô-đun ngoại vi hợp nhất, phù hợp với các tình huống ngoại vi khác nhau có chức năng tương tự (ví dụ: chức năng UART có thể là SCI_USART hoặc SCI_UART hoặc loại khác) r_xxxPeripheral.c/h, Được cung cấp API chủ yếu bao gồm các hoạt động toàn diện về các chức năng cụ thể của các thiết bị ngoại vi trên chip và trên chip. API được đặt tên là R_PERIPHERAL_xxxFunc(). Ví dụ: fsp_err_t. R_SCI_B_UART_Open (uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg)

2. Cấu trúc driver ngoại vi trong FSP

  Trong dự án mẫu lpm_ek_ra8m1_ep ở bài viết trước, chúng tôi thấy rằng có thư mục ra sau, đây là tệp nguồn liên quan đến gói FSP. Chúng ta hãy phân tích nó dựa trên các tệp nguồn cụ thể:

2.1 Tệp tiêu đề và tệp khởi động

  Trước hết, có sự khác biệt nhỏ giữa ba công ty trong việc đặt tên tệp hệ thống (tệp tiêu đề và tệp khởi động), nhưng điểm khác biệt lớn nhất là định nghĩa thanh ghi ngoại vi trong tệp tiêu đề mô hình, liên quan chặt chẽ đến việc triển khai mã tiếp theo. trong trình điều khiển HAL.

Loại tệp STVi điện tử Chất bán dẫn NXP Renesas Điện tử
Tệp tiêu đề sê-ri stm32xxxx.h fsl_device_registers.h Renesas.h
Tệp tiêu đề mô hình xxxMcu.h xxxMCU.h xxxMCU.h
tập tin khởi động startup_xxxMcu.s startup_xxxMcu.s khởi động.c
Tệp khởi tạo system_xxxMcu.c/h system_xxxMcu.c/h hệ thống.c/h

  Về mặt định nghĩa nguyên mẫu thanh ghi ngoại vi trong tệp tiêu đề, tiếng Ý và NXP là nhất quán. Mỗi thanh ghi được lưu trữ với một loại uint32_t, trong khi Renesas sử dụng một liên kết để lưu trữ từng thanh ghi. Điều này không chỉ cho phép toàn bộ thanh ghi có thể được truy cập. và các bit chức năng cụ thể trong thanh ghi cũng có thể được truy cập bằng trường bit.

  Ngoài ra, cả ba công ty đều đã tạo ra các định nghĩa mặt nạ và pos cho các bit chức năng đơn/đa bit của các thanh ghi ngoại vi để tạo điều kiện thuận lợi cho mã thực hiện các hoạt động bit liên quan. Để tạo điều kiện thuận lợi cho việc gán các vùng bit chức năng nhiều bit, NXP và STMicroelectronics có các định nghĩa bổ sung (để đạt được hiệu quả của Renesas khi sử dụng phép kết hợp để xác định nguyên mẫu thanh ghi ngoại vi).

xxxPERIPHERAL_xxxREGISTER_xxxFunc_Msk/MASK xxxPERIPHERAL_xxxREGISTER_xxxFunc_Pos/SHIFT // NXP đã xác định thêm các macro sau để gán các vùng bit chức năng nhiều bit xxxPERIPHERAL_xxxREGISTER_xxxFunc() // Phương pháp của Ý sử dụng trực tiếp nhiều macro để hỗ trợ thiết lập từng bit của vùng bit chức năng nhiều bit xxxPERIPHERAL_xxxREGISTER_xxxFunc xxxPERIPHERAL_xxxREGISTER_xxxFunc_0 xxxPERIPHERAL_xxxREGISTER_xxxFunc_1 ...

2.2 Tệp trình điều khiển HAL

  Về cấu trúc mã của chính trình điều khiển HAL, chúng tôi chủ yếu phân tích định nghĩa tham số chính thức đầu tiên của ba API để biết những điểm khác biệt chính. Trong số đó, thư viện NXP và STMicroelectronics LL là con trỏ tới các cấu trúc nguyên mẫu ngoại vi, trong khi thư viện STMicroelectronics HAL và Renesas It. là một con trỏ tới khối điều khiển ngoại vi tùy chỉnh. Khối trước ở gần lớp dưới cùng và khối sau ở gần lớp ứng dụng hơn. .

tham số STVi điện tử Chất bán dẫn NXP Renesas Điện tử
cái đầu tiên Thư viện LL: PERIPHERAL_TypeDef *
Thư viện HAL: PERIPHERAL_HandleTypeDef *
PERIPHERAL_Loại * module_ctrl_t * const

  Pi Ziheng đã đề cập trước đó rằng Renesas có một tệp r_xxxModule_api.h bổ sung. Hãy lấy thiết bị ngoại vi SCI làm ví dụ, tương ứng với tệp r_uart_api.h. Tệp này xác định bộ hành động API tiêu chuẩn sau. Hãy để tên hàm trình điều khiển (chẳng hạn như init, deinit, v.v.) giống một hành động của lớp ứng dụng hơn.

/** Định nghĩa Giao diện chia sẻ cho UART */ typedef struct st_uart_api { fsp_err_t (* open)(uart_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); fsp_err_t (* read)(uart_ctrl_t * const p_ctrl, uint8_t * const p_dest, uint32_t const byte); fsp_err_t (* ghi)(uart_ctrl_t * const p_ctrl, uint8_t const * const p_src, uint32_t const byte); fsp_err_t (* baudSet)(uart_ctrl_t * const p_ctrl, void const * const p_baudrate_info); fsp_err_t (* callbackSet)(uart_ctrl_t * const p_ctrl, void (* fsp_err_t (* readStop)(uart_ctrl_t * const p_ctrl, uint32_t * còn lại_byte); } uart_api_t;

  Trong tệp r_sci_b_uart.c, chức năng trình điều khiển UART được triển khai dựa trên các thiết bị ngoại vi SCI được khởi tạo cho uart_api_t, do đó các ứng dụng lớp trên chỉ có thể gọi các giao diện trong uart_api_t để triển khai các chức năng cụ thể mà không cần phải quan tâm đến loại giao diện bên ngoài nào. các giao diện được tạo ra. Nó được thiết kế để hiện thực hóa. Ưu điểm của thiết kế này là tạo điều kiện cho mã xuyên ngoại vi (cross-MCU) và dễ dàng ghép mã. Nhược điểm là nó hạn chế sự phong phú của API và gây khó khăn cho việc thể hiện các đặc điểm khác biệt giữa các thiết bị ngoại vi.

/* UART trên ánh xạ API SCI HAL cho giao diện UART */ const uart_api_t g_uart_on_sci_b = { .open = R_SCI_B_UART_Open, .close = R_SCI_B_UART_Close, .write = R_SCI_B_UART_Write, .read = R_SCI_B_UART_Read, .infoGet = R_SCI_B_UART_InfoGet, .baudSet = R_SCI_B_UART_BaudSet, .communicationAbort = R_SCI_B_UART_Abort, .callbackSet = R_SCI_B_UART_CallbackSet, .readStop = R_SCI_B_UART_ReadStop, };

  Đến đây, Pi Ziheng đã giới thiệu xong các trình điều khiển ngoại vi trong thư viện chương trình cơ sở FSP dòng Renesas RA, tiếng vỗ tay đâu rồi ~~~.

Chào mừng bạn đăng ký

Bài viết sẽ được xuất bản đồng thời lên trang chủ blog park, trang chủ CSDN, trang chủ Zhihu và nền tảng tài khoản công khai WeChat của tôi.

Tìm kiếm "Pi Zi Heng Embedded" trên WeChat hoặc quét mã QR bên dưới để xem ngay trên điện thoại di động của bạn.

Cuối cùng, bài viết này về Piziheng Embedded: Phân tích Thư viện chương trình cơ sở FSP dòng RA của Renesas RA kết thúc tại đây. Nếu bạn muốn biết thêm về Piziheng Embedded: Phân tích Thư viện chương trình cơ sở FSP dòng Renesas RA Để biết nội dung trình điều khiển ngoại vi, vui lòng tìm kiếm các bài viết về CFSDN hoặc. tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

59 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress