exxiaole 发表于 2019-7-27 14:15:41

[求助]BS86C16A-3芯片的中断服务进不了

第一次用合泰BS系列的芯片,发现中断服务函数进不了(用的是CTM0),弄了个测试程序进行排查,发现CTMA0E与CTMA0F无法置1。而CT0ON、CT0PAU、EMI等标志位测试都是符合预想值的。出现这种问题该怎么搞,想不到切入点,只能请求各路大神了,具体测试代码如下:

//定时器初始化设置如下:
void Timer_Init()
{
_ctm0c0 = 0x00;       
_ctm0c1 = 0xc1;
_ctm0al = 0xF4;               
_ctm0ah = 0x01;   

_ctma0f = 0;
_ctma0e = 1;
_ct0on = 1;
_ct0pau = 0;
_emi = 1;
}

//在主函数中判断_ctma0e并不等于一1,_ctma0f也是一直不会置位,中断函数没有进入
volatile bit test0;
volatile bit test1;
void main()
{
        _wdtc = 0b01010111;
        _pbc = 0;
        _pb = 0xfe;
       
        Timer_Init();
        while(1)
        {
                _clrwdt();
               
                test0 = _ctma0e;
                test1 = _ctma0f;
                if(test0 == 1)
                        _pb1 = 0;        //实测没有清零
                       
                if(test1 == 1)
                        _pb2 = 0;        //实测没有清零
        }

}

void __attribute((interrupt(0x14))) CTM0_ISR(void)
{
        _pb3 = 0;
        //_ctma0f =0;                       
}




admin 发表于 2019-7-27 16:11:43

BS的看门狗是关不掉的,不停在复位,注意清狗
中断标志位需要手动清0

exxiaole 发表于 2019-7-27 17:48:31

admin 发表于 2019-7-27 16:11
BS的看门狗是关不掉的,不停在复位,注意清狗
中断标志位需要手动清0

我这程序看门狗是使能的,设置_wdtc后低三位为1使其溢出时间最大(手册上说有8s),而且while里也有喂狗的步骤呀。然后,我程序里注释的实测没有清零是指对应PB口没有清零,对应端口连着led(高电平亮),程序一开始就点亮全部led,通过if判断标志位的值,但是测试时灯依旧是亮的,所以判断该该标志位的值没有置1。

admin 发表于 2019-7-28 10:15:13

exxiaole 发表于 2019-7-27 17:48
我这程序看门狗是使能的,设置_wdtc后低三位为1使其溢出时间最大(手册上说有8s),而且while里也有喂狗的 ...

示波器看看呢,代码看起来没啥问题啊

xionghaoyun 发表于 2020-10-25 09:20:32

前来学习一波 我BS86D12C 寄存器配完PWN0输出想死
页: [1]
查看完整版本: [求助]BS86C16A-3芯片的中断服务进不了