6 posts / 0 new
Last post
randyzhou
Offline
Last seen: 11 hours 23 min ago
Joined: 2014-02-20 07:09
dsps io口电平无法保持问题

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

Device: 
CYibin
Offline
Last seen: 15 hours 57 min ago
Staff
Joined: 2017-12-14 02:48
你好,

你好,

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

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

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

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

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

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

 

randyzhou
Offline
Last seen: 11 hours 23 min ago
Joined: 2014-02-20 07:09
睡眠前是没有对IO口改变电平的任何处理

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

CYibin
Offline
Last seen: 15 hours 57 min ago
Staff
Joined: 2017-12-14 02:48
你好,

你好,

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

void system_init()

{

wdg_init(0);

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

}

 

 

randyzhou
Offline
Last seen: 11 hours 23 min ago
Joined: 2014-02-20 07:09
按照你的方式我加了,测试验证后,没什么改变,跟原来一样。

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

CYibin
Offline
Last seen: 15 hours 57 min ago
Staff
Joined: 2017-12-14 02:48
你好,

你好,

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