2416 呼吸灯 效果

#include <stdint.h>
#include <stdbool.h>

#include <raw_api.h>
#include <lib_string.h>
#include <2416_reg.h>
#include <pwm.h>
#include <irq.h>
#include <timer.h>
#include <pwm.h>
#include <rsh.h>

#include "command.h"

static struct{
	uint16_t hwLevelMax;
	uint16_t hwLevelNow;
	bool	bIncreasing;
}m_tBreathLed;

#define SET_RELOAD(CNT)	do{	TCNTB1_REG = (CNT);}while(0)

#define SET_LEVEL_MAX(CNT)	do{	m_tBreathLed.hwLevelMax = (CNT);}while(0)

#define SET_TIMER_COMPARE(CNT)	do{	TCMPB1_REG = (CNT);}while(0)

void irq_breathled(void)
{
	//clear pending
	//copy from pwm.c
	//line 57
	SRCPND_REG |= ( 0x01 << 11);
	INTPND_REG |= ( 0x01 << 11);

	if(m_tBreathLed.bIncreasing){
		if(m_tBreathLed.hwLevelNow >= m_tBreathLed.hwLevelMax){
			m_tBreathLed.bIncreasing = false;
		//	Uart_Printf("led_loop\n");
		}else{
			m_tBreathLed.hwLevelNow++;
		}
	}else{
		if(m_tBreathLed.hwLevelNow <= 0){
			m_tBreathLed.bIncreasing = true;
		}else{
			m_tBreathLed.hwLevelNow--;
		}
	}
	SET_TIMER_COMPARE(m_tBreathLed.hwLevelNow);

}

void set_config(uint16_t hwBreathLedSpeedLevel)
{
	TCON_REG |= (0x1 << 9);
	SET_RELOAD(hwBreathLedSpeedLevel);
	SET_LEVEL_MAX(hwBreathLedSpeedLevel);
	SET_TIMER_COMPARE(hwBreathLedSpeedLevel/2);
	TCON_REG &= ~(1<<9);

	TCON_REG	|= (0x1<<8);
}

void breathled_init(void)
{
	//set the GPB1 10 to enable the tout1
	GPBCON_REG &= ~(0x3<<2);
	GPBCON_REG |= (0x2<<2);

	TCON_REG &= ~(0xF << 8);	//clear the register of TIM1
														//it will be config when finish
														//all config
	//TCON_REG &=
	TCFG0_REG &= ~(0xFF);
	TCFG1_REG &= ~(0xF0);

	//timer_1_ISRInit from raw-os
	//file:	Pwm.c
	//Line: 124
	INTMOD_REG = 0x00000000;
	PRIORITY_MODE_REG = 0x00000000;
	INTMSK_REG &= ~(0x1 << 11);		//reset the bit 11 to restart the 

	register_irq(11,irq_breathled);
	//ISR_REGISTER[11] = irq_breathled;

	TCFG0_REG |= 15;				//Prescaler = 15
	TCFG1_REG |= 0x10;				//divide value = 1/4

	TCON_REG	&= ~(0xF << 8);
	TCON_REG	|= (0xCD<<8);
}

//¹Ø±ÕPWM1Êä³öͨµÀ
void breathled_close(void)
{
		TCON_REG &= ~(0X1 << 8);
		INTMSK_REG |= (0X1 << 11);
}

int do_breathled(struct cmd_tbl_s *cmdtp, int flag, int argc, char * const argv[])
{
    char* pchLed;
    uint16_t hwSpeedLevel = 0;
//	int i;
//	for(i=0;i<argc;i++)
//	{
//		Uart_Printf("%s\r\n",argv[i]);
//	}
    pchLed = argv[1];
    while((*pchLed <= ‘9‘)
        &&(*pchLed >= ‘0‘)){
        hwSpeedLevel *= 10;
        hwSpeedLevel += *pchLed-‘0‘;
        pchLed++;
    }
    Uart_Printf("Level:%d\r\n",hwSpeedLevel);
    set_config(hwSpeedLevel);
    breathled_init();
	return 0;
}

