hiled

#include "hi_led.h"
#include <common.h>

static int led_init_flag = 0;
static int led_contrl = LED_CONTROL_PWM;

#ifdef CONFIG_HI_LED
static int PWM_DRV_Disable(unsigned char pwm_num)
{
    if (pwm_num >= PWM_NUM_MAX)
    {
        printf("The pwm number is big than the max value!\n");
        return -1;
    }
    switch (pwm_num)
    {
        case 0:
            PWM_WRITE_REG(PWM0_CTRL_REG, PWM_DISABLE);
            break;
        case 1:
            PWM_WRITE_REG(PWM1_CTRL_REG, PWM_DISABLE);
            break;
        case 2:
            PWM_WRITE_REG(PWM2_CTRL_REG, PWM_DISABLE);
            break;
        case 3:
            PWM_WRITE_REG(PWM3_CTRL_REG, PWM_DISABLE);
            break;
        case 4:
            PWM_WRITE_REG(PWM4_CTRL_REG, PWM_DISABLE);
            break;
        case 5:
            PWM_WRITE_REG(PWM5_CTRL_REG, PWM_DISABLE);
            break;
        case 6:
            PWM_WRITE_REG(PWM6_CTRL_REG, PWM_DISABLE);
            break;
        case 7:
            PWM_WRITE_REG(PWM7_CTRL_REG, PWM_DISABLE);
            break;
        default:
            break;
    }

    return 0;
}

static int PWM_DRV_Write(unsigned char pwm_num, unsigned int duty, unsigned int period, unsigned char enable)
{
    if (pwm_num >= PWM_NUM_MAX)
    {
        printf("The pwm number is big than the max value!\n");
        return -1;
    }
    if (enable)
    {

        switch (pwm_num)
        {
            case 4:
                PWM_WRITE_REG(PWM4_CTRL_REG, PWM_DISABLE);
                PWM_WRITE_REG(PWM4_CFG_REG0, period);
                PWM_WRITE_REG(PWM4_CFG_REG1, duty);
                PWM_WRITE_REG(PWM4_CFG_REG2, 10); //pwm output number
                PWM_WRITE_REG(PWM4_CTRL_REG, (1 << 2 | PWM_ENABLE)); // keep the pwm always output;
                //printk("The PWMI4 state %x\n",PWM_READ_REG(PWM4_STATE_REG));
                break;
            case 6:
                PWM_WRITE_REG(PWM5_CTRL_REG, PWM_DISABLE);
                PWM_WRITE_REG(PWM5_CFG_REG0, period);
                PWM_WRITE_REG(PWM5_CFG_REG1, duty);
                PWM_WRITE_REG(PWM5_CFG_REG2, 10); //pwm output number
                PWM_WRITE_REG(PWM5_CTRL_REG, (1 << 2 | PWM_ENABLE)); // keep the pwm always output;
                //printk("The PWMI6 state %x\n",PWM_READ_REG(PWM6_STATE_REG));
                break;
            case 7:
                PWM_WRITE_REG(PWM7_CTRL_REG, PWM_DISABLE);
                PWM_WRITE_REG(PWM7_CFG_REG0, period);
                PWM_WRITE_REG(PWM7_CFG_REG1, duty);
                PWM_WRITE_REG(PWM7_CFG_REG2, 10); //pwm output number
                PWM_WRITE_REG(PWM7_CTRL_REG, (1 << 2 | PWM_ENABLE)); // keep the pwm always output;
                //printk("The PWMI7 state %x\n",PWM_READ_REG(PWM7_STATE_REG));
                break;
            default:
                PWM_WRITE_REG(PWM0_CTRL_REG, PWM_DISABLE);
                PWM_WRITE_REG(PWM0_CFG_REG0, period);
                PWM_WRITE_REG(PWM0_CFG_REG1, duty);
                PWM_WRITE_REG(PWM0_CFG_REG2, 10); //pwm output number
                PWM_WRITE_REG(PWM0_CTRL_REG, (1 << 2 | PWM_ENABLE)); // keep the pwm always output;
                //printk("The PWMII0 state %x\n",PWM_READ_REG(PWM0_STATE_REG));
                break;
        }
    }
    else
    {
        PWM_DRV_Disable(pwm_num);
    }


    return 0;
}

static int hiled_init()
{
    if (LED_CONTROL_PWM == led_contrl) {
        /* reg mux config to pwm */
        PWM_WRITE_REG(PWM4_MUXCTL_REG, PWM_MUXCTL_PWM);
        PWM_WRITE_REG(PWM5_MUXCTL_REG, PWM_MUXCTL_PWM);
        PWM_WRITE_REG(PWM7_MUXCTL_REG, PWM_MUXCTL_PWM);
        PWM_WRITE_REG(PERI_CRG55, 0x2);    /* enable pwm clock */
    } else {
        /* reg mux config to gpio */
        PWM_WRITE_REG(PWM4_MUXCTL_REG, PWM_MUXCTL_GPIO);
        PWM_WRITE_REG(PWM5_MUXCTL_REG, PWM_MUXCTL_GPIO);
        PWM_WRITE_REG(PWM7_MUXCTL_REG, PWM_MUXCTL_GPIO);
        /* config gpio direction to out */
        HI_GPIO_DIR(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_DIR_OUT);
        HI_GPIO_DIR(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_DIR_OUT);
        HI_GPIO_DIR(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_DIR_OUT);
    }
    led_init_flag = 1;
    return 0;
}

