DSP2812上电不复位

[复制链接]
3261|42
 楼主| Mr5Tao 发表于 2016-5-16 23:44 | 显示全部楼层
zhangmangui 发表于 2016-5-14 22:12
建议你参考一些TI的EVM板  或其他板    我也有分享  原理图
参考一下电容和电阻的值 ...

我怀疑是我程序上电初始化顺序的问题
主函数如下:
void main (void)
{
    InitSysCtrl();  //初始化系统函数

        DINT;
        IER = 0x0000;   //禁止CPU中断
        IFR = 0x0000;   //清除CPU中断标志
       
        InitPieCtrl();  //初始化PIE控制寄存器
        InitPieVectTable(); //初始化PIE中断向量表
        InitCpuTimers();                
        InitGpio();         //初始化Gpio口
        InitSpi();          //初始化Spi
        InitSci();          //初始化Sci
        Init_EEPROM();
        Init_Data();        //需要手动复位

        EALLOW;       
        PieVectTable.TINT0 = &ISRTimer0;
        XIntruptRegs.XNMICR.bit.SELECT=0; //Timer1连接到XINT13
        XIntruptRegs.XNMICR.bit.ENABLE=0; //禁止非屏蔽中断NMI
        PieVectTable.XINT13 = &ISRTimer1;//用Timer1中断函数入口更新PIE向量表  
        PieVectTable.TINT2 = &ISRTimer2;

        XIntruptRegs.XINT1CR.bit.POLARITY=0;//下降沿产生中断
        XIntruptRegs.XINT1CR.bit.ENABLE=1; //使能XINT1中断
        PieVectTable.XINT1= &XINT1; //中断服务程序入口地址放入中断向量表

        EDIS;   
       
        ConfigCpuTimer(&CpuTimer0, 150, 1);        //设置PWM周期
        StartCpuTimer0();
        IER |= M_INT1;
        PieCtrl.PIEIER1.bit.INTx7=1;

        ConfigCpuTimer(&CpuTimer1, 150, 500000);        //设置CPU定时器定时
        StartCpuTimer1();
        IER |= M_INT13;

        ConfigCpuTimer(&CpuTimer2, 150, 500000);        //设置CPU定时器定时(闪烁间隔0.5s)
        StartCpuTimer2();
        IER |= M_INT14;  //开中断
        PieCtrl.PIEIER1.bit.INTx4=1;//XINT1使能位于PIE第1组第4个

        EINT;                                                // 允许INTM
        ERTM;                                                // 允许DBGM
       
    KEY_SET=1;  //按键输入端口电平置高            
        KEY_ADD=1;
        KEY_SUB=1;

//        Init_Data(); //数据跳动

        while (1)   
          {
                KeyScan();
                Display();
        }                 
}
如果初始化数据的函数放在前面(红色部分),那么程序就需要手动复位后才能正常工作;如果初始化数据的函数放在后面(绿色部分),那么上电可以运行,不需要手动复位,但是执行结果有时候会不正确。
zhangmangui 发表于 2016-5-17 22:44 | 显示全部楼层
初始化里面不知道都干了啥   我觉得个人的相关初始化放到系统 中断等的初始化之后   比较合理
这种情况应该是逻辑的问题   代码肯定执行了  只是你想要的效果没有达到
 楼主| Mr5Tao 发表于 2016-5-18 12:38 | 显示全部楼层
zhangmangui 发表于 2016-5-17 22:44
初始化里面不知道都干了啥   我觉得个人的相关初始化放到系统 中断等的初始化之后   比较合理
这种情况应该 ...

对的,昨天下午仔细分析了一下,就是初始化顺序的问题,把顺序换了,问题已经完美解决了
Sode 发表于 2016-5-18 13:31 | 显示全部楼层
应该是程序的问题
comeon201208 发表于 2016-5-18 22:30 | 显示全部楼层
上电不复位的,这个是不是首先要检查下你的复位电路的,一般最好使用复位芯片的复位电路的。
comeon201208 发表于 2016-5-18 22:46 | 显示全部楼层
上电不复位?是怎么回事的?检查下设计的复位电路的呗
FCCdsp 发表于 2016-5-18 22:49 | 显示全部楼层
应该是程序的问题,我之前也遇到过相同的问题
 楼主| Mr5Tao 发表于 2016-10-12 22:03 | 显示全部楼层
找到原因了,是因为我的初始化当中,读取EEPROM中的数据时和其他子程序冲突了,影响了子程序的执行,在前面加了一个长延时就解决问题了
309030106 发表于 2016-10-18 22:05 | 显示全部楼层
一般掉电之后寄存器不都复位了吗,怎么还上电不能复位呢
smilingangel 发表于 2016-10-19 20:54 | 显示全部楼层
弱弱的问一句,你这手动复位时怎么复位的/?
uytyu 发表于 2016-10-19 23:10 | 显示全部楼层
你的设计电路图呢?
uytyu 发表于 2016-10-19 23:12 | 显示全部楼层
不能自动复位一般都是IO的问题了。
zhangbo1985 发表于 2016-10-20 21:45 | 显示全部楼层
上电不复位?是什么问题的?没遇到过的
tongbu2015 发表于 2016-10-21 22:25 | 显示全部楼层
这个首先要确定下是否上电后程序在运行的。。
tongbu2015 发表于 2016-10-21 22:26 | 显示全部楼层
有可能已经复位运行了,但是一直在某一个地方循环运行不出来的。。
baimiaocun2015 发表于 2016-10-23 11:51 | 显示全部楼层
这个还是先理论的计算下的,然后在理论值附件调整的
 楼主| Mr5Tao 发表于 2016-10-24 21:54 | 显示全部楼层
uytyu 发表于 2016-10-19 23:12
不能自动复位一般都是IO的问题了。

问题解决了,其实不是不能复位的问题,是EEPROM初始化和一个子程序冲突了
 楼主| Mr5Tao 发表于 2016-10-24 21:55 | 显示全部楼层
zhangbo1985 发表于 2016-10-20 21:45
上电不复位?是什么问题的?没遇到过的

其实不是没有复位的问题,是另外的子程序冲突了
 楼主| Mr5Tao 发表于 2016-10-24 21:55 | 显示全部楼层
tongbu2015 发表于 2016-10-21 22:26
有可能已经复位运行了,但是一直在某一个地方循环运行不出来的。。

对的,是其他地方的问题
 楼主| Mr5Tao 发表于 2016-10-24 21:56 | 显示全部楼层
baimiaocun2015 发表于 2016-10-23 11:51
这个还是先理论的计算下的,然后在理论值附件调整的

是子程序冲突了,造成了没有复位的假象
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部