6个员额/ 0个新员额
最后发表
randyzhou
离线
最后看到:1个月3天前
加入:2014-02-20 07:09
需求方io口电平无法保持问题

嗨,目前在官方585 SDK 6.150.2的需求方上面出现如下问题:
开启一个系统定时器,在定时器循环切换一个IO口的高低电平,IO口电平高1 s,低1 s,逻辑控制是这样,但是程序下载之后,结果不是这样的。高电平时间很短,低电平时间比较长。
感觉是电平状态无法正常保持。只有关闭系统睡眠,才能正常
但是测试SDK6.06和SDK6.0.10的prox_reporter的工程,IO口电平保持都是无问题。请问需求方如果更改才能实现,不然需求方只能做透传的从端,无法做主端控制外设了。

设备:
CYibin
离线
最后看到:10个月,4个星期前
工作人员
加入:2017-12-14 02:48
你好,

你好,

睡眠时会影响IO电平状态,请以下步骤,看能不能解决问题:

1,确保进睡眠前,程序没有对IO口做任何改变,影响电平的操作

2,每次唤醒时,系统会进行一些初始化动作,其中就包括对IO口状态的初始化,请检查peri_init外设初始化函数里,对IO的初始化的状态正不正确

3、建议对IO口做以下流程:

)每一个控制用的IO口都定义一个变量(或标志位),实时记录其电平状态

b)每次睡眠唤醒之后,在进行外设初始化的时候,将该变量赋值给IO初始化函数,确保睡眠时不会影响状态

randyzhou
离线
最后看到:1个月3天前
加入:2014-02-20 07:09
睡眠前是没有对IO口改变电平的任何处理

睡眠前是没有对IO口改变电平的任何处理:你说的方式已经试过的。是不是如下:
定义一个bool类型变量:如bool GPIO_CHANGE = false;
在peri_init函数中的set_pad_functions初始化IO口如:
gpio_configurein (GPIO_DBG2_PORT, GPIO_DBG2_PIN, OUTPUT, PID_GPIO, GPIO_CHANGE);
在定时器中高电平
GPIO_CHANGE = true:
gpio_configurein (GPIO_DBG2_PORT, GPIO_DBG2_PIN, OUTPUT, PID_GPIO, GPIO_CHANGE);
在定时器中低电平:
GPIO_CHANGE = false:
gpio_configurein (GPIO_DBG2_PORT, GPIO_DBG2_PIN, OUTPUT, PID_GPIO, GPIO_CHANGE);
这种方式试过了,没有用,仿真的时候这样的可以,但是下载程序到ram或者flash就无效了,不过这种方式在6.06和6.0.10都没问题,只在dsp中构成的6.150.2就会出问题。你可以验证下。

CYibin
离线
最后看到:10个月,4个星期前
工作人员
加入:2017-12-14 02:48
你好,

你好,

请尝试在system_init函数里添加一行语句,看是否能解决问题:

空白system_init ()

wdg_init (0);

此处添加:SetBits16 (DCDC_CTRL2_REG DCDC_AUTO_CAL 0);

randyzhou
离线
最后看到:1个月3天前
加入:2014-02-20 07:09
按照你的方式我加了,测试验证后,没什么改变,跟原来一样。

按照你的方式我加了,测试验证后,没什么改变,跟原来一样。

CYibin
离线
最后看到:10个月,4个星期前
工作人员
加入:2017-12-14 02:48
你好,

你好,

请问问题解决了吗?如果SDK6.0.10可以而需求方不行,配置该DCDC_CTRL2_REG应该是可以解决问题的