⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
2个职位/ 0个新职位
最后发表
build77
离线
最后看到:1个月2个星期前
加入:2015-02-17 02:32
HW PWM与BLE

我使用Da14699开发工具包,sdk版本为10.0.10.118

我想使用hw pwm (HW_TIMER或HW_TIMER2)与PIO1.1或1.6和BLE。

PWM频率设置为1MHz或2MHz。(必须在延长睡眠时间时采取行动)

经过修改PXP_Reporter演示源代码,PWM工作正常,但不能连接BLE。

静态孔隙periph_init(空白)

#如果定义CONFIG_RETARGET
# endif

dg_configUSE_SYS_CHARGER == 1
/* USB数据引脚配置*/
hw_gpio_set_pin_function(HW_GPIO_PORT_0, HW_GPIO_PIN_14, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_USB);
hw_gpio_set_pin_function(HW_GPIO_PORT_0, HW_GPIO_PIN_15, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_USB);
#endif /* dg_configUSE_SYS_CHARGER */
/ / HW_GPIO_SET_PIN_FUNCTION (LED1);

#如果定义LSU_CLK_Test

hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_1, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_TIM_PWM);
hw_gpio_pad_latch_enable (HW_GPIO_PORT_1 HW_GPIO_PIN_1);

hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_6, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_TIM2_PWM);
hw_gpio_pad_latch_enable (HW_GPIO_PORT_1 HW_GPIO_PIN_6);
# endif


空白pxp_reporter_task (void * params)

int8_t tx_power_level;
int8_t wdog_id;
#如果dg_configSUOTA_SUPPORT
ble_service_t * suota;
# endif
uint16_t name_len;
char name_buf[MAX_NAME_LEN + 1];/* 1字节为'\0'字符*/

/* Scan Response object to be filling with AD type */
gap_adv_ad_struct_t * scan_rsp;

/*将pxp_reporter_task注册为watchdog监控的对象*/
wdog_id = sys_watchdog_register(假);
............

.............

#如果定义LSU_CLK_Test

Timer_config CFG = {
.clk_src = HW_TIMER_CLK_SRC_EXT,
.prescaler = 0,
.mode = HW_TIMER_MODE_TIMER,
同学们= {
.direction = HW_TIMER_DIR_UP,
.reload_val = 0,
.free_run = true,
},

.pwm = {
.port = HW_GPIO_PORT_1,
.pin = HW_GPIO_PIN_1,
.pwm_active_in_sleep = true,
.duty_cycle = 8,
傅立叶= 15,
},
};

Timer_config cfg2 = {
.clk_src = HW_TIMER_CLK_SRC_EXT,
.prescaler = 0,
.mode = HW_TIMER_MODE_TIMER,
同学们= {
.direction = HW_TIMER_DIR_UP,
.reload_val = 0,
.free_run = true,
},

.pwm = {
.port = HW_GPIO_PORT_1,
.pin = HW_GPIO_PIN_6,
.pwm_active_in_sleep = true,
.duty_cycle = 8,
傅立叶= 15,
},
};

hw_timer_init (HW_TIMER cfg);
hw_timer_init (HW_TIMER2 &cfg2);
hw_timer_enable (HW_TIMER);
hw_timer_enable (HW_TIMER2);

# endif

current_task = OS_GET_CURRENT_TASK ();

printf (" \ r \ n pxp_reporter_task。\ r \ n”);

(,) {
OS_BASE_TYPE ret __UNUSED;
uint32_t notif;

..........

..........

BLE与HW PWM有什么限制吗?

谢谢你!

设备:
PM_Dialog
离线
最后看到:2天7小时前
工作人员
加入:2018-02-08 11:03
嗨bojanpotocnik,

嗨bojanpotocnik,

HW_TIMER2是由FreeRTOS使用的,所以你不能在你的应用程序中使用。

您使用的是用于OS-TICK的TIMER2。通过改变这个,你会搞砸所有的FreeRTOS。这在我们的文档中也有描述。你可以使用的TIMER2 PWM为例,但不重新配置它。

如果您想使用HW定时器,那么您可以使用timer (aka TIMER1)或TIMER3或TIMER4。只有TIMER1和TIMER2在睡眠中可用。请参阅数据表了解更多信息。

你能不能也在调试模式下运行?你得到什么断言了吗?如果TIMER2被删除,请检查代码是否正常运行?

谢谢,PM_Dialog