电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1535|回复: 0
收起左侧

鸿蒙OS 注册UART驱动接口

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-9-16 17:56:27 | 显示全部楼层 |阅读模式
鸿蒙OS 注册UART驱动接口, 注册UART驱动接口。 HDF框架提供了UART驱动接口的模板方法UartHostMethod,实现UART驱动接口的代码如下: 1.  static int32_tSampleInit(struct UartHost *host) 2.  { 3.      HDF_LOGI(“%s: Enter“, __func__); 4.      IF (host == NULL) { 5.          HDF_LOGE(“%s: invalidparameter“, __func__); 6.          return HDF_ERR_INVALID_PARAM; 7.      } 8.      return HDF_SUCCESS; 9.  } 10.      11.    static int32_t SampLEDeinit(struct UartHost*host) 12.    { 13.        HDF_LOGI(“%s: Enter“, __func__); 14.        if (host == NULL) { 15.            HDF_LOGE(“%s: invalidparameter“, __func__); 16.            return HDF_ERR_INVALID_PARAM; 17.        } 18.        return HDF_SUCCESS; 19.    } 20.      21.    // 向UART中写入数据 22.    static int32_t SampleWrite(struct UartHost*host, uint8_t *data, uint32_t size) 23.    { 24.        HDF_LOGI(“%s: Enter“, __func__); 25.        uint32_t idx; 26.        struct UartRegisterMap *regMap = NULL; 27.        struct UartDevice *device = NULL; 28.      29.        if (host == NULL || data == NULL || size ==0) { 30.            HDF_LOGE(“%s: invalidparameter“, __func__); 31.            return HDF_ERR_INVALID_PARAM; 32.        } 33.        device = (struct UartDevice *)host->priv; 34.        if (device == NULL) { 35.            HDF_LOGE(“%s: device isNULL“, __func__); 36.            return HDF_ERR_INVALID_PARAM; 37.        } 38.        regMap = (struct UartRegisterMap *)device->resource.physBase; 39.        for (idx = 0; idx < size; idx++) { 40.            while (UartPl011IsBusy(regMap)); 41.            UartPl011Write(regMap, data[idx]); 42.        } 43.        return HDF_SUCCESS; 44.    } 45.      46.    // 设置UART的波特率 47.    static int32_t SampleSetBaud(structUartHost *host, uint32_t baudRate) 48.    { 49.        HDF_LOGI(“%s: Enter“, __func__); 50.        struct UartDevice *device = NULL; 51.        struct UartRegisterMap *regMap = NULL; 52.        UartPl011Error err; 53.      54.        if (host == NULL) { 55.            HDF_LOGE(“%s: invalidparameter“, __func__); 56.            return HDF_ERR_INVALID_PARAM; 57.        } 58.        device = (struct UartDevice *)host->priv; 59.        if (device == NULL) { 60.            HDF_LOGE(“%s: device isNULL“, __func__); 61.            return HDF_ERR_INVALID_PARAM; 62.        } 63.        regMap = (struct UartRegisterMap *)device->resource.physBase; 64.        if (device->state !=UART_DEVICE_INITIALIZED) { 65.            return UART_PL011_ERR_NOT_INIT; 66.        } 67.        if (baudRate == 0) { 68.            return UART_PL011_ERR_INVALID_BAUD; 69.        } 70.        err = UartPl011SetBaudrate(regMap,device->uartClk, baudRate); 71.        if (err == UART_PL011_ERR_NONE) { 72.            device->baudrate = baudRate; 73.        } 74.        return err; 75.    } 76.      77.    // 获取UART的波特率 78.    static int32_t SampleGetBaud(structUartHost *host, uint32_t *baudRate) 79.    { 80.        HDF_LOGI(“%s: Enter“, __func__); 81.        struct UartDevice *device = NULL; 82.      83.        if (host == NULL) { 84.            HDF_LOGE(“%s: invalidparameter“, __func__); 85.            return HDF_ERR_INVALID_PARAM; 86.        } 87.        device = (struct UartDevice *)host->priv; 88.        if (device == NULL) { 89.            HDF_LOGE(“%s: device isNULL“, __func__); 90.            return HDF_ERR_INVALID_PARAM; 91.        } 92.        *baudRate = device->baudrate; 93.        return HDF_SUCCESS; 94.    } 95.      96.    // 在HdfUartSampleInit方法中绑定 97.    struct UartHostMethodg_uartSampleHostMethod = { 98.        .Init = SampleInit, 99.        .Deinit = SampleDeinit, 100.      .Read = NULL, 101.      .Write = SampleWrite, 102.      .SetBaud = SampleSetBaud, 103.      .GetBaud = SampleGetBaud, 104.      .SetAttribute = NULL, 105.      .GetAttribute = NULL, 106.      .SetTransMode = NULL, 107.  }; 在vendor/huawei/hdf/hdf_vendor.mk编译脚本中增加示例UART驱动模块,代码如下: 1.  LITEOS_BASELIB+= -lhdf_uart_sample 2.  LIB_SUBDIRS    +=$(VENDOR_HDF_DRIVERS_ROOT)/sample/platform/uart


作者:疯壳 注:文档和视频中所有的图片及代码截图皆为示意图,具体以HarmonyOS官网发布内容为准。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表