TOP

FAQ 常见问答

    • .可以在Interrupt Service Routine内执行Call吗?

      因为sonix MCU Stack数目有限,在Interrupt中执行Call要特别注意,如果在进入Interrupt时Stack已经满了,则会造成Stack溢出,而使得程式无法返回。所以若要在Interrupt内执行Call,必需考虑在最差情况下Stack的使用数目,务必使在最差状况下进入Interrupt仍有Stack空间。
    • .程式不进入中断,需要检查哪些方面?

      用户需要从以下几个方面检查: 
      1. 检查全局中断FGIE是否使能; 
      2. 相应中断的中断使能是否开启; 
      3. 确定程式是否可以产生中断,如计时器初始化中的设置是否可以溢出;要产生外部中断,P0、P1相 应的I/O口必须设置为输入模式,且有电平变化等。
    • .SONIX单片机有没有中断优先顺序?如何设置?

      请见内文
    • .P00设置完全正确,为何无法进入中断?

      首先查看P00中断的设置是否正确,比如P00IEN是否置1,PEDGE寄存器设置是否正确(控制触发边缘类型)。如果以上设定都没有问题,接着检查程序中是否在使用TC0或TC1计数或者产生中断,如果是,请确认TC0或TC1的计数时钟源选择为Fcpu,而不能将TC0或TC1的计数时钟源选择为外部P00口,否则当P00口有触发电平时,TC0或TC1的计数值会加1,但P00IRQ不会置1,从而导致P00无法进入中断。
    • .为什么芯片无法进入中断?

      首先查看在INTEN寄存器中相应中断源的控制位是否置1,另外还要保证在程序初始化中已经打开总中断控制位FGIE(位于STKP寄存器BIT7)。
    • .为什么程序中清FP00IEN后,本来应该禁止外部中断INT0,但在程序运行时发现也可进入?

      SONIX的8位MCU中断机制是一旦在P0.0口接受到中断条件,总会设置相应的中断标志位FP00IRQ,但能不能进入中断还要看FP00IEN是否允许(这样做是为了客户采用查询方式的需要)。但是一旦中断标志位FP00IRQ被外部中断条件设定后,又有其他中断产生,此时若中断程序处理不当,则可能造成错误进入INT0中断。解决办法: 
      1.若中断程序中不需要INT0中断,则中断程序中不要查FP00IRQ标志。 
      2.若中断程序中需要INT0中断,应该配合FP00IEN一起使用,如下:


      B0BTS1 FP00IEN;P00中断是否打开
      JMP EXIT;没有P00中断,退出
      B0BTS1 P00IRQ;进一步查询中断请求标志
      JMP NEXT
      :
      NEXT:;P00中断服务程序
      :
      EXIT:;退出中断服务程序
      RETI