博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【TINY4412】U-BOOT移植笔记:(12)BEEP驱动
阅读量:4085 次
发布时间:2019-05-25

本文共 7674 字,大约阅读时间需要 25 分钟。

【TINY4412】U-BOOT移植笔记:(12)BEEP驱动

宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64

目标板[底板]: Tiny4412SDK - 1506
目标板[核心板]: Tiny4412 - 1412
U-BOOT版本: 2017.03
交叉编译器: gcc-arm-none-eabi-5_4-2016q3
日期: 2017-05-25 11:34:46
作者: SY

蜂鸣器驱动

git diff da4612 1e7bf5    diff --git a/arch/arm/dts/exynos4412-tiny4412.dts b/arch/arm/dts/exynos4412-tiny4412.dts    index 3b80246..75e9292 100644    --- a/arch/arm/dts/exynos4412-tiny4412.dts    +++ b/arch/arm/dts/exynos4412-tiny4412.dts    @@ -9,6 +9,8 @@     /dts-v1/;     #include "exynos4412.dtsi"    +#include 
+ / { model = "Tiny4412 based on Exynos4412"; @@ -86,5 +101,35 @@ div = <0x3>; index = <4>; }; + + emmc-reset { + compatible = "samsung,emmc-reset"; + reset-gpio = <&gpx1 1 GPIO_ACTIVE_LOW>; + }; + + pwm@139D0000 { + compatible = "samsung,exynos4210-pwm"; + reg = <0x139D0000 0x100>; + samsung,pwm-outputs = <0>,<1>; + #pwm-cells = <3>; + enable-gpios = <&gpd0 0 GPIO_ACTIVE_HIGH>; + }; }; diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c index 3d31f9d..373e912 100644 --- a/arch/arm/mach-exynos/clock.c +++ b/arch/arm/mach-exynos/clock.c @@ -683,7 +683,6 @@ static unsigned long exynos4x12_get_pwm_clk(void) sclk = get_pll_clk(MPLL); ratio = 8; - pclk = sclk / (ratio + 1); return pclk; diff --git a/cmd/Kconfig b/cmd/Kconfig index ef53156..9843aa6 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -497,6 +497,11 @@ config CMD_GPIO help GPIO support. +config CMD_BEEP + bool "beep" + help + BEEP support. + endmenu diff --git a/cmd/Makefile b/cmd/Makefile index f13bb8c..96befba 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -28,6 +28,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += bootstage.o obj-$(CONFIG_CMD_BOOTZ) += bootz.o obj-$(CONFIG_CMD_BOOTI) += booti.o +obj-$(CONFIG_CMD_BEEP) += beep.o obj-$(CONFIG_CMD_CACHE) += cache.o obj-$(CONFIG_CMD_CBFS) += cbfs.o obj-$(CONFIG_CMD_CLK) += clk.o diff --git a/cmd/beep.c b/cmd/beep.c new file mode 100644 index 0000000..2e57fe9 --- /dev/null +++ b/cmd/beep.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2017 SY <1530454315@qq.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include
+#include
+#include
+#include
+#include
+#include
+ +DECLARE_GLOBAL_DATA_PTR; + +static int do_beep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + uint channel; + uint period_ns; + uint duty_ns; + struct udevice *dev; + int ret; + bool enable = false; + + if (argc < 4) { + return CMD_RET_USAGE; + } + channel = simple_strtoul(argv[1], NULL, 10); + period_ns = simple_strtoul(argv[2], NULL, 10); + duty_ns = simple_strtoul(argv[3], NULL, 10); + + ret = uclass_get_device(UCLASS_PWM, 0, &dev); + if (ret) { + return cmd_process_error(cmdtp, ret); + } + + ret = pwm_set_config(dev, channel, period_ns, duty_ns); + if (ret) { + return cmd_process_error(cmdtp, ret); + } + + if (period_ns) { + enable = true; + } + ret = pwm_set_enable(dev, channel, enable); + if (ret) { + return cmd_process_error(cmdtp, ret); + } + +#if 0 +{ + struct gpio_desc gpio; + ret = gpio_request_by_name(dev, "enable-gpios", 0, &gpio, + GPIOD_IS_OUT); + if (ret) { + printf("%s: Warning: cannot get enable GPIO: ret=%d\n", + __func__, ret); + if (ret != -ENOENT) + return ret; + } + + mdelay(10); + dm_gpio_set_value(&gpio, 1); +} +#endif + + return cmd_process_error(cmdtp, ret); +} + +U_BOOT_CMD( + beep, 4, 1, do_beep, + "Control tiny4412 boards beep device!", + "beep [channel] [period_ns] [duty_ns]" +); diff --git a/tiny4412_config b/tiny4412_config index f1528c0..347effb 100644 --- a/tiny4412_config +++ b/tiny4412_config @@ -392,11 +392,12 @@ CONFIG_CMD_PART=y # CONFIG_CMD_SF is not set # CONFIG_CMD_SPI is not set # CONFIG_CMD_I2C is not set -# CONFIG_CMD_USB is not set +CONFIG_CMD_USB=y CONFIG_CMD_DFU=y -CONFIG_CMD_USB_MASS_STORAGE=y +# CONFIG_CMD_USB_MASS_STORAGE is not set # CONFIG_CMD_FPGA is not set # CONFIG_CMD_GPIO is not set +CONFIG_CMD_BEEP=y # # Shell scripting commands @@ -515,7 +516,9 @@ CONFIG_OF_TRANSLATE=y # # Clock # -# CONFIG_CLK is not set +CONFIG_CLK=y +# CONFIG_SPL_CLK is not set +# CONFIG_CLK_AT91 is not set # CONFIG_CPU is not set # @@ -535,7 +538,7 @@ CONFIG_OF_TRANSLATE=y # CONFIG_USB_FUNCTION_DFU=y # CONFIG_DFU_TFTP is not set -CONFIG_DFU_MMC=y +# CONFIG_DFU_MMC is not set # CONFIG_DFU_NAND is not set # CONFIG_DFU_RAM is not set # CONFIG_DFU_SF is not set @@ -725,7 +728,10 @@ CONFIG_DM_SPI_FLASH=y # CONFIG_DM_PMIC is not set # CONFIG_POWER_MC34VR500 is not set # CONFIG_DM_REGULATOR is not set -# CONFIG_DM_PWM is not set +CONFIG_DM_PWM=y +CONFIG_PWM_EXYNOS=y +# CONFIG_PWM_ROCKCHIP is not set +# CONFIG_PWM_TEGRA is not set # CONFIG_RAM is not set # @@ -812,9 +818,12 @@ CONFIG_DM_USB=y # # USB Host Controller Drivers # +CONFIG_USB_HOST=y # CONFIG_USB_XHCI_HCD is not set -# CONFIG_USB_EHCI_HCD is not set -# CONFIG_USB_EHCI is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI=y +# CONFIG_USB_EHCI_MSM is not set +CONFIG_USB_EHCI_GENERIC=y # CONFIG_USB_OHCI_HCD is not set # CONFIG_USB_UHCI_HCD is not set # CONFIG_USB_DWC3 is not set @@ -833,7 +842,7 @@ CONFIG_DM_USB=y # # USB peripherals # -# CONFIG_USB_STORAGE is not set +CONFIG_USB_STORAGE=y # CONFIG_USB_KEYBOARD is not set CONFIG_USB_GADGET=y # CONFIG_USB_GADGET_ATMEL_USBA is not set @@ -844,9 +853,9 @@ CONFIG_USB_GADGET_DWC2_OTG=y CONFIG_USB_GADGET_VBUS_DRAW=2 CONFIG_USB_GADGET_DUALSPEED=y CONFIG_USB_GADGET_DOWNLOAD=y -CONFIG_G_DNL_MANUFACTURER="Samsung" -CONFIG_G_DNL_VENDOR_NUM=0x04e8 -CONFIG_G_DNL_PRODUCT_NUM=0x6601 +CONFIG_G_DNL_MANUFACTURER="samsung" +CONFIG_G_DNL_VENDOR_NUM=0x04E8 +CONFIG_G_DNL_PRODUCT_NUM=0x685D CONFIG_USBNET_DEVADDR="de:ad:be:ef:00:01" # (END)
  • 使用设备树形式,配置定时器的PWM驱动蜂鸣器,目前存在问题是蜂鸣器可以工作,但是
    不是PWM波,相当于一个开关。后续待解决。
  • 在命令行中添加beep命令

已解决蜂鸣器问题:

diff --git a/cmd/beep.c b/cmd/beep.c    index 2e57fe9..472486e 100644    --- a/cmd/beep.c    +++ b/cmd/beep.c    @@ -34,35 +34,20 @@ static int do_beep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])                    return cmd_process_error(cmdtp, ret);            }    +       pwm_set_enable(dev, channel, false);    +           +       gpio_set_pull(EXYNOS4X12_GPIO_D00, S5P_GPIO_PULL_NONE);    +       gpio_cfg_pin(EXYNOS4X12_GPIO_D00, S5P_GPIO_FUNC(0x2));    +            ret = pwm_set_config(dev, channel, period_ns, duty_ns);            if (ret) {                    return cmd_process_error(cmdtp, ret);            }    -    +                   if (period_ns) {                    enable = true;              }            ret = pwm_set_enable(dev, channel, enable);    -       if (ret) {    -               return cmd_process_error(cmdtp, ret);    -       }    -    -#if 0    -{    -       struct gpio_desc gpio;    -       ret = gpio_request_by_name(dev, "enable-gpios", 0, &gpio,    -                                  GPIOD_IS_OUT);    -       if (ret) {    -               printf("%s: Warning: cannot get enable GPIO: ret=%d\n",    -                     __func__, ret);    -               if (ret != -ENOENT)    -                       return ret;    -       }    -           -       mdelay(10);    -       dm_gpio_set_value(&gpio, 1);    -}    -#endif            return cmd_process_error(cmdtp, ret);     }

