在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 瑞薩RA0單片機連載之移植面向?qū)ο笾甎ART驅(qū)動

            瑞薩RA0單片機連載之移植面向?qū)ο笾甎ART驅(qū)動

            作者:lulugl 時間:2024-11-21 來源:EEPW 收藏

            串口是最常用的外設之一。本次創(chuàng)建面向?qū)ο髞硪浦睻ART 的驅(qū)動。

            本文引用地址:http://www.biyoush.com/article/202411/464857.htm

            1   學習例程

            百問網(wǎng)的面向?qū)ο蟮倪@,源代碼為百問網(wǎng)的RA6M5 的驅(qū)動,我這里做了細小的改動而實現(xiàn)快速的驅(qū)動。

            2   創(chuàng)建工程

            在上一篇連載之三基于面向?qū)ο蟮腖ED燈(刊載于《電子設計與芯片應用(10 月刊)》)的基礎上添加串口的驅(qū)動。

            1.本次驅(qū)動選用的驅(qū)動的串口為r_sau_uart0, 配置的IO 為P100,P101 為TX 與RX。

            打開RASC, 添加uart0添回串口回調(diào)函數(shù)為sau_uart_callback。并生成工程。

            1732196677847980.png

            2.移植dev_uart.c/h、drv_uart.c/h 到工程中:

            1732196769396381.png

            3. 其代碼dev_uart.c 如下:

            view plaincopy to clipboardprint?

            1. #include “dev_uart.h”

            2. #include <drivers.h>

            3.

            4. #include <stdlib.h>

            5. #include <string.h>

            6. #include <stdio.h>

            7.

            8.

            9. static struct UartDev *gHeadUartDev;

            10.

            11. void UartDevicesRegister(void)

            12. {

            13. UartDevicesCreate();

            14. UartDeviceList();

            15. }

            16.

            17. void UartDeviceInsert(struct UartDev *ptdev)

            18. {

            19. if(NULL == gHeadUartDev)

            20. gHeadUartDev = ptdev;

            21. else

            22. {

            23. ptdev->next = gHeadUartDev;

            24. gHeadUartDev = ptdev;

            25. }

            26. }

            27.

            28. struct UartDev * UartDeviceFind(const char

            *name)

            29. {

            30. struct UartDev *ptdev = gHeadUartDev;

            31. while(ptdev)

            unsigned char * const buf, unsigned int length);

            19.

            20. static volatile bool gUart0TxCplt = false;

            21. static volatile bool gUart0RxCplt = false;

            22.

            23. static struct UartDev gLogDevice = {

            24. .name = “Log”,

            25. .channel = 0,

            26. .Init = UARTDrvInit,

            27. .Read = UARTDrvRead,

            28. .Write = UARTDrvWrite,

            29. .next = NULL

            30. };

            31.

            32. void UartDevicesCreate(void)

            33. {

            34. UartDeviceInsert(&gLogDevice);

            35. gLogDevice.Init(&gLogDevice);

            36. }

            37.

            38. static int UARTDrvInit(struct UartDev *ptdev)

            39. {

            40. if(NULL == ptdev) return -EINVAL;

            41.

            42. switch(ptdev->channel)

            43 {

            44. case 0:

            45. {

            46. fsp_err_t err = g_uart0.p_api->open(g_

            uart0.p_ctrl, g_uart0.p_cfg);

            47. assert(FSP_SUCCESS == err);

            48. break;

            49. }

            50.

            51. case 1:case 2:

            52. case 3:case 4:case 5:

            53. case 6:

            54. {

            55. break;

            56. }

            57. case 7:

            58.

            59. case 8:case 9:

            60. break;

            61. default:break;

            62. }

            63.

            64. return ESUCCESS;

            65. }

            66.

            67. static int UARTDrvWrite(struct UartDev *ptdev,

            unsigned char * const buf, unsigned int length)

            68. {

            69. if(NULL == ptdev) return -EINVAL;

            70. if(NULL == buf) return -EINVAL;

            71. if(0 == length) return -EINVAL;

            72.

            73. switch(ptdev->channel)

            74. {

            75. case 0:

            76. {

            77. fsp_err_t err = g_uart0.p_api->write(g_

            uart0.p_ctrl, buf, length);

            78. assert(FSP_SUCCESS == err);

            79. UART0WaitTxCplt();

            80. break;

            81. }

            82. case 1:case 2:

            83. case 3:case 4:case 5:

            84. case 6:

            85. {

            86. break;

            87. }

            88. case 7:

            89.

            90. case 8:case 9:

            91. break;

            92. default:break;

            93. }

            94. return ESUCCESS;

            95. }

            96. static int UARTDrvRead(struct UartDev *ptdev,

            unsigned char *buf, unsigned int length)

            97. {

            98. if(NULL == ptdev) return -EINVAL;

            99. if(NULL == buf) return -EINVAL;

            100. if(0 == length) return -EINVAL;

            101.

            102. switch(ptdev->channel)

            103. {

            104. case 0:

            105. {

            106. fsp_err_t err = g_uart0.p_api->read(g_

            uart0.p_ctrl, buf, length);

            107. assert(FSP_SUCCESS == err);

            108. UART0WaitRxCplt();

            109. break;

            110. }

            111. case 1:case 2:

            112. case 3:case 4:case 5:

            113. case 6:

            114. {

            115. break;

            116. }

            117. case 7:

            118.

            119. case 8:case 9:

            120. break;

            121. default:break;

            122. }

            123.

            124. return (int)length;

            125. }

            126.

            127. void sau_uart_callback(uart_callback_args_

            t * p_args)

            128. {

            129. switch(p_args->event)

            130. {

            131. case UART_EVENT_RX_COMPLETE:

            132. {

            133. gUart0RxCplt = true;

            134. break;

            135. }

            136. case UART_EVENT_TX_COMPLETE:

            137. {

            138. gUart0TxCplt = true;

            139. break;

            140. }

            141. case UART_EVENT_RX_CHAR:

            142. {

            143. break;

            144. }

            145. case UART_EVENT_ERR_PARITY:case

            UART_EVENT_ERR_FRAMING:

            146. case UART_EVENT_ERR_OVERFLOW:case

            UART_EVENT_BREAK_DETECT:

            147. case UART_EVENT_TX_DATA_EMPTY:

            148. break;

            149. default:break;

            150. }

            151. }

            152.

            153. static void UART0WaitTxCplt(void)

            154. {

            155. while(!gUart0TxCplt);

            156. gUart0TxCplt = false;

            157. }

            158.

            159. static void UART0WaitRxCplt(void)

            160. {

            161. while(!gUart0RxCplt);

            162. gUart0RxCplt = false;

            163. }

            這里我們需要修改的地方就是對源碼修改UART0的自幾回調(diào)函數(shù)以及

            view plaincopy to clipboardprint?

            1. switch(ptdev->channel)

            drv_uart.h

            view plaincopy to clipboardprint?

            1. /*

            2. * drv_uart.h

            3. *

            4. * Created on: 2023 年4 月13 日

            5. * Author: slhuan

            6. */

            7. #ifndef __DRV_UART_H

            8. #defi ne __DRV_UART_H

            9.

            10. #define UART_DEVICE_NAME_MAX_

            LENGTH (16)

            11. #def ine UART_TOTAL_CHANNELS

            (10)

            12. #define UART_RECEIVE_BUFFER_SIZE

            (1024)

            13.

            14. void UartDevicesCreate(void);

            15.

            16. #endif /* __DRV_UART_H */

            到此為止,我們的驅(qū)動就移植完畢了。

            測試代碼:

            image.png

            實驗效果,編譯下載程序到開發(fā)板后,開機打印出初始化的LOG

            1732196925546326.png

            3 總結(jié)

            我們實現(xiàn)了面向?qū)ο蟮腢ART 的移植,從RA6M5的工程中移植過來,只需要修改少量的代碼就可以實現(xiàn)面向?qū)ο蟮囊浦病?/p>

            (本文來源于《EEPW》



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