打印

启动电子狗

[复制链接]
528|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
morrisk|  楼主 | 2016-6-4 17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问个弱智的问题,CY7C63803如何启动电子狗
沙发
zyf部长| | 2016-6-4 17:37 | 只看该作者
测试程序呢

使用特权

评论回复
板凳
morrisk|  楼主 | 2016-6-4 17:40 | 只看该作者

void  main()
{
unsigned int t=0x1000;
      OSC_CR0=OSC_CR0_CPU_24MHz;
OSC_CR0 |= OSC_CR0_SLEEP_1Hz; //电子狗时间大约3秒
   CLKIOCR=0x00;   
  CPUCLKCR=0x00;  
    TCAPINTE=0x0;  
TMRCLKCR=0x82;  
  TMRCR=0x00;
VREGCR=0x0;     
   
M8C_EnableWatchDog;//使能电子狗   
M8C_ClearWDT;      //喂狗  


P06CR=0x03;     // LED输出
P0DATA |= 0x40;//灯灭
        while(t--);

        while(1)P0DATA &= 0x3F;//灯亮
        
}

使用特权

评论回复
地板
小小猫咪| | 2016-6-4 17:44 | 只看该作者
详细描述下过程

使用特权

评论回复
5
morrisk|  楼主 | 2016-6-4 17:45 | 只看该作者

按理来说,灯亮后,进入死循环,因为没喂狗,3秒后将复位,程序从新运行,灯灭,再亮
灯应该是闪烁的,但现在灯灭后就没在亮过了.
但死循环改成:while(1){P0DATA &= 0x3F;//灯亮M8C_ClearWDT;      //喂狗}
灯是常亮,现象正常,这是怎么回事??

使用特权

评论回复
6
kangzj| | 2016-6-4 17:47 | 只看该作者

去看看
view-->Global Resources --> Watchdog Enable-->Enable  

没用过这IC 但应该差不了多少

使用特权

评论回复
7
morrisk|  楼主 | 2016-6-4 17:49 | 只看该作者
view-->DEVICE EDITOR--> Watchdog Enable-->Enable

使用特权

评论回复
8
morrisk|  楼主 | 2016-6-4 17:51 | 只看该作者

SLEEP_TIME    1HZ                这样确实启动了电子狗,而且测试成功,但我在工程中启动后又发现新问题,工程中我使用了1ms定时器,我发现启动了电子狗,1ms定时器似乎就不行了,只要运行到1ms定时器处就卡在这里(用于延时函数)

使用特权

评论回复
9
juventus9554| | 2016-6-4 17:53 | 只看该作者
原来工程文件是前辈已经调好的,没问题,我编译一下,稍入后现象正常

使用特权

评论回复
10
morrisk|  楼主 | 2016-6-4 17:55 | 只看该作者
程序不动,在view->Device Editor->Global Resources 中 Watchdog Enable   我改为使能,然后再编译工程

使用特权

评论回复
11
morrisk|  楼主 | 2016-6-4 17:58 | 只看该作者
程序依旧不动,只在前一操作中,把使能电子狗又改回来,再编译工程,稍入后,程序就跑不动了,卡在1MS定时器处

使用特权

评论回复
12
司徒老鹰| | 2016-6-4 18:01 | 只看该作者
这使能又失能,什么都没改,不是与原文件一样吗?为什么会这样

使用特权

评论回复
13
llljh| | 2016-6-4 18:03 | 只看该作者
看门狗我一直使用正常的啊

使用特权

评论回复
14
morrisk|  楼主 | 2016-6-4 18:05 | 只看该作者
没开看门狗时,1MS定时器正常工作,开了看门狗后,看门狗正常工作,但1MS定时器就失效了,有例程可以参考吗?

使用特权

评论回复
15
dingy| | 2016-6-4 18:07 | 只看该作者
我没用过CY7C的,但是CY8C的我用过没问题;要开启定时器TIMER1中断;
demo:
   #include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#pragma interrupt_handler Timer16_ISR
void Timer16_ISR(void);
void Timer_start(void);
struct I2C_Regs
{  
//BYTE KeyValue;
int RawCount;
int BaseLine;
} MyI2C_Regs;
char Key_status=0;
char Press_Enable=0;
char Pulse_status=0;
int TimeCounter = 0;
int RawBuff[8]={0};
void main(void)
{
        char i;
        long int RawTotal;
        // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
        // Insert your main routine code here.        
        EzI2Cs_SetRamBuffer(sizeof(MyI2C_Regs), 1, (BYTE *) &MyI2C_Regs);
        M8C_EnableGInt ;
        EzI2Cs_Start();
        
        CSD_Start();
        CSD_SetDefaultFingerThresholds() ;
        CSD_InitializeBaselines() ;
        LED_1_Start();
        CSD_ScanAllSensors();
        CSD_UpdateAllBaselines();
        for(i=0;i<8;i++)
        {
                RawBuff[i] = CSD_waSnsResult[0];        
        }
        while(1)
        {
        //        EzI2Cs_Stop();
                CSD_ScanAllSensors();                                 //scan all sensors in array (buttons and sliders)
                RawTotal = 0;
                for(i=0;i<8;i++)
                {
                        //CSD_waSnsBaseline[i]=CSD_waSnsResult[i];
                        if(i==7)
                        RawBuff[i] = CSD_waSnsResult[0];
                        else
                        RawBuff[i] = RawBuff[i+1];        
                        RawTotal += RawBuff[i];
                }                        
                CSD_waSnsResult[0] = RawTotal/8 ;
                CSD_UpdateAllBaselines();         
                if (CSD_bIsAnySensorActive())
                {
                        if(Press_Enable==0)
                        {
                                Press_Enable=1;
                                LED_1_On();        
                                Timer_start();
                        }
                }
                else
                {
                        Press_Enable=0;        
                        LED_1_Off();                        
                }
                MyI2C_Regs.RawCount=CSD_waSnsResult[0];
                MyI2C_Regs.BaseLine=CSD_waSnsBaseline[0];
        }        
        
}
void Timer_start(void)
{
        Timer16_Start();
        Timer16_EnableInt();
        TimeCounter = 0;
}

void Timer_stop(void)
{
        Timer16_Stop();
        Timer16_DisableInt();
}

void Timer16_ISR(void)
{        
        TimeCounter ++;
        if(TimeCounter >287)
        {
                Timer16_Stop();
                Timer16_DisableInt();
                LED_1_Off();
        }
}

使用特权

评论回复
16
morrisk|  楼主 | 2016-6-4 18:09 | 只看该作者
已经好了,问题出的希奇古怪,好的莫名其秒,谢谢各位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

701

主题

6879

帖子

2

粉丝