static int pwd_led_on(HI_LED_COLOR led)
{
    switch (led)
    {
        case HI_LED_RED:
            PWM_DRV_Write(4,255,255,1);
            PWM_DRV_Write(5,255,255,0);
            PWM_DRV_Write(7,255,255,0);
            break;
        case HI_LED_GREEN:
            PWM_DRV_Write(5,255,255,1);
            PWM_DRV_Write(4,255,255,0);
            PWM_DRV_Write(7,255,255,0);        
            break;
        case HI_LED_BLUE:
            PWM_DRV_Write(7,255,255,1);
            PWM_DRV_Write(5,255,255,0);
            PWM_DRV_Write(4,255,255,0);
            break;
        case HI_LED_PURPLE:
            PWM_DRV_Write(4,255,255,1);
            PWM_DRV_Write(7,255,255,1);
            PWM_DRV_Write(5,255,255,0);
            break;
        case HI_LED_YELLOW:
            PWM_DRV_Write(4,255,255,1);
            PWM_DRV_Write(5,255,255,1);
            PWM_DRV_Write(7,255,255,0);
            break;
        case HI_LED_WHITE:
            PWM_DRV_Write(4,255,255,1);
            PWM_DRV_Write(5,255,255,1);
            PWM_DRV_Write(7,255,255,1);
            break;
        case HI_LED_LIGHT_BLUE:
            PWM_DRV_Write(5,255,255,1);
            PWM_DRV_Write(7,255,255,1);
            PWM_DRV_Write(4,255,255,0);
            break;
        default:
            break;
    }
    return 0;
}

static int gpio_led_on(HI_LED_COLOR led)
{
    //debug printf
    //printf("LED: %d\n", led);
    switch (led)
    {
        case HI_LED_RED:
            HI_GPIO_VAL(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_VAL_LOW);
            HI_GPIO_VAL(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_VAL_LOW);
            break;
        case HI_LED_GREEN:
            HI_GPIO_VAL(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_VAL_LOW);
            HI_GPIO_VAL(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_VAL_LOW);
            break;
        case HI_LED_BLUE:
            HI_GPIO_VAL(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_VAL_LOW);
            HI_GPIO_VAL(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_VAL_LOW);
            HI_GPIO_VAL(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            break;
        case HI_LED_PURPLE:
            HI_GPIO_VAL(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_VAL_LOW);
            HI_GPIO_VAL(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            break;
        case HI_LED_YELLOW:
            HI_GPIO_VAL(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_VAL_LOW);
            break;
        case HI_LED_WHITE:
            HI_GPIO_VAL(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            break;
        case HI_LED_LIGHT_BLUE:
            HI_GPIO_VAL(HI_RED_GPIO_GROUP, HI_RED_GPIO_INDEX, HI_GPIO_VAL_LOW);
            HI_GPIO_VAL(HI_GREEN_GPIO_GROUP, HI_GREEN_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            HI_GPIO_VAL(HI_BLUE_GPIO_GROUP, HI_BLUE_GPIO_INDEX, HI_GPIO_VAL_HIGH);
            break;
        default:
            break;
    }
    
    return 0;
}

int rgbled_on(HI_LED_COLOR led)
{
    if (led_init_flag == 0) {
        hiled_init();
    }

    if (led_contrl == LED_CONTROL_GPIO)
        gpio_led_on(led);
    else
        pwd_led_on(led);
    
    return 0 ;
}

int rgbled_off(void)
{
    if (led_init_flag == 0) {
        hiled_init();
    }

    PWM_DRV_Disable(4);
    PWM_DRV_Disable(5);
    PWM_DRV_Disable(7);

    return 0 ;
}

#endif /* CONFIG_HI_LED */

基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现
内容概要:本文深入介绍了HarmonyOS文件系统及其在万物互联时代的重要性。HarmonyOS自2019年发布以来,逐步覆盖多种智能设备,构建了庞大的鸿蒙生态。文件系统作为其中的“数字管家”,不仅管理存储资源,还实现多设备间的数据协同。文章详细介绍了常见的文件系统类型,如FAT、NTFS、UFS、EXT3和ReiserFS,各自特点和适用场景。特别强调了HarmonyOS的分布式文件系统(hmdfs),它通过分布式软总线技术,打破了设备界限,实现了跨设备文件的无缝访问。此外,文章对比了HarmonyOS与Android、iOS文件系统的差异,突出了其在架构、跨设备能力和安全性方面的优势。最后,从开发者视角讲解了开发工具、关键API及注意事项,并展望了未来的技术发展趋势和对鸿蒙生态的影响。 适合人群:对操作系统底层技术感兴趣的开发者和技术爱好者,尤其是关注物联网和多设备协同的用户。 使用场景及目标:①理解HarmonyOS文件系统的工作原理及其在多设备协同中的作用;②掌握不同文件系统的特性和应用场景;③学习如何利用HarmonyOS文件系统进行应用开发,提升跨设备协同和数据安全。 阅读建议:本文内容详实,涵盖了从基础概念到高级开发技巧的多个层次,建议读者结合自身需求,重点关注感兴趣的部分,并通过实践加深理解。特别是开发者可参考提供的API示例和开发技巧,尝试构建基于HarmonyOS的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值