ZLight 1.0.2哪个函数使用高低电平控制开关
我们现在要做普通开关,每个芯片要控制多个普通灯,P0_3、P0_4、P0_5、P0_6各控制一个普通灯,手机可以对每个普通灯单独控制。
我们现在发现的问题是每个端口都是脉宽调制控制(233Hz),现在想改成高低电平控制,而不是用脉宽调制,请问程序中调用哪个函数?
直接把 Timer1MaxCount = halTimer1SetPeriod (4292); // 233Hz 这一行中的4292改为0是否可以?
在定时器配置的地方,原先我们是Timer1的4个通道输出PWM波形,那么只要把那个通道的PWM功能关了,当普通的IO来用就可以了
是不是把以下这几行封掉即可?
halTimerSetPrescale (HW_TIMER_1, halTimerRecord[HW_TIMER_1].prescale);
halTimerSetChannelMode (HW_TIMER_1, halTimerRecord[HW_TIMER_1].channelMode);
halTimer1SetChannelCCTL(HAL_T1_CH0, 0, 1, HAL_TIMER1_CH0_CMP_MODE_SET_ON_COMP, 1, HAL_TIMER1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL(HAL_T1_CH1, 0, 1, HAL_TIMER1_CHn_CMP_MODE_CLR_ON_COMP_SET_ON_0, 1, HAL_TIMER1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL(HAL_T1_CH2, 0, 1, HAL_TIMER1_CHn_CMP_MODE_CLR_ON_COMP_SET_ON_0, 1, HAL_TIMER1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL(HAL_T1_CH3, 0, 1, HAL_TIMER1_CHn_CMP_MODE_CLR_ON_COMP_SET_ON_0, 1, HAL_TIMER1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL(HAL_T1_CH4, 0, 1, HAL_TIMER1_CHn_CMP_MODE_CLR_ON_COMP_SET_ON_0, 1, HAL_TIMER1_CH_CAP_MODE_NO);
halTimer1SetChannelDuty (HAL_T1_CH1, 0);
halTimer1SetChannelDuty (HAL_T1_CH2, 0);
halTimer1SetChannelDuty (HAL_T1_CH3, 0);
halTimer1SetChannelDuty (HAL_T1_CH4, 0);
是的!
将上述PWM涉及代码封掉之后,无法点亮LED灯,是不是要把hw_light_ctrl.c中的点灯函数ENABLE_LAMP改掉?应该怎么改?
是不是直接对寄存器进行编程?
多谢!
如果你是直接高低电平操作LED的话,参考hal_led.c操作led的方法就可以了
我设置了HAL_LED=TRUE, BLINK_LEDS=FLASE,能够执行到函数HALLedOnOff (led, sts-mode),但还是无法点亮LED灯。
问题是不是出在了以下:
#define HAL_LED_1 0x01
#define HAL_LED_2 0x02
#define HAL_LED_3 0x04
#define HAL_LED_4 0x08
这4个LED灯分别对应P0_0, P0_1, P0_2, P0_3, 而我们的OSram灯用的是P0_3, P0_4, P0_5, P0_6。但即使如此,至少P0_3对应的LED灯即红色灯珠应该被点亮。
调用HAL_TURN_ON_LED4(),HalLedSet( HAL_LED_4, HAL_LED_MODE_ON )均无济于事。
我用CC Debugger跟踪调试,问题好像出在HAL_TURN_ON_LED4(),只要执行到这行,程序就会中断或自动跳到下一行,找遍了整个工程也没有这个函数的定义。
所以我至今还无头绪,望请TI专家不吝赐教,谢谢!
经过仔细查找、跟踪,问题已经解决,多谢TI专家VV的指导。
解决的方法是重写HAL_TURN_ON_LED4()函数,原来这个函数是置空,没有真正对IO口进行控制。