最近调试HCS12出现几个问题,关于AD和DEBUG的

2020-02-11 10:09发布

最近调试HCS12 出现几个问题:
1.DEBUG时,打开regester后,AD采集会停止,不再恢复,寄存器数值未改变,只是AD停了。
2.单片机运行过程中,突然死机,如果在DEBUG,点击STOP,再运行正常。
3.有一次代码无法正常运行,后来同事说加无用代码就可以了,据说是单片机某处FLASH不可写,必须加空代码掠过,求证
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
qingyin2009
2020-02-11 15:28
FSL_TICS_Robin 发表于 2015-10-26 09:42
16bit MCU的问题,建议在飞思卡尔官方论坛的S12 / MagniV Microcontrollers版块发帖提问,用英文简单描述一 ...

发帖了,没人回答。我看好多都是过了好多天也没任何回复的。

AD部分代码大概如下,仿真的时候,进入MCUregester,AD转换就停止

  1. #include <hidef.h>      /* common defines and macros */
  2. #include "derivative.h"      /* derivative-specific definitions */


  3. void  AutoEle_InitPLL (void)
  4. {
  5.         CLKSEL &= ~(0x80);                 //Select OSCCLK as MCU clock
  6.         REFDV = 0xC0;                         //FREF = Fosc / (REFDIV +1), FEFFRQ=11, REFDIV=0
  7.         SYNR = 0xC2;                         //FVCO = 2 * Fref * (SYNR + 1)
  8.         POSTDIV = 0;        //FPLL = FVCO / (2 * POSTDIV)

  9.         while (!CRGFLG_LOCK) ;         // Wait unitl PLL locked

  10.         CLKSEL |= 0x80;                 //Select PLLCLK as MCU clock
  11. }

  12. /************************************************************************
  13. *FUNCTION NAME:AutoEle_EP100_ADInit
  14. *功能: 初始化AD模块
  15. *参数:void
  16. *返回值void
  17. ************************************************************************/
  18. void AutoEle_EP100_ADInit(void)
  19. {
  20.         /* AD0   AN0-AN15 */
  21.         ATD0CTL0 = 15;                                 //回环通道
  22.         ATD0CTL1 = 0x2F;                                 //外部触发源,10位分辨率
  23.         ATD0CTL2 = 0x40;                                  //CCF位快速清除,及中断使能配置
  24.         ATD0CTL3 = 0x80 | (0 << 3);         //右对齐,转换序列长度为3,非FIFO模式
  25.         ATD0CTL4 = 0x57;                         //采样时间8AD时钟周期,总线时钟分频 Fad= Fbus/(2*(Prs[4~0] + 1)) 1M ,
  26.         ATD0CMPE = 0x0;                                 //比较功能关闭  2bytes
  27.         ATD0DIEN = 0x0;                                 //Disable digital input buffer to ANx pin 2bytes

  28.         ATD0CTL5 = 0x10;

  29.         /* AD1 AN16-AN23 */
  30.         ATD1CTL0 = 7;                                         //回环通道
  31.         ATD1CTL1 = 0x2F;                                 //外部触发源,10位分辨率
  32.         ATD1CTL2 = 0x40;
  33.         ATD1CTL3 = 0x80 | (8 << 3);         //右对齐,转换序列长度为3,非FIFO模式
  34.         ATD1CTL4 = 0x57;                         //采样时间8AD时钟周期,总线时钟分频 Fad= Fbus/(2*(Prs[4~0] + 1)) 1M ,
  35.         ATD1CMPE = 0x0;                                 //比较功能关闭  2bytes
  36.         ATD1DIEN = 0x18;                                 //Disable digital input buffer to ANx pin 2bytes

  37.         ATD1CTL5 = 0x10;
  38. }

  39. void main(void)
  40. {
  41.   /* put your own code here */
  42.     AutoEle_EP100_ADInit();
  43.     AutoEle_EP100_ADInit();
  44.    
  45.    
  46.     EnableInterrupts;


  47.     for(;;)
  48.     {
  49.         if ((ATD0STAT0_SCF == 0) || (ATD1STAT0_SCF == 0))
  50.             {
  51.            
  52.             }
  53.             else
  54.             {
  55.                 ATD0CTL5 = 0x10;                                                 //启动转换
  56.                 ATD1CTL5 = 0x10;                                                 //启动转换
  57.             }
  58.         
  59.         _FEED_COP(); /* feeds the dog */
  60.     } /* loop forever */
  61.     /* please make sure that you never leave main */
  62. }
复制代码

一周热门 更多>