转载地址:http://zjzii.baihongyu.com/

你可能感兴趣的文章
我觉得在室内弄无人机开发装个防撞机架还是很有必要的,TBUS就做得很好。
查看>>
serial也是见到很多次了,似乎它就是一种串行通信协议
查看>>
TBUS的一些信息
查看>>
PX4+激光雷达在gazebo中仿真实现(古月居)
查看>>
专业和业余的区别就在于你在基础在基本功打磨练习花的时间
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Ardupilot飞控Mavlink代码学习
查看>>
这些网站有一些嵌入式面试题合集
查看>>
我觉得刷题是有必要的,不然小心实际被问的时候懵逼,我觉得你需要刷个50份面试题。跟考研数学疯狂刷卷子一样!
查看>>
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。
查看>>
现在来看,做个普罗米修斯的docker镜像对我而言并不难,对PX4仿真环境配置也熟悉了。
查看>>
删除docker容器和镜像的命令
查看>>
VINS-Fusion Intel® RealSense™ Depth Camera D435i
查看>>
使用Realsense D435i运行VINS-Fusion并建图
查看>>
gazebo似乎就是在装ROS的时候一起装了,装ROS的时候选择的是ros-melodic-desktop-full的话。
查看>>
React + TypeScript 实现泛型组件
查看>>
TypeScript 完全手册
查看>>
React Native之原理浅析
查看>>
Git操作清单
查看>>