因为移植了cli 所以有类似teminal的效果

整体程序再说了

视频地址:

http://v.youku.com/v_show/id_XNzQxMTg1Nzgw.html

2416 呼吸灯 效果

时间: 2024-10-10 07:25:04

2416 呼吸灯 效果的相关文章

CSS 实现按钮及线呼吸灯效果

1. [代码]style    view sourceprint?01<style>02            body{03                font-family:'Segoe UI Light','Segoe UI',Arial,'微软雅黑',sans-serif;04                font-size: 20px;05                color:#333333;06 07            }08            .breath

css之呼吸灯效果

1.首先脑补一个知识点,我们在代码中经常看到-webkit或-moz,那这些有什么作用了,看下代码就知道了: -webkit-border-radius: 2px;       /*Webkit:谷歌支持:圆角*/ -moz-border-radius: 2px;          /*Mozilla:火狐支持:圆角*/ -ms-border-radius: 2px;           /*Microsoft:IE9支持:圆角*/ -o-border-radius: 2px;         

CSS动画总结与呼吸灯效果

首先,先介绍一下主要用到的css属性:animation,text-shadow. text-shadow就不再介绍了,上一篇已经详细介绍了用法.这里先介绍一下animation属性. 1.animation animation是css3的属性,主要有以下几项: 属性 描述   @keyframes 规定动画.   animation 所有动画属性的简写属性,除了 animation-play-state 属性.   animation-name 规定 @keyframes 动画的名称.   a

好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效button

我们先来看看Quartz MS字体动态显示系统时间的效果,难度相较于上一篇也要简单很多. 首先是定义一个TextBlock例如以下. <Grid> <TextBlock Name="tBlockTime" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="68" Foreground="Green"/>

(原创)用Verilog实现一个参数化的呼吸灯(Verilog,CPLD/FPGA)

1.Abstract     观察到一个有趣的现象,每当把Apple笔记本合上的时候,那个白色的呼吸灯就会反复地由暗渐明,然后又由明渐暗,乍一看就像Apple笔记本在打盹休息一样,十分可爱!于是突发奇想,要不用Verilog也写一个吧,资源也不需要太多,一个LED灯就可以了.为了使用方便,可以把它做成参数化的,可以根据时常进行参数调节:深睡.浅睡跟清醒的时候呼吸频率似乎是不一样的-     下面就来分析和实践一下. 2.Content   2.1 理论分析     根据上述描述的现象,仔细分析一

STM32呼吸灯

使用STM32开发板和mbed平台实现的一个呼吸灯.材料,LED灯,电阻,STM32开发板. 先上一张效果图. 背景: 我们之前设置GPIO口使用了DigitalOut,数字信号输出.只能是GPIO口为0或1两个值.在LED上体现的即是灭和亮.然而现实世界大量的信号都是模拟信号,如温度.声音.加速度等.百度上:“模拟信号是指信息参数在给定范围内表现为连续的信号. 或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号.” 理论知识(可以跳过): 模拟信号即可以简单理解为,

基于PWM的呼吸灯设计(Verilog版)

module Breath_Led(clk,rst,led); input clk,rst; output reg led; reg[19:0] count; reg[19:0] duty_cycle; always @(posedge clk) begin if(!rst) begin led<=1'b0; count<=1'b0; end else begin if(count<20'd999_999) begin count<=count+1'b1; if(count<

NE555-DIY呼吸灯的电路图

NE555设计的呼吸灯电路图 再提供一个LM358设计的呼吸灯电路图.

nrf51822之PWM呼吸灯程序

额外链接: 1.JLink-SWD烧写之引脚定义:http://www.openedv.com/posts/list/1747.htm 2.百度文库c语言之PWMhttp://wenku.baidu.com/link?url=2QeCZppvhH81D4OYAyi9eEDP8Sk0p0OQhPKPfo0OXWiWZ5PxBvSMXtP8ejxZw-sxrSOGwrFj3K3q2ewwkM_vAQlk-QMyWnD1eVuLNaANxZm 3.菜农M0助学板PWM呼吸灯小练(寄存器操作方式):